在阶段结束后或阶段开始前立即触发 Jenkins 声明性管道中的操作?
Trigger an action within Jenkins declarative pipeline right after a stage ends or just before a stage begins?
我有以下 Jenkinsfile
:
pipeline {
agent any
environment { }
stages {
stage('stageA') {
steps {
... Do something with arg1, arg2 or arg3
}
}
stage('stageB') {
steps {
... Do something with arg1, arg2 or arg3
}
}
...
}
}
是否可以在任何地方指定要执行的通用 "pre-stage" 或 "post-stage" 一组操作?一个用例是在阶段结束时将日志记录信息发送到日志管理器,但最好不要在每个阶段结束时复制和粘贴这些调用。
据我所知,Jenkins 管道中没有通用的 post- 或预阶段挂钩。您可以在 post
section 中定义 post 个步骤,但每个阶段需要一个步骤。
但是,如果您不想重复自己,您有一些选择。
使用共享库
放置重复代码的地方shared library。这种方式允许您使用 Groovy.
声明自己的步骤
您需要另一个存储库来定义共享库,但除此之外,这是一种非常简单的方法,您可以在所有 Jenkins 管道中重用代码。
使用函数
如果您在 pipeline
之外声明一个函数,您可以从任何阶段调用它。这并没有真正记录下来,将来可能会被阻止。据我所知,它扰乱了主人和代理人之间的协调。但是,它有效:
pipeline {
agent any
stages {
stage ("First") {
steps {
writeFile file: "resultFirst.txt", text: "all good"
}
post {
always {
cleanup "first"
}
}
}
stage ("Second") {
steps {
writeFile file: "resultSecond.txt", text: "all good as well"
}
post {
always {
cleanup "second"
}
}
}
post {
always {
cleanup "global" // this is only triggered after all stages, not after every
}
}
}
}
void cleanup(String stage) {
echo "cleanup ${stage}"
archiveArtifacts artifacts: "result*"
}
我有以下 Jenkinsfile
:
pipeline {
agent any
environment { }
stages {
stage('stageA') {
steps {
... Do something with arg1, arg2 or arg3
}
}
stage('stageB') {
steps {
... Do something with arg1, arg2 or arg3
}
}
...
}
}
是否可以在任何地方指定要执行的通用 "pre-stage" 或 "post-stage" 一组操作?一个用例是在阶段结束时将日志记录信息发送到日志管理器,但最好不要在每个阶段结束时复制和粘贴这些调用。
据我所知,Jenkins 管道中没有通用的 post- 或预阶段挂钩。您可以在 post
section 中定义 post 个步骤,但每个阶段需要一个步骤。
但是,如果您不想重复自己,您有一些选择。
使用共享库
放置重复代码的地方shared library。这种方式允许您使用 Groovy.
声明自己的步骤您需要另一个存储库来定义共享库,但除此之外,这是一种非常简单的方法,您可以在所有 Jenkins 管道中重用代码。
使用函数
如果您在 pipeline
之外声明一个函数,您可以从任何阶段调用它。这并没有真正记录下来,将来可能会被阻止。据我所知,它扰乱了主人和代理人之间的协调。但是,它有效:
pipeline {
agent any
stages {
stage ("First") {
steps {
writeFile file: "resultFirst.txt", text: "all good"
}
post {
always {
cleanup "first"
}
}
}
stage ("Second") {
steps {
writeFile file: "resultSecond.txt", text: "all good as well"
}
post {
always {
cleanup "second"
}
}
}
post {
always {
cleanup "global" // this is only triggered after all stages, not after every
}
}
}
}
void cleanup(String stage) {
echo "cleanup ${stage}"
archiveArtifacts artifacts: "result*"
}