我试图使用Jenkins文件在Jenkins我们所有的构建,我有以下问题。我们基本上有3种构建:
- 拉式请求构建版本-在代码评审后,如果构建版本有效,则将其合并到主版本
- 手动拉取请求构建-与上述相同的构建,但可由用户手动触发(例如,如果我们有一些不稳定的测试)
- 一个初始的连续交付管道-这将构建代码,部署到存储库,从存储库安装工件到目标服务器上,并在那里启动应用程序
我应该如何包含所有上述构建到一个单独的Jenkinsfile。现在我唯一的想法是做一个巨人,如果这将检查它是哪个分支,并将做的步骤。
所以我有两个问题:
1.在Jenkins档案里这样做合适吗?
1.如何获取多分支作业类型中当前执行分支的名称?
以下是我当前的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
编辑:删除基于意见的问题
7条答案
按热度按时间7kjnsjlb1#
如果要根据分支跳过多个阶段,可以为多个阶段添加If语句,如下所示:
或者,您可以将其添加到单个阶段,如下所示:
r1wp621o2#
使用this post时,这对我很有效:
s71maibg3#
1)我不知道这是否合适,但如果它能解决你的问题,我认为这是足够合适的。
2)为了知道分支的名称,可以使用BRANCH_NAME变量,它的名称取自分支名称。
答案如下:Jenkins Multibranch pipeline: What is the branch name variable?
busg9geu4#
我们遵循fabric8用于构建的模型,根据需要对其进行调整,其中
Jenkinsfile
用于定义分支和部署处理逻辑,release.groovy
文件用于构建逻辑。下面是从主分支持续部署到DEV的管道的
Jenkinsfile
的外观:注:您可以找到我们的全局管道库here的代码。
ijnw1ujt5#
不知道这是不是你想要的...我更喜欢,因为它看起来更有条理。
Jenkins菲尔
我的分支.Groovy
bjg7j2ky6#
对于问题2,您可以
sh 'git分支〉GIT_BRANCH'定义gitBranch =读取文件'GIT_BRANCH'
既然你要从git退房
vltsax257#
在我的场景中,只有当分支是master(webhook Gitlab)时,我才需要运行一个阶段Deploy Artifactory,否则我无法执行部署。
下面是我的jenkinsfile的代码:
stages {
}