我只想从分支名称启用部署(从 hotfix 和 master 开始)。我怎样才能做到这一点?

I want to enable deployment only from the branch names(starting with hotfix and master). How can I do that?

我正在编写 Jenkinsfile 并尝试从分支名称启用部署(从 masterhotfix 开始)。我怎样才能做到这一点?下面是我的 groovy 代码。如果我只指定一个分支,这将起作用。我如何为多个分支执行此操作?

// Create and Deploy to STAGE Environment
            stage ('Create and Deploy to k8s stage Environment') {
                when {
                    allOf {
                        expression {
                            branch_name.startsWith('master')
                        }
                    }
                }
                options {
                    skipDefaultCheckout()
                }
                steps {
                    withCredentials([string(credentialsId: "$env.K8S_STAGE_NS_TOKEN" , variable: 'STAGE_TOKEN')]) {
                        kubernetesDeploy(hcEnv: 'stage', hcToken: "${STAGE_TOKEN}")
                    }
                }
            }

如果我指定 2 个分支名称,下面的代码将不起作用,但上面的代码可以。

// Create and Deploy to PROD Environment
            stage ('Create and Deploy to k8s production Environment') {
                when {
                    allOf {
                        expression {
                            branch_name.startsWith('hotfix')
                            branch_name.startsWith('master')
                        }
                    }
                }
                options {
                    skipDefaultCheckout()
                }
                steps {
                    withCredentials([string(credentialsId: "$env.K8S_PROD_NS_TOKEN" , variable: 'PROD_TOKEN')]) {
                        kubernetesDeploy(hcEnv: 'prod', hcToken: "${PROD_TOKEN}")
                    }
                }
            }

你可以用这个

expression { return (env.GIT_BRANCH.startsWith('origin/master') || env.GIT_BRANCH.startsWith('hotfix'))}

你也可以试试这个

 expression { return (env.BRANCH_NAME.startsWith('origin/master') || env.GIT_BRANCH.startsWith('origin/hotfix'))}
  1. 我不确定你的分支名称是否以 origin 开头或没有 origin 所以根据你的情况使用它。我会建议而不是 startsWith 使用 contains.

  2. 此外,我猜你需要 anyOf 而不是 allOf,因为你想要 运行 阶段,如果它是主分支或修补程序分支,并且都在同一时间不可能是真的所以