我正在使用Jenkins声明性管道,并希望根据构建状态执行一些后期构建操作.
更准确地说,我想在构建状态发生变化时发送电子邮件(从成功到失败,或成功到不稳定或成功失败).
这是我的管道:
pipeline {
agent none
stages {
stage('test') {
agent any
steps {
sh './tests.sh'
}
}
}
post {
changed {
// Send different emails depending on build status
// Success -> anything else
// Anything else -> Success
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
我设置了两个 DAG,我们称第一个为 Orchestrator,第二个为 Worker。Orchestrator 的工作是从 API 检索列表,并针对此列表中的每个元素,使用一些参数触发工作 DAG。
我将两个工作流程分开的原因是我希望能够仅重播失败的“工作人员”工作流程(如果一个失败,我不想重播所有工作人员实例)。
我能够使事情正常进行,但现在我发现监控有多么困难,因为我的 task_id 对所有人来说都是相同的,所以我决定根据“协调器”工作流程从 API 检索的值来使用动态 task_id。
但是,我无法从运算符外部的 dag_run 对象检索值。基本上,我希望这个能够工作:
with models.DAG('specific_workflow', schedule_interval=None, default_args=default_dag_args) as dag:
name = context['dag_run'].name
hello_world = BashOperator(task_id='hello_{}'.format(name), bash_command="echo Hello {{ dag_run.conf.name }}", dag=dag)
bye = BashOperator(task_id='bye_{}'.format(name), bash_command="echo Goodbye {{ dag_run.conf.name }}", dag=dag)
hello_world >> bye
Run Code Online (Sandbox Code Playgroud)
但我无法定义这个“上下文”对象。但是,我可以从操作符(例如 PythonOperator 和 BashOperator)访问它。
是否可以在操作符之外检索 dag_run 对象?