声明性Jenkins管道和Docker

时间:2017-09-25 08:50:09

标签: git docker jenkins ssh

刚开始查看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

1 个答案:

答案 0 :(得分:1)

此处$(cat /var/lib/jenkins-git/.ssh/id_rsa)是一个shell命令。

AFAIK,绑定必须在管道线之外声明,以便在定义代理时使用它们。

因此,请对管道作业进行参数化。

  • ssh_prv_key添加为凭据参数
  • 选择Secretfile
  • 将默认值设置为upload secretfile
  • 重复ssh_pub_key
  • 的步骤

Parameterized Pipeline

然后在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"
        }
      }
    }
}