刚开始查看Jenkins Declarative管道并在docker容器中运行我的构建。我有一个项目通过git提取npm包,因此需要设置ssh键。
从我遇到的情况来看,我可以设置构建参数,例如ARG ssh_pub_key
,然后在我的Dockerfile中
pipeline {
agent {
dockerfile {
args '''--build-arg ssh_prv_key="$(cat /var/lib/jenkins-git/.ssh/id_rsa)"'''
}
}
stages {
stage('Test') {
steps {
sh 'echo $ssh_prv_key'
}
}
}
}
我在Jenkinsfile中采用了以下方法
--build-arg
在Jenkins中运行构建时,我在构建图像时得到以下输出(没有提到docker build -t 085eb412f6dd28c1a7843aa9f9ed84e7c4af3e1b -f Dockerfile .
。)
Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node
并且没有变量
我没有正确设置它们吗?有没有人以不同的方式处理密钥复制?
由于
更新
我的Jenkins文件现在看起来如下,但不会以get
的形式运行def ssh_prv_key = sh script: 'cat /var/lib/jenkins-git/.ssh/id_rsa', returnStdout: true
def ssh_pub_key = sh script: 'cat /var/lib/jenkins-git/.ssh/id_rsa.pub', returnStdout: true
pipeline {
agent {
dockerfile {
args """--build-arg ssh_prv_key=\"${ssh_prv_key}\" --build-arg ssh_pub_key=\"${ssh_pub_key}\" """
}
}
stages {
stage('Test') {
steps {
sh 'echo $ssh_prv_key'
}
}
}
}
似乎我无法在管道声明之外运行任何脚本?
myVolumeView.clipsToBounds = true
答案 0 :(得分:1)
此处$(cat /var/lib/jenkins-git/.ssh/id_rsa)
是一个shell命令。
AFAIK,绑定必须在管道线之外声明,以便在定义代理时使用它们。
因此,请对管道作业进行参数化。
ssh_prv_key
添加为凭据参数。 Secretfile
ssh_pub_key
然后在ssh_prv_key
dockerfile
指令中使用additionalBuildArgs
。
pipeline {
agent {
dockerfile {
additionalBuildArgs ""--build-arg ssh_prv_key=\"$ssh_prv_key\" --build-arg ssh_pub_key=\"$ssh_pub_key\""
}
}
stages {
stage('Test') {
steps {
sh "echo $ssh_prv_key"
}
}
}
}