【问题标题】:How to distinguish between deployment environments in Jenkins' pipeline script如何区分 Jenkins 的流水线脚本中的部署环境
【发布时间】:2018-12-10 16:46:26
【问题描述】:

我使用 Jenkins 将微服务部署到不同的环境(Dev1、dev2、QA ... Prod)

我对每个环境都有一个几乎相同的管道脚本,环境名称嵌入在作业名称中,因此我们可以这样做来创建特定于环境的代码和变量,从而将更多代码重构为公共库

    if (env.JOB_BASE_NAME.startsWith('dev1')) {
        env.ACR_TAG='dev1'
        // other settings... 
    }
    else if (env.JOB_BASE_NAME.startsWith('dev2')) {
        env.ACR_TAG='dev2'
    }
    else if (env.JOB_BASE_NAME.startsWith('qa1')) {
        env.ACR_TAG='qa1'
    } 

有没有更好的方法来实现这一点,而不在作业名称中嵌入环境名称?我不能使用$env.BRANCH_NAME 方法

这是我的设置的样子:

DEV1(视图)

  • dev1_microserviceA(作业/管道)
  • dev1_microserviceB
  • ...
  • dev1_microserviceX\

DEV2

  • dev1_microserviceA
  • dev1_microserviceB
  • ...
  • dev1_microserviceX ...

【问题讨论】:

    标签: jenkins


    【解决方案1】:
    • 如果每个环境有一台机器,您可以使用它们的主机名命名您的节点,并使用NODE_NAMEnode 块中获取它们的名称。
    • 如果每个环境有多台机器,您可以将ACR_TAG 设置为自定义环境变量,并在node 块内使用它(管理 Jenkins -> 管理节点 -> 配置(在每个节点上)-> 节点属性 -> 勾选环境变量)。
    • 如果您动态管理节点,最好在共享库中维护一个函数以确定您的位置。

    【讨论】:

    • 我想如果我在同一个节点上构建多个环境,那将无法正常工作,对吧?
    • 哦,我没有想到 :) 这一切背后的想法基本上是放置环境变量,因此对于构建在同一节点上的多个环境,您可以在 Dockerfile 中插入环境变量,例如.或者,如果您的环境只是同一台机器上的文件夹,您可以在每个文件夹中放置一个文件,告诉您的管道这是什么环境,依此类推。
    【解决方案2】:

    您可以只使用parameters 来定义要部署到哪个环境。我正在为您的用例使用选择参数。我只是将 param.TARGET_ENV 值提供给全局库,然后调用 Ansible。

    【讨论】:

    • 请原谅这个新手问题-当作业有参数时,我可以选择带参数构建,但运行时需要输入婴儿车。这可以以某种方式自动化吗?
    • 您希望如何实现自动化?您想从另一个作业触发该作业吗?
    • 我的意思是,当我为作业运行构建时,我不想输入参数。我不希望这部分(输入环境名称)是手动步骤......有意义吗?是的,我也想连锁工作
    猜你喜欢
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 2021-03-07
    • 2016-08-21
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多