From 2143035b02a4315c69bbf9b838c4b12c3dfa91f1 Mon Sep 17 00:00:00 2001 From: transcaffeine Date: Tue, 4 Feb 2025 17:27:12 +0100 Subject: [PATCH] WIP: feat(jenkins): add role to deploy jenkins --- roles/jenkins/defaults/main/container.yml | 46 +++++++++++++++++++++++ roles/jenkins/defaults/main/main.yml | 12 ++++++ roles/jenkins/tasks/check.yml | 23 ++++++++++++ roles/jenkins/tasks/deploy-docker.yml | 14 +++++++ roles/jenkins/tasks/main.yml | 15 ++++++++ roles/jenkins/vars/main.yml | 8 ++++ 6 files changed, 118 insertions(+) create mode 100644 roles/jenkins/defaults/main/container.yml create mode 100644 roles/jenkins/defaults/main/main.yml create mode 100644 roles/jenkins/tasks/check.yml create mode 100644 roles/jenkins/tasks/deploy-docker.yml create mode 100644 roles/jenkins/tasks/main.yml create mode 100644 roles/jenkins/vars/main.yml diff --git a/roles/jenkins/defaults/main/container.yml b/roles/jenkins/defaults/main/container.yml new file mode 100644 index 0000000..6d5bd19 --- /dev/null +++ b/roles/jenkins/defaults/main/container.yml @@ -0,0 +1,46 @@ +--- +jenkins_container_name: "jenkins" +jenkins_container_image: >-2 + {{ + [ + jenkins_container_image_repository, + jenkins_container_image_tag + | default(jenkins_version + ( + ((jenkins_container_image_flavour is string) + and (jenkins_container_image_flavour | length > 0)) + | ternary( + '-' + jenkins_container_image_flavour | default('', true), + '' + ) + )) + ] | join(':') + }} +jenkins_container_image_registry: docker.io +jenkins_container_image_namespace: jenkins +jenkins_container_image_name: jenkins +jenkins_container_image_repository: >-2 + {{ + [ + jenkins_container_image_registry | default([], true), + jenkins_container_image_namespace | default([], true), + jenkins_container_image_name + ] | flatten | join('/') + }} +jenkins_container_image_source: "pull" +jenkins_container_image_force_source: >-2 + {{ jenkins_container_image_tag | default(true, true) }} +jenkins_container_image_tag: ~ +jenkins_container_image_flavour: "jdk17" + +jenkins_container_env: ~ +jenkins_container_ports: ~ +jenkins_container_state: >-2 + {{ (jenkins_state == 'present') | ternary('started', 'absent') }} +jenkins_container_networks: ~ +jenkins_container_etc_hosts: ~ +jenkins_container_base_volumes: + - "{{ jenkins_home_path }}:/var/jenkins_home" +jenkins_container_volumes: ~ +jenkins_container_all_volumes: >-2 + {{ jenkins_container_base_volumes | default([], true) + + jenkins_container_volumes | default([], true) }} diff --git a/roles/jenkins/defaults/main/main.yml b/roles/jenkins/defaults/main/main.yml new file mode 100644 index 0000000..6886d84 --- /dev/null +++ b/roles/jenkins/defaults/main/main.yml @@ -0,0 +1,12 @@ +--- +jenkins_user: "jenkins" +jenkins_versions: + lts: "2.479.3" + weekly: "2.496" +jenkins_version_channel: "lts" +jenkins_version: "{{ jenkins_versions[jenkins_version_channel] }}" + +jenkins_state: present +jenkins_deployment_method: docker + +jenkins_home_path: "/var/lib/jenkins" diff --git a/roles/jenkins/tasks/check.yml b/roles/jenkins/tasks/check.yml new file mode 100644 index 0000000..304bfb0 --- /dev/null +++ b/roles/jenkins/tasks/check.yml @@ -0,0 +1,23 @@ +--- +- name: Ensure 'jenkins_state' is valid + ansible.builtin.fail: + msg: >-2 + Unsupported jenkins_state '{{ jenkins_state }}'. + Supported values are: {{ jenkins_states | join(',') }} + when: jenkins_state not in jenkins_states + +- name: Ensure 'jenkins_deployment_method' is valid + ansible.builtin.fail: + msg: >-2 + Unsupported jenkins_deployment_method '{{ jenkins_deployment_method }}'. + Supported values are: {{ jenkins_deployment_methods | join(',') }} + when: jenkins_deployment_method not in jenkins_deployment_methods + +- name: Ensure 'jenkins_version_channel' is valid + ansible.builtin.fail: + msg: >-2 + Unsupported jenkins_version_channel '{{ jenkins_version_channel }}'. + Supported values are: {{ jenkins_version_channels | join(',') }} + when: jenkins_version_channel not in jenkins_version_channels + + diff --git a/roles/jenkins/tasks/deploy-docker.yml b/roles/jenkins/tasks/deploy-docker.yml new file mode 100644 index 0000000..99d7272 --- /dev/null +++ b/roles/jenkins/tasks/deploy-docker.yml @@ -0,0 +1,14 @@ +--- +- name: Ensure jenkins container image '{{ jenkins_container_image }}' is {{ jenkins_state }}' + community.general.docker_container_image: + name: "{{ jenkins_container_image }}" + state: "{{ jenkins_state }}" + source: "{{ jenkins_container_image_source }}" + force_source: "{{ jenkins_container_image_force_source }}" + +- name: Ensure jenkins container '{{ jenkins_container_name }}' is {{ jenkins_container_state }} + community.docker.docker_container: + name: "{{ jenkins_container_name }}" + image: "{{ jenkins_container_image }}" + // + state: "{{ jenkins_container_state }}" diff --git a/roles/jenkins/tasks/main.yml b/roles/jenkins/tasks/main.yml new file mode 100644 index 0000000..8c204c8 --- /dev/null +++ b/roles/jenkins/tasks/main.yml @@ -0,0 +1,15 @@ +--- +- name: Ensure role arguments are valid + ansible.builtin.include_tasks: + file: "check.yml" + +- name: Ensure jenkins user '{{ jenkins_user }}' is {{ jenkins_state }} + ansible.builtin.user: + name: "{{ jenkins_user }}" + state: "{{ jenkins_state }}" + system: true + register: jenkins_user_info + +- name: Ensure jenkins is deployed using {{ jenkins_deployment_method }} + ansible.builtin.include_tasks: + file: "deploy-{{ jenkins_deployment_method }}.yml" diff --git a/roles/jenkins/vars/main.yml b/roles/jenkins/vars/main.yml new file mode 100644 index 0000000..6cfe507 --- /dev/null +++ b/roles/jenkins/vars/main.yml @@ -0,0 +1,8 @@ +--- +jenkins_states: + - absent + - present +jenkins_deployment_methods: + - docker +jenkins_version_channels: >-2 + {{ (jenkins_versions.keys()) | list }}