2.249.2 버전 업데이트 이후 jenkins 공통 라이브러리에서 사용하고 있는 sh, bat 코드에서 아래와 같은 경고 문구가 발생했다.
Warning: A secret was passed to “sh” using Groovy String interpolation, which is insecure
내용인 즉슨 sh 코드에서 큰따옴표로 묶은 구문이 SQL Injection에 취약하다는 내용이 있었고(https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#string-interpolation) 작은따옴표로 바꿔줘야 한다는 것이었다. 근데 단순히 큰따옴표에서 작은따옴표로 바꾸면 명령어에 변수 주입된 부분이 제대로 동작하지 않는다. 구글링과 삽질을 통해서 해결했는데 다음과 같다.
before code:
def cmd = sh(script: “””
curl -u $USERNAME:PASSWORD -X DELETE “${repoUrl}/service/rest/v1/search/assets/${ID}” -H “accept: application/json”
“””, returnStdout: false, returnStatus: true)
after code:
withEnv([“repoUrl=${repoUrl}”, “ID=${ID}”]) {
def cmd = sh(script: ‘’’
curl -u $USERNAME:PASSWORD -X DELETE “${repoUrl}/service/rest/v1/search/assets/${ID}” -H “accept: application/json”
‘’’, returnStdout: false, returnStatus: true)
}
차이점은 명령어 앞, 뒤로 큰따옴표에서 작은따옴표로 바뀌었고 변수 주입이 제대로 되기 위해 withEnv옵션으로 처리해주니 잘 동작했다.