想要使用詹金斯参数参数化ansible剧本中的值

问题描述

我正在尝试删除超过一个月的服务器日志文件。我可以使用这套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

由于我希望控制该年龄,因此必须从jenkins参数部分输入以下days变量作为用户输入。这是一个字符串参数,我给它提供了认值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

在詹金斯执行命令中,我已经传递了命令

ansible-playbook main.yml --tags serverlog

这将从服务器中删除完整的日志。 为了方便用户,如何设置参数以保留20天的日志文件删除较旧的日志文件

解决方法

您可以在管道中传递days参数,并通过给出命令来运行剧本 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 }

我在https://github.com/intuit/karate/tree/master/karate-core#scriptall

中添加了示例ansible剧本角色

Jenkins管道配置

github

输出:

enter image description here