토큰 인식 오류로 인해 Jenkins에서 실행되는 스크립트가 실패합니다.

토큰 인식 오류로 인해 Jenkins에서 실행되는 스크립트가 실패합니다.

Jenkins CI/CD 소프트웨어에서 빌드 작업을 만들고 있습니다. 빌드 작업은 Github에서 내 Android 프로젝트를 복제하고 APK를 생성합니다. Ubuntu 20.04 LTS 서버 운영 체제를 사용하고 있습니다.

빌드 단계의 일부로 Jenkins를 통해 다음 명령을 실행합니다.

rm -r app/src/main/java/in/myproj/utils/Constants.kt

하지만 다음과 같은 오류가 발생했습니다.

/tmp/jenkins10737829520192897047.sh: 1: Syntax error: "in" unexpected

inbash 가 폴더 이름을 Constant. 어떤 도움이라도 대단히 감사하겠습니다.

편집하다:

문제를 더 자세히 디버깅하여 실제 원인을 찾았습니다. 이는 rm명령 실패 가 아닙니다 . 일부 코드 조각을 파일에 추가하는 또 다른 빌드 단계가 있습니다. 실제로 실패한 코드 조각은 다음과 같습니다.

cat << EOT >> app/src/main/java/in/myproj/utils/Constants.kt

"package `in`.myproj.utils

class Constants {
    companion object {
        const val BASE_URL = "https://api.example.in/api/"
        const val BASE_URL_IMAGE_ADDRESS = "https://dashboard.example.in:5555/"
        const val BASE_URL_PROFILE_IMAGE_ADDRESS = "https://api.example.in/"
        const val ABOUT_US_URL = "https://example.in/aboutus.html"
        const val PRIVACY_POLICY_URL = "https://example.in/privacy-policy.html"
        const val TERMS_AND_CONDITIONS_URL = "https://example.in/terms-condition.html"
        const val REQUEST_TIMEOUT_DURATION = 10
        const val STATUS_SUCCESS = 1

답변1

문제는 EOT를 어떻게 사용하느냐이다. 사용할 때인용되지 않음word는 쓰기 전에 내용이 셸에 의해 확장되는 구분 기호 구분 기호 역할을 합니다. 설명된 대로배쉬 매뉴얼:

단어의 일부가 인용된 경우 구분 기호는 단어에서 인용문을 제거한 결과이며 문서의 줄은 여기에서 확장되지 않습니다. 단어가 인용되지 않으면 here-document의 모든 행은 매개변수 확장, 명령 대체 및 산술 확장을 거치게 됩니다. 문자 순서 \newline은 무시되며 '\', '$ 문자를 인용하려면 '\'를 사용해야 합니다. " 그리고 "" .

따라서 `in`쉘은 heredoc에서 읽은 내용을 명령으로 대체하므로 명령 실행을 시도 in하고 해당 출력을 반환합니다.

실제로 이는 다음을 인용해야 함을 의미합니다 EOT.

cat << 'EOT' >> app/src/main/java/in/myproj/utils/Constants.kt

이는 여기 문서에 있을 수 있는 모든 변수가 확장되지 않음을 의미하지만 귀하의 질문에 아무것도 표시되지 않기 때문에 이것이 문제가 아니라고 가정합니다.

관련 정보