- name: Create directories file: path: "{{ item }}" state: directory mode: "0755" loop: - "{{ jenkins_root }}" - "{{ jenkins_build_dir }}" - "{{ jenkins_data_dir }}" - name: Template plugins list template: src: templates/plugins.txt.j2 dest: "{{ jenkins_build_dir }}/plugins.txt" mode: "0644" - name: Template Dockerfile template: src: templates/Dockerfile.j2 dest: "{{ jenkins_build_dir }}/Dockerfile" mode: "0644" - name: Build custom Jenkins image (plugins baked in) community.docker.docker_image: name: "{{ jenkins_image_name }}" build: path: "{{ jenkins_build_dir }}" source: build register: build_img - name: Template JCasC config template: src: templates/jenkins-casc.yaml.j2 dest: "{{ jenkins_data_dir }}/casc.yaml" mode: "0640" - name: Ensure ownership for Jenkins data (uid/gid 1000) file: path: "{{ jenkins_data_dir }}" state: directory owner: "1000" group: "1000" recurse: true - name: Template docker-compose.yaml template: src: templates/docker-compose.yaml.j2 dest: "{{ jenkins_root }}/docker-compose.yaml" mode: "0644" - name: Up jenkins stack community.docker.docker_compose_v2: project_src: "{{ jenkins_root }}" files: ["docker-compose.yaml"] state: present register: dc - name: Wait for Jenkins HTTP wait_for: host: 127.0.0.1 port: "{{ jenkins_http_port }}" delay: 3 timeout: 180