我正在使用 Jenkins 腳本管道,自從上次更新以來,我收到了一個新警告,我想將其靜音,這是一個 MWE:
// FROM https://jenkins.io/doc/pipeline/examples/#parallel-multiple-nodes
def labels = []
if (Host == 'true') {
labels.add('<host-slavename>')
}
def builders = [:]
for (x in labels) {
def label = x
builders[label] = {
ansiColor('xterm') {
node(label) {
stage('cleanup') {
deleteDir()
}
stage('build') {
def timestamp = sh (script: 'echo -n `(date %Y%m%d%H%M%S)`', returnStdout: true)
withCredentials([string(credentialsId: 'TEST_PASSWORD', variable: 'PASSWORD')]){
sh """
logger \
TEST_1 "${PASSWORD}" TEST_2 \
TEST_3 $timestamp TEST_4
"""
sh '''
logger \
TEST_1 "$PASSWORD" TEST_2 \
TEST_3 $timestamp TEST_4
'''
}
}
}
}
}
}
parallel builders
第一個sh塊回傳
Warning: A secret was passed to "sh" using Groovy String interpolation, which is insecure.
Affected argument(s) used the following variable(s): [PASSWORD]
See https://jenkins.io/redirect/groovy-string-interpolation for details.
logger TEST_1 **** TEST_2 TEST_3 20211029074911 TEST_4
它至少列印時間戳和密碼(它被審查,但有效),但會引發警告。
第二個sh塊回傳
logger TEST_1 **** TEST_2 TEST_3 TEST_4
所以沒有警告,也沒有時間戳。
有沒有辦法撰寫一個不顯示警告但仍然顯示時間戳的腳本化管道?
uj5u.com熱心網友回復:
當您在sh第一步中使用 Groovy 字串插值時會出現警告"${PASSWORD}",原因如Interpolation of Sensitive Environment Variables 中所述。
這就是為什么你應該總是讓 shell 像你在sh第二步中所做的那樣決議環境變數。
要使用非環境變數,如timestamp,請通過sh一步withEnv一步地包裝步驟將它們轉換為環境變數:
withEnv(["timestamp=$timestamp"]) {
sh '''
logger \
TEST_1 "$PASSWORD" TEST_2 \
TEST_3 $timestamp TEST_4
'''
}
這將環境變數的范圍限制為withEnv塊。
或者,您可以向env地圖添加成員:
env.timestamp = sh (script: 'echo -n `(date %Y%m%d%H%M%S)`', returnStdout: true)
sh '''
logger \
TEST_1 "$PASSWORD" TEST_2 \
TEST_3 $timestamp TEST_4
'''
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/342359.html
