我对ansible非常陌生,我一直致力于编写ansible角色来自动化Jenkins的增量升级过程。此过程的一部分涉及创建一个循环,该循环在实例上安装的Jenkins当前版本比目标版本更早的情况下执行。
# Install the incremental upgraded version of Jenkins
- name: upgrade and restart jenkins on each iterative upgrade
yum:
name: "jenkins-{{ item.jenkins_target_version }}"
state: present
when: (jenkins_current_version | float) < "{{ item.jenkins_target_version_filtered }}"
loop: "{{ packages }}"
notify: restart jenkins
when: (jenkins_current_version | float) < jenkins_target_filtered循环应该循环通过包列表,如下所示
packages:
- { jenkins_target_version: 2.176-1.1, jenkins_target_version_filtered: 2.176 }
- { jenkins_target_version: 2.190-1.1, jenkins_target_version_filtered: 2.190 }
- { jenkins_target_version: 2.204-1.1, jenkins_target_version_filtered: 2.204 }
- { jenkins_target_version: 2.222-1.1, jenkins_target_version_filtered: 2.222 }
- { jenkins_target_version: 2.235-1.1, jenkins_target_version_filtered: 2.235 }
- { jenkins_target_version: 2.249-1.1, jenkins_target_version_filtered: 2.249 }
- { jenkins_target_version: 2.263-1.1, jenkins_target_version_filtered: 2.263 }
- { jenkins_target_version: 2.277-1.1, jenkins_target_version_filtered: 2.277 }
- { jenkins_target_version: 2.289-1.1, jenkins_target_version_filtered: 2.289 }
- { jenkins_target_version: 2.303-1.1, jenkins_target_version_filtered: 2.303 }
- { jenkins_target_version: 2.319-1.1, jenkins_target_version_filtered: 2.319 }
- { jenkins_target_version: 2.332-1.1, jenkins_target_version_filtered: 2.332 }
- { jenkins_target_version: 2.343-1.1, jenkins_target_version_filtered: 2.343 }
- { jenkins_target_version: 2.346-1.1, jenkins_target_version_filtered: 2.346 }并且,只有在目标系统上安装版本时,它才是比当前安装的版本新的迭代。循环似乎工作正常,并在目标实例上安装jenkins的升级,问题是,每当jenkins升级时,我都想执行一系列处理程序任务。
处理程序是存储在处理程序文件夹中的一系列任务,这些任务重新启动服务并检查事物是否备份和运行是否正常(除其他事项外)。问题是,每次迭代升级完成后,都不会调用和执行处理程序任务。我正在寻求建议,我如何才能做到这一点,谢谢提前。
发布于 2022-09-15 18:36:48
问:“我想执行一系列处理程序任务。”。
答:使用关键字选择更多的任务。例如,给定处理程序
shell> cat handlers/restart_jenkins.yml
- debug:
msg: Restart service
listen: restart jenkins
- debug:
msg: Check that things are back up and running ok
listen: restart jenkins
- debug:
msg: |-
Do whatever you want next
{{ out.results|json_query('[].stdout') }}
listen: restart jenkins剧本
- hosts: test_11
gather_facts: false
vars:
packages:
- {target: 2.176-1.1, current: 2.176}
- {target: 2.190-1.1, current: 2.190}
- {target: 2.204-1.1, current: 2.205}
tasks:
- command: "echo install {{ item.target }}"
register: out
notify: restart jenkins
loop: "{{ packages }}"
when: item.current is version(item.target, "<")
- meta: flush_handlers
- debug:
msg: Continue ...
handlers:
- import_tasks: handlers/restart_jenkins.yml给出
PLAY [test_11] *******************************************************************************
TASK [command] *******************************************************************************
changed: [test_11] => (item={'target': '2.176-1.1', 'current': 2.176})
changed: [test_11] => (item={'target': '2.190-1.1', 'current': 2.19})
skipping: [test_11] => (item={'target': '2.204-1.1', 'current': 2.205})
TASK [meta] **********************************************************************************
RUNNING HANDLER [debug] **********************************************************************
ok: [test_11] =>
msg: Restart service
RUNNING HANDLER [debug] **********************************************************************
ok: [test_11] =>
msg: Check that things are back up and running ok
RUNNING HANDLER [debug] **********************************************************************
ok: [test_11] =>
msg: |-
Do whatever you want next
['install 2.176-1.1', 'install 2.190-1.1']
TASK [debug] *********************************************************************************
ok: [test_11] =>
msg: Continue ...
PLAY RECAP ***********************************************************************************
test_11 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0备注:
https://stackoverflow.com/questions/73731755
复制相似问题