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
in
bash 가 폴더 이름을 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
이는 여기 문서에 있을 수 있는 모든 변수가 확장되지 않음을 의미하지만 귀하의 질문에 아무것도 표시되지 않기 때문에 이것이 문제가 아니라고 가정합니다.