声明式 Jenkins 管道:是否可以使用 SSH 凭据构建 Dockerfile?

Declarative Jenkins pipeline: is it possible to build Dockerfile with SSH credentials?

我正在尝试设置以下 Jenkins 管道:

  1. 从 SCM 签出的管道
  2. 构建在 Docker 容器内运行
  3. Docker 图像是从 Docker 文件构建的
  4. Docker 图片需要 SSH 访问,因此使用 --ssh flag

ssh-agent插件,但是只有在构建容器后才能使用,也就是说docker层缓存不能使用.我也可以使用脚本化管道,但它会强制我的整个管道编写脚本。

我还尝试在 docker 中使用 --secret 标志传递凭据文件,但我找不到在 additionalBuildArgs 中使用凭据的方法:如果我调用 credentials(),我只是得到一个未转换的管道对象。如果这有效,它实际上可能是一个解决方案:

agent {
    dockerfile {
        additionalBuildArgs('--secret id=secret,src=' + credentials('credential'))
    }
}

我还考虑过将代理定义移出声明性管道对象之外,但后来在 pipeline 中找不到使用该代理的方法。

有没有办法使它与声明性管道一起工作,或者至少保持大部分声明性?

在发布此答案时,无法使用声明性管道来完成。声明式代理声明的转换和执行不够灵活,无法让这种事情发生。然而,可能的是创建一个管道库函数来在 sshagent 块中调用 docker.build。当然,这不会像使用声明代理那样干净。

可以在此处查看 Docker 集成的源代码:

https://github.com/jenkinsci/docker-workflow-plugin/blob/master/src/main/resources/org/jenkinsci/plugins/docker/workflow/Docker.groovy