我想将一些作业转换为新的 Jenkins 2.0 声明式管道。目前他们是3个不同的工作:
- CI --每 5 分钟>一次 PollSCM(仅限主(,构建并运行测试。
- 简单来说 --> 每晚运行(构建、测试、集成测试和在夜间服务器上部署(
- 冲刺 --> 这是一个参数化作业,每周四使用手动创建的标签运行。(在Sprintly服务器上构建,测试,集成测试和部署(
为此,我在春季有一个带有maven的小项目,这将是我开始的最好例子(简单,容易和快速构建(。
目前,我已经有一个用于 CI 构建的多分支管道,但我想将夜间和冲刺构建集成到这项工作中。
- 每晚:在晚上对要部署的主分支运行 Cron 作业 在夜间服务器中。
- Sprintly:基于我在主分支中生成的Sprintly_tag构建,以部署在Sprintly Server中。
目前我有这个詹金斯文件
pipeline {
agent {
label 'master'
}
tools {
maven "Apache Maven 3.3.9"
jdk "Java JDK 1.8 U102"
}
triggers {
cron ('H(06-08) 01 * * *')
pollSCM('H/5 * * * *')
}
stages {
stage('Build') {
steps {
sh 'mvn -f de.foo.project.client/ clean package'
}
post {
always {
junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml'
archiveArtifacts allowEmptyArchive: true, artifacts: '**/target/*.war'
}
}
}
stage('Deploy') {
sh 'echo "Deploy only master"'
}
}
当某些内容被拉到 Git 时,它会运行每个分支,并在夜间 1 点左右运行(但仍运行所有分支(。
有什么想法或暗示吗?不需要执行部署的代码,我只想知道如何在同一个 JenkinsFile 中过滤/拆分此分支
非常感谢大家!
编辑: 我也可以使用,但它将在夜间运行所有分支(我可以仅为 Cron 作业制作此过滤器吗?
stage('DeployBranch') {
when { branch 'story/RTS-525-task/RTS-962'}
steps {
sh 'echo "helloDeploy in the branch"'
}
}
stage('DeployMaster') {
when { branch 'master'}
steps {
sh 'echo "helloDeploy in the master"'
}
}
四个月后,在阅读了我自己的问题后,我意识到我在尝试设置触发器和作业的方式上完全错误。 我们应该有3个不同的工作:
- 将在每个分支中运行 maven 构建的多分支管道(可以配置为每 n 分钟轮询一次 scm,或者由存储库中的 webhook 启动。 管道(
- 每晚调用(,将配置为在夜间触发(在作业配置中,而不是在管道中(,并将部署到夜间系统并仅使用主分支(也在 Jenkins 作业中配置(
- 管道(称为冲刺(,但参数化为使用特定标签运行并仅使用 master 分支
管道应保持简单,例如:
pipeline {
agent {
label 'master'
}
tools {
maven "Apache Maven 3.3.9"
jdk "Java JDK 1.8 U102"
}
stages {
stage('Build') {
steps {
sh 'mvn -f de.foo.project.client/ clean package'
}
post {
always {
junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml'
archiveArtifacts allowEmptyArchive: true, artifacts: '**/target/*.war'
}
}
}
stage('Deploy') {
when (env.JOB_NAME.endsWith('nightly')
sh 'echo "Deploy on nighlty"'
when (env.JOB_NAME.endsWith('sprintly')
sh 'echo "Deploy only sprintly"'
}
}
如果您有任何问题,请告诉我,我很乐意为您提供帮助:)