我正在阅读 Jenkins 文档 并看到以下示例:
pipeline {
agent any
environment {
EXAMPLE_CREDS = credentials('example-credentials-id')
}
stages {
stage('Example') {
steps {
/* CORRECT */
sh('curl -u $EXAMPLE_CREDS_USR:$EXAMPLE_CREDS_PSW https://example.com/')
}
}
}
}
在同一个示例中,我们有以下短语:
“如果 Groovy 执行插值,敏感值将被直接注入 sh 步骤的参数中,这意味着文字值将作为 OS 进程列表中代理上 sh 进程的参数可见引用这些敏感环境变量时使用单引号而不是双引号可以防止这种类型的泄漏。”
所以这让我问:jenkins 如何在不“解析” $EXAMPLE_CREDS_USR 和 $EXAMPLE_CREDS_PSW 的值的情况下执行curl 命令?因为这些值不会使用单引号扩展,对吗?
Jenkins 将它们作为环境变量传递,并且 shell 扩展它们。