想用詹金斯参数参数化ansible playbook中的值

want to parametrize the value in ansible playbook with jenkins parameters

我正在尝试删除一个多月前的服务器日志文件。我可以使用这组 Ansible 任务:

- name: Remove JBOSS Log Files 
  find: 
    path: /u01/jboss/server 
    patterns: "server.log.*" 
    age: "30d" 
  register: deleted
  tags: serverlog

- name: Ansible remove File 
  file: 
    path: "{{ item.path }}" 
    state: absent 
  with_items: "{{ deleted.files }}"
  tags: serverlog

因为我想允许控制这个年龄,下面的 days 变量必须作为来自 jenkins 参数部分的用户输入输入。它是一个字符串参数,我给它一个默认值 20d 这样可以保留 20 天的日志文件,其余的可以删除。

- name: Remove JBOSS Log Files 
  find: 
    path: /u01/jboss/server 
    patterns: "server.log.*" 
    age: "{{ days }}" 
  register: deleted
  tags: serverlog

- name: Ansible remove File 
  file: 
    path: "{{ item.path }}" 
    state: absent 
  with_items: "{{ deleted.files }}"
  tags: serverlog

在jenkins的执行命令中我已经通过了命令

ansible-playbook main.yml --tags serverlog

这是从服务器中删除完整的日志。 如何参数化方便用户保留20天的日志文件并删除旧的日志文件?

您可以在管道中传递天数参数,并通过给出命令 运行 剧本 ansible-playbook --extra-vars '{"days":"${params.days}"}' main.yml

我正在分享一个示例管道作业,它将在 ansible 剧本中使用 jenkins 参数。

管道作业:

pipeline {
agent any

stages {
    stage ('Git Pull') {
        steps {
            git changelog: false, poll: false, url: '/var/lib/jenkins/ansible-workspace'
        }
    }
    stage ('Run PLaybook') {
        steps {
            
            sh """ansible-playbook --extra-vars '{"name":"${params.first_name}"}' deploy.yml"""
        }
    }
  }
}

Ansible 剧本: (deploy.yml)

---
- hosts: localhost
  connection: local
  vars:
    - firstname: "John"
  roles:
    - { role: helloworld }

我在 github

中添加了示例 ansible 剧本角色

Jenkins 管道配置

输出: