community.general.jenkins_plugin module – Add or remove Jenkins plugin
Note
This module is part of the community.general collection (version 10.7.5).
You might already have this collection installed if you are using the ansible package.
It is not included in ansible-core.
To check whether it is installed, run ansible-galaxy collection list.
To install it, use: ansible-galaxy collection install community.general.
To use it in a playbook, specify: community.general.jenkins_plugin.
Synopsis
- Ansible module which helps to manage Jenkins plugins. 
Parameters
| Parameter | Comments | 
|---|---|
| The attributes the resulting filesystem object should have. To get supported flags look at the man page for  This string should contain the attributes in the same order as the one displayed by  The  | |
| PEM formatted certificate chain file to be used for SSL client authentication. This file can also include the key as well, and if the key is included,  | |
| PEM formatted file that contains your private key to be used for SSL client authentication. If  | |
| If  Choices: 
 | |
| Credentials specified with  Choices: 
 | |
| GID or name of the Jenkins group on the OS. Default:  | |
| Header to identify as, generally appears in web server logs. Default:  | |
| Home directory of the Jenkins user. Default:  | |
| Path inside the  Default:  | |
| File mode applied on versioned plugins. Default:  | |
| Plugin name. | |
| UID or name of the Jenkins user on the OS. Default:  | |
| The level part of the SELinux filesystem object context. This is the MLS/MCS attribute, sometimes known as the  When set to  | |
| The role part of the SELinux filesystem object context. When set to  | |
| The type part of the SELinux filesystem object context. When set to  | |
| The user part of the SELinux filesystem object context. By default it uses the  When set to  | |
| Desired plugin state. If set to  Choices: 
 | |
| Server connection timeout in secs. Default:  | |
| Influence when to use atomic operation to prevent data corruption or inconsistent reads from the target filesystem object. By default this module uses atomic operations to prevent data corruption or inconsistent reads from the target filesystem objects, but sometimes systems are configured or just broken in ways that prevent this. One example is docker mounted filesystem objects, which cannot be updated atomically from inside the container and can only be written in an unsafe manner. This option allows Ansible to fall back to unsafe methods of updating filesystem objects when atomic operations fail (however, it doesn’t force Ansible to perform unsafe writes). IMPORTANT! Unsafe writes are subject to race conditions and can lead to data corruption. Choices: 
 | |
| A list of URL segment(s) to retrieve the update center JSON file from. Default:  | |
| Number of seconds after which a new copy of the  Set it to  Default:  | |
| A list of base URL(s) to retrieve  This can be a list since community.general 3.3.0. Default:  | |
| URL of the Jenkins server. Default:  | |
| The password for use in HTTP basic authentication. If the  | |
| The username for use in HTTP basic authentication. This parameter can be used without  | |
| Use GSSAPI to perform the authentication, typically this is for Kerberos or Kerberos through Negotiate authentication. Requires the Python library gssapi to be installed. Credentials for GSSAPI can be specified with  NTLM authentication is not supported even if the GSSAPI mech for NTLM has been installed. Choices: 
 | |
| If  Choices: 
 | |
| If  This should only be used on personally controlled sites using self-signed certificates. Choices: 
 | |
| Plugin version number. If this option is specified, all plugin dependencies must be installed manually. It might take longer to verify that the correct version is installed. This is especially true if a specific version number is specified. Quote the version to prevent the value to be interpreted as float. For example if  | |
| Path inside the  Default:  | |
| Defines whether to install plugin dependencies. This option takes effect only if the  Choices: 
 | 
