- Add QUICKSTART.md and SETUP_REPOSITORY.md for Semaphore stack - Add playbooks directory for Semaphore deployment - Update Semaphore docker-compose.yml, env.example, and README - Add Traefik local configuration files - Disable semaphore.yml in Traefik dynamic config - Update docker-compose.local.yml and build-image workflow
104 lines
3.1 KiB
YAML
104 lines
3.1 KiB
YAML
---
|
|
# 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 }}"
|