【问题标题】:Run multiple stages of Jenkins declarative pipe line in same docker slave在同一个 docker slave 中运行 Jenkins 声明性管道的多个阶段
【发布时间】:2020-07-20 10:42:27
【问题描述】:

目标

这里的目标是将脚本化的 jenkins 管道迁移到声明性的 .Scripted 管道在 kubernetes 管理的 docker slave 上运行,工作语法如下

 slave = 'dtr@tes.com/namespace/image:1.0'

dockerNode(image:slave)
{

   stage('1'){echo "1"}

   stage('2'){echo "2"} 

}

脚本化的管道运行完美。

疑虑

尝试使用 dockerNode 来声明管道,但在声明中,dockerNode 语法仅在阶段内的步骤之后才允许

例如:

pipeline{
  agent any 
  stages{
    stage('1and2'}{
      dockerNode(image:slave){

        echo "1"
        echo "2" 
    }
  }
 }
}

这引起了对一个阶段而不是多个阶段的俱乐部庞大步骤的关注。因此,我们希望您能帮助了解我们如何更好地对齐并始终在同一个容器中运行多个阶段。容器图像是由 kubernetes 管理(带有 docker 镜像的 kube pod)

【问题讨论】:

    标签: jenkins jenkins-plugins jenkins-declarative-pipeline


    【解决方案1】:

    要在所有步骤中使用一个容器,您需要在代理部分指定它

    pipeline{
      agent {
        label 'docker-agent-label'
      }
    }
    

    要像这样使用,您需要在“管理詹金斯”->“管理节点和 云'->'配置云'->'添加新云'或使用现有云。 如果你的jenkins主机集成了k8s,那一定是kubernetes。

    更新:

    【讨论】:

    • 谢谢。你能告诉我什么是标签,标签表示云条目或上面提到的图像名称吗?如果它是一个 kube 云条目,我会在哪里提及我希望使用的指定图像?
    • 看图。标签可让您呼叫任何代理而无需记住其名称。如果您不知道如何设置它,请尝试在管道中直接调用 docker image。阅读这篇关于在管道中使用 docker 的文章link
    • 我们不使用任何云,我们在 Jenkins 下使用 dockerNode 编写脚本 > 配置系统 > Docker 从站 > Docker 配置器 > 键入 Compose Container 以及以下详细信息 Remoting Image ,要使用的 Docker API ,选择 docker使用 swarm ,docker host URI 。那么我可以在这里翻译成声明性的(
    • Jenkins 的开发人员称它为云(无论您使用的是本地 docker env 还是真正的云,将您的 jenkins 更新到最新的 LTS 版本,您就会看到它)。在任何情况下,您都需要安装 docker 并将 jenkins 配置为在 docker 中运行代理/从属。
    • 再次,我想我们将在两个不同的方面进行,如果您看到 dockerNode 使用 Docker 配置器,那么在管理 Jenkins >cloud 下绝对不需要条目,该部分将为空。我也可以使用 dockerNode在舞台下声明性的阶段 >stages('')>steps >dockerNode(image:slave_images) 并且将完美地工作,但仅适用于特定阶段。这是特定于 dockerNode 的上下文和问题,在 Jenkins 页面中被标记为实验性.此外,在这种情况下,主节点上没有 docker 命令,而是在我们的案例 kubernetes 中获取协调器并运行
    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2021-08-02
    • 2017-10-21
    相关资源
    最近更新 更多