有条件地在不同的从属/工作空间上运行Jenkins stage,否则使用现有的从属/工作空间

ecfsfe2w  于 2023-03-22  发布在  Jenkins
关注(0)|答案(2)|浏览(148)

我尝试有条件地在另一个slave上运行我的管道的一个阶段。但是这不能正常工作。主管道以标签ecs-slave运行(我使用的是容器slave)。
我希望能够保存,如果X运行这个阶段在不同的奴隶与标签X,否则继续与当前的奴隶通常。
相反,Jenkins使用标签ecs-slave提供另一个新的slave,而不是使用当前的slave。

pipeline {
    agent {
        node {
            label 'ecs-slaves'
        }
    }

    stages {
        stage('ssss') {
            // Regarless of whether the label is different or the same (ecs-slaves) jenkins provisions a _new_ slave
            agent {
                node {
                    label "${(var == 'blahblah') ? 'ecs-slaves' : 'some-others-slave'}"
                }
            }

            environment{...}
            steps{
              ....
            }
        }
qvsjd97n

qvsjd97n1#

if/else封装在变量块({})中。您只需要在括号内添加var即可。

node {
  label "(${var} == 'blahblah') ? 'ecs-slaves' : 'some-others-slave'"
}

还有另一个问题。无论阶段ssss中有什么,即使名称相同,您的管道布局方式都会生成一个新的slave。您希望使用when块来避免这种情况。请查看this example,我将在下面提供。

pipeline {
    agent {
        node {
            label 'ecs-slaves'
        }
    }

    parameters {
        choice(
            choices: ["${env.NODE_NAME}", 'other-slaves'],
            description: '',
            name: 'RUN_ON_SLAVE'
        )
    }

    stages {
        // Trigger this only when running on other slaves and set a new node
        stage('ssss') {
            when {
                expression { params.RUN_ON_SLAVE == 'other-slaves' }
            }
            // Regardless of whether the label is different or the same (ecs-slaves) jenkins provisions a _new_ slave
            agent {
                node {
                    label 'other-slaves'
                }
            }

            environment{...}
            steps{
              ....
            }
        }
        // Trigger this when 'ssss' is not triggered and don't run on a new node
        stage('ssst') {
            when {
                expression { params.RUN_ON_SLAVE == "${env.NODE_NAME}" }
            }

            environment{...}
            steps{
                ....
            }
        }
    }
}
olhwl3o2

olhwl3o22#

当前不支持单个ECS容器代理上的多个构建执行器。由于您已经将ecs-slaves定义为管道顶层的代理,因此在那里生成的容器将保持锁定,直到管道结束。因此,阶段ssss将无限期排队(理论上)由于同一个容器上缺少另一个执行器,否则它将产生另一个具有与您的情况相同标签的容器。

相关问题