--- # Docker Build Playbook f?r Semaphore # Baut Docker Image und pusht es zur Registry - name: Build and Push Docker Image hosts: localhost gather_facts: no vars: repo_url: "{{ repo_url | default('https://git.michaelschiemer.de/michael/michaelschiemer.git') }}" repo_branch: "{{ repo_branch | default('main') }}" build_dir: "/tmp/ci-build" registry_url: "{{ registry_url | default('registry.michaelschiemer.de') }}" image_name: "{{ image_name | default('framework') }}" image_tag: "{{ image_tag | default('latest') }}" registry_user: "{{ registry_user | default('admin') }}" registry_password: "{{ registry_password | required }}" tasks: - name: Clean up build directory file: path: "{{ build_dir }}" state: absent - name: Checkout repository git: repo: "{{ repo_url }}" dest: "{{ build_dir }}" version: "{{ repo_branch }}" force: yes register: git_result - name: Get short commit SHA shell: echo "{{ git_result.after }}" | cut -c1-7 register: short_sha - name: Generate image tags set_fact: tags: - "{{ registry_url }}/{{ image_name }}:latest" - "{{ registry_url }}/{{ image_name }}:{{ image_tag }}" - "{{ registry_url }}/{{ image_name }}:git-{{ short_sha.stdout }}" - name: Display image tags debug: msg: - "??? Building Docker image..." - "Registry: {{ registry_url }}" - "Image: {{ image_name }}" - "Tags: {{ tags | join(', ') }}" - name: Ensure Docker is available command: docker --version register: docker_version - name: Display Docker version debug: msg: "Docker version: {{ docker_version.stdout }}" - name: Login to Docker registry docker_login: username: "{{ registry_user }}" password: "{{ registry_password }}" registry_url: "{{ registry_url }}" register: login_result - name: Verify registry login debug: msg: "? Successfully logged in to {{ registry_url }}" when: login_result.failed == false - name: Build Docker image docker_image: name: "{{ registry_url }}/{{ image_name }}" tag: "{{ image_tag }}" source: build build: path: "{{ build_dir }}" dockerfile: Dockerfile.production push: yes state: present register: build_result - name: Tag image with additional tags docker_image: name: "{{ registry_url }}/{{ image_name }}:{{ image_tag }}" repository: "{{ registry_url }}/{{ image_name }}" tag: "{{ item }}" source: local push: yes state: present loop: - "latest" - "git-{{ short_sha.stdout }}" when: build_result.changed - name: Summary debug: msg: - "? Docker image built and pushed successfully!" - "Registry: {{ registry_url }}" - "Image: {{ image_name }}" - "Tags: {{ tags | join(', ') }}" - "Commit: {{ git_result.after }}"