我的Jenkins管道代码使用
从bitbucket成功检出了我的私有git repocheckout([$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 ."