Jenkinsfile和分支机构的不同策略 [英] Jenkinsfile and different strategies for branches

查看:430
本文介绍了Jenkinsfile和分支机构的不同策略的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Jenkins中的所有内部版本中使用Jenkins文件,但是我遇到了以下问题. 我们基本上有3种构建:

I'm trying to use Jenkins file for all our builds in Jenkins, and I have following problem. We basically have 3 kind of builds:

  • 拉动请求构建-代码审查后,如果构建成功,它将合并到主服务器中
  • 手动请求构建-与上述功能相同,但可以由用户手动触发(例如,如果我们进行一些不稳定的测试)
  • 初始的持续交付管道-这将构建代码,部署到存储库,从目标服务器上的存储库安装工件并在那里启动应用程序

我应如何将以上所有构建都包含在单个Jenkinsfile中. 现在,我唯一的想法就是制造一个巨人,如果能够检查它是哪个分支并执行步骤.

How should I contain all of the above builds into a single Jenkinsfile. Right now the only idea I have is to make a giant if that will check which branch it is and will do the steps.

所以我有两个问题:

1.是在Jenkinsfile中执行此操作的适当方法吗?

  1. 如何获取多分支作业类型中当前正在执行的分支的名称?

作为参考,这是我当前的Jenkinsfile:

For reference, here's my current Jenkinsfile:

def servers = ['server1', 'server2']

def version = "1.0.0-${env.BUILD_ID}"

stage 'Build, UT, IT'
node {
    checkout scm
    env.PATH = "${tool 'Maven'}/bin:${env.PATH}"
    withEnv(["PATH+MAVEN=${tool 'Maven'}/bin"]) {
        sh "mvn -e org.codehaus.mojo:versions-maven-plugin:2.1:set -DnewVersion=$version -DgenerateBackupPoms=false"
        sh 'mvn -e clean deploy'
        sh 'mvn -e scm:tag'
    }
}


def nodes = [:]
for (int i = 0; i < servers.size(); i++) {
    def server = servers.get(i)
    nodes["$server"] = {
        stage "Deploy to INT ($server)"
        node {
            sshagent(['SOME-ID']) {
                sh """
                ssh ${server}.example.com <<END
                hostname
                /apps/stop.sh
                yum  -y update-to my-app.noarch
                /apps/start.sh
                END""".stripIndent()
            }
        }
    }
}

parallel nodes

删除了基于意见的问题

推荐答案

如果要根据分支跳过多个阶段,则可以为多个阶段添加If语句,如下所示:

You can add If statement for multiple stages if you want to skip multiple stages according to the branch as in:

if(env.BRANCH_NAME == 'master'){
     stage("Upload"){
        // Artifact repository upload steps here
        }
     stage("Deploy"){
        // Deploy steps here
       }
     }

或者,您可以将其添加到各个阶段,如下所示:

or, you can add it to individual stage as in:

stage("Deploy"){
  if(env.BRANCH_NAME == 'master'){
   // Deploy steps here
  }
}

这篇关于Jenkinsfile和分支机构的不同策略的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