如何做一个循环来调用一系列处理程序任务?

20jt8wwn  于 2022-09-20  发布在  Jenkins
关注(0)|答案(1)|浏览(155)

我对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升级后,我都想执行一系列处理程序任务。

处理程序是存储在处理程序文件夹中的文件中的一系列任务,用于重新启动服务并检查一切是否已备份并正常运行(以及其他任务)。问题在于,每次迭代升级完成后,处理程序任务都不会被调用和执行。我正在寻求关于如何才能实现这一点的建议,提前谢谢。

wdebmtf2

wdebmtf21#

问:“我想执行一系列处理程序任务。”

答:使用关键字LISTEN可以选择更多任务。例如,给定处理程序

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

备注:

  • 循环安装新版本的用例说不通。这里的实演的唯一目的是演示处理程序的功能。
  • 如果不想等到剧本结束,请刷新处理程序。

相关问题