如何在声明性Jenkins管道中将机密文件挂载到docker映像中



目前我有一个类似于这样的管道:

pipeline {
agent {
docker {
label 'linux'
image 'java:8'
args '-v /home/tester/.gradle:/.gradle'
}
}
environment {
HOME = '/'
GRADLE_USER_HOME = '/.gradle'
GRADLE_PROPERTIES = credentials('gradle.properties')
}
stages {
stage('Build') {
steps {
sh 'cp ${GRADLE_PROPERTIES} ${GRADLE_USER_HOME}/'
sh './gradlew clean check'
}
}
}
}

问题是,在构建期间,gradle.properties最终被放置在主机系统上一个更为已知的位置。

我知道Docker可以让我从主机"挂载"文件。所以我想改为这样做:

agent {
docker {
label 'linux'
image 'java:8'
args '-v /home/tester/.gradle:/.gradle ' +
'-v ' + credentials('gradle.properties') +
':/.gradle/gradle.properties'
}
}

不幸的是,这最终运行的是:

$ docker run -t -d -u 1001:1001 -v /home/tester/.gradle:/.gradle -v @credentials(<anonymous>=gradle.properties):/.gradle/gradle.properties -w

有没有办法让它扩大它?

我找不到让环境为docker args工作的方法。我的解决方法最终是切换回脚本管道:

agent {
label 'linux'
}
environment {
GRADLE_PROPERTIES = credentials('gradle.properties')
}
steps{
script {
docker.image('java:8').inside('-v /home/tester/.gradle:/.gradle ' +
"-v $GRADLE_PROPERTIES:/.gradle/gradle.properties"){
}
}
}

以下是我以声明方式将kubectl配置机密文件安装到容器中所做的操作。它应该适用于其他类型的秘密文件挂载。

stage('Deploy') {
environment {
KUBECONFIG = credentials('bec94647-xxxx-xxxx-xxxx-4300c4d34ae8')
}
agent {
docker {
image 'alpine/k8s:1.27.4'
args "-u root -v ${env.KUBECONFIG}:/root/.kube/config:ro,z"
}
}
steps {
sh './deploy.sh'
}
}

最新更新