Attributes
| Attribute | Support | Description | 
|---|---|---|
| Support: full | Can run in  | |
| Support: none | Will return details on what has changed (or possibly needs changing in  | 
Notes
Note
- Plugin installation should be run under root or the same user which owns the plugin files on the disk. Only if the plugin is not installed yet and no version is specified, the API installation is performed which requires only the Web UI credentials. 
- It is necessary to notify the handler or call the ansible.builtin.service module to restart the Jenkins service after a new plugin was installed. 
- Pinning works only if the plugin is installed and Jenkins service was successfully restarted after the plugin installation. 
- It is not possible to run the module remotely by changing the - urlparameter to point to the Jenkins server. The module must be used on the host where Jenkins runs as it needs direct access to the plugin files.
Examples
- name: Install plugin
  community.general.jenkins_plugin:
    name: build-pipeline-plugin
- name: Install plugin without its dependencies
  community.general.jenkins_plugin:
    name: build-pipeline-plugin
    with_dependencies: false
- name: Make sure the plugin is always up-to-date
  community.general.jenkins_plugin:
    name: token-macro
    state: latest
- name: Install specific version of the plugin
  community.general.jenkins_plugin:
    name: token-macro
    version: "1.15"
- name: Pin the plugin
  community.general.jenkins_plugin:
    name: token-macro
    state: pinned
- name: Unpin the plugin
  community.general.jenkins_plugin:
    name: token-macro
    state: unpinned
- name: Enable the plugin
  community.general.jenkins_plugin:
    name: token-macro
    state: enabled
- name: Disable the plugin
  community.general.jenkins_plugin:
    name: token-macro
    state: disabled
- name: Uninstall plugin
  community.general.jenkins_plugin:
    name: build-pipeline-plugin
    state: absent
#
# Example of how to authenticate
#
- name: Install plugin
  community.general.jenkins_plugin:
    name: build-pipeline-plugin
    url_username: admin
    url_password: p4ssw0rd
    url: http://localhost:8888
#
# Example of how to authenticate with serverless deployment
#
- name: Update plugins on ECS Fargate Jenkins instance
  community.general.jenkins_plugin:
    # plugin name and version
    name: ws-cleanup
    version: '0.45'
    # Jenkins home path mounted on ec2-helper VM (example)
    jenkins_home: "/mnt/{{ jenkins_instance }}"
    # matching the UID/GID to one in official Jenkins image
    owner: 1000
    group: 1000
    # Jenkins instance URL and admin credentials
    url: "https://{{ jenkins_instance }}.com/"
    url_username: admin
    url_password: p4ssw0rd
  # make module work from EC2 which has local access
  # to EFS mount as well as Jenkins URL
  delegate_to: ec2-helper
  vars:
    jenkins_instance: foobar
#
# Example of a Play which handles Jenkins restarts during the state changes
#
- name: Jenkins Master play
  hosts: jenkins-master
  vars:
    my_jenkins_plugins:
      token-macro:
        enabled: true
      build-pipeline-plugin:
        version: "1.4.9"
        pinned: false
        enabled: true
  tasks:
    - name: Install plugins without a specific version
      community.general.jenkins_plugin:
        name: "{{ item.key }}"
      register: my_jenkins_plugin_unversioned
      when: >
        'version' not in item.value
      with_dict: "{{ my_jenkins_plugins }}"
    - name: Install plugins with a specific version
      community.general.jenkins_plugin:
        name: "{{ item.key }}"
        version: "{{ item.value['version'] }}"
      register: my_jenkins_plugin_versioned
      when: >
        'version' in item.value
      with_dict: "{{ my_jenkins_plugins }}"
    - name: Initiate the fact
      ansible.builtin.set_fact:
        jenkins_restart_required: false
    - name: Check if restart is required by any of the versioned plugins
      ansible.builtin.set_fact:
        jenkins_restart_required: true
      when: item.changed
      with_items: "{{ my_jenkins_plugin_versioned.results }}"
    - name: Check if restart is required by any of the unversioned plugins
      ansible.builtin.set_fact:
        jenkins_restart_required: true
      when: item.changed
      with_items: "{{ my_jenkins_plugin_unversioned.results }}"
    - name: Restart Jenkins if required
      ansible.builtin.service:
        name: jenkins
        state: restarted
      when: jenkins_restart_required
    - name: Wait for Jenkins to start up
      ansible.builtin.uri:
        url: http://localhost:8080
        status_code: 200
        timeout: 5
      register: jenkins_service_status
      # Keep trying for 5 mins in 5 sec intervals
      retries: 60
      delay: 5
      until: >
        'status' in jenkins_service_status and
        jenkins_service_status['status'] == 200
      when: jenkins_restart_required
    - name: Reset the fact
      ansible.builtin.set_fact:
        jenkins_restart_required: false
      when: jenkins_restart_required
    - name: Plugin pinning
      community.general.jenkins_plugin:
        name: "{{ item.key }}"
        state: "{{ 'pinned' if item.value['pinned'] else 'unpinned'}}"
      when: >
        'pinned' in item.value
      with_dict: "{{ my_jenkins_plugins }}"
    - name: Plugin enabling
      community.general.jenkins_plugin:
        name: "{{ item.key }}"
        state: "{{ 'enabled' if item.value['enabled'] else 'disabled'}}"
      when: >
        'enabled' in item.value
      with_dict: "{{ my_jenkins_plugins }}"
Return Values
Common return values are documented here, the following are the fields unique to this module:
| Key | Description | 
|---|---|
| Plugin name. Returned: success Sample:  | |
| State of the target, after execution. Returned: success Sample:  | 
