如何将jenkins凭据传递到docker构建命令?



我的Jenkins管道代码使用

从bitbucket成功检出了我的私有git repo
checkout([$class: 'GitSCM',
userRemoteConfigs: [[credentialsId: 'cicd-user', url:'ssh://git@bitbucket.myorg.co:7999/A/software.git']]

在同一软件。git我有一个Dockerfile,我想用它来构建软件中存在的各种构建目标。在Kubernetes上使用git,我正在尝试将jenkins凭证传递到我想要构建和运行的docker容器中。

所以当我签出软件时,在同一个jenkins管道中。git(上面的代码),我尝试做以下事情来获得构建的docker容器

withCredentials([sshUserPrivateKey(credentialsId: 'cicd-user', keyFileVariable: 'FILE')]) { 
sh "cd ${WORKSPACE} && docker build -t ${some-name} --build-arg USERNAME=cicd-user --build-arg  PRIV_KEY_FILE=$FILE --network=host -f software/tools/jenkins/${some-name}/Dockerfile ."
}

在Dockerfile中我做

RUN echo "$PRIV_KEY_FILE" > /home/"$USERNAME"/.ssh/id_rsa && 
chmod 700 /home/"$USERNAME"/.ssh/id_rsa 

运行echo "Host bitbucket.myorg。有限公司 n tStrictHostKeyChecking没有 n"在比;~/. ssh/config

但是仍然从我的Docker容器,我不能成功地签出我的私人回购(s)。我错过了什么?有什么意见和建议吗?谢谢。

请阅读Groovy字符串插值。

在你的表达式

sh "cd ${WORKSPACE} && docker build -t ${some-name} 
--build-arg USERNAME=cicd-user 
--build-arg  PRIV_KEY_FILE=$FILE --network=host 
-f software/tools/jenkins/${some-name}/Dockerfile ."

使用双引号,所以Groovy插入字符串中的所有变量。这包括$FILE,所以Groovy将其替换为Groovy变量FILE的值。您没有任何具有该名称的Groovy变量(而是与Groovy不同的bash变量),因此它被替换为空字符串。

为了防止插入那个特定的变量,您需要通过用转义$来提示Groovy不要插入这个特定的变量:

sh "cd ${WORKSPACE} && docker build -t ${some-name}
--build-arg USERNAME=cicd-user 
--build-arg  PRIV_KEY_FILE=$FILE --network=host 
-f software/tools/jenkins/${some-name}/Dockerfile ."

最新更新