声明式 Jenkins 管道,每晚部署主分支
Declarative Jenkins pipeline with Nightly deploy for master branch
我想将一些工作转换为新的 Jenkins 2.0 声明式管道。目前他们是 3 个不同的工作:
- CI --> PollSCM 每 5 分钟一次(仅 master),构建和 运行 测试。
- 每晚 --> 运行 每晚(在每晚服务器上构建、测试、集成测试和部署)
- Sprintly --> 这是一个参数化作业,每个星期四 运行 使用手动创建的标签。 (在 sprintly 服务器上构建、测试、集成测试和部署)
为此,我在 spring 中有一个使用 maven 的小项目,这将是我入门的最佳示例(构建简单、容易且快速)。
目前我已经有一个用于 CI 构建的多分支管道,但我想将 Nightly 和 Sprintly 构建集成到这项工作中。
- 每晚:运行 晚上在要部署的 master 分支上执行 Cron 作业
在夜间服务器中。
- Sprintly:构建在我在 master 分支中生成的 Sprintly_tag 上,以部署在 Sprintly Server 中。
目前我有这个 JenkinsFile
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 点时 运行 每个分支(但仍然 运行 连接所有分支) .
有什么想法或提示吗?不需要执行部署的代码我只想知道如何 filter/split 这个分支在同一个 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 作业中配置)
- 管道(称为 sprintly)但参数化为 运行 带有特定标记并且仅使用主分支
管道应保持简单,如:
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"'
}
}
如果您有任何问题,请告诉我,我很乐意提供帮助:)
我想将一些工作转换为新的 Jenkins 2.0 声明式管道。目前他们是 3 个不同的工作:
- CI --> PollSCM 每 5 分钟一次(仅 master),构建和 运行 测试。
- 每晚 --> 运行 每晚(在每晚服务器上构建、测试、集成测试和部署)
- Sprintly --> 这是一个参数化作业,每个星期四 运行 使用手动创建的标签。 (在 sprintly 服务器上构建、测试、集成测试和部署)
为此,我在 spring 中有一个使用 maven 的小项目,这将是我入门的最佳示例(构建简单、容易且快速)。
目前我已经有一个用于 CI 构建的多分支管道,但我想将 Nightly 和 Sprintly 构建集成到这项工作中。
- 每晚:运行 晚上在要部署的 master 分支上执行 Cron 作业 在夜间服务器中。
- Sprintly:构建在我在 master 分支中生成的 Sprintly_tag 上,以部署在 Sprintly Server 中。
目前我有这个 JenkinsFile
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 点时 运行 每个分支(但仍然 运行 连接所有分支) .
有什么想法或提示吗?不需要执行部署的代码我只想知道如何 filter/split 这个分支在同一个 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 作业中配置)
- 管道(称为 sprintly)但参数化为 运行 带有特定标记并且仅使用主分支
管道应保持简单,如:
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"'
}
}
如果您有任何问题,请告诉我,我很乐意提供帮助:)