feat(deployment): update Semaphore stack and Traefik configuration
- 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
This commit is contained in:
103
deployment/stacks/semaphore/playbooks/docker-build.yml
Normal file
103
deployment/stacks/semaphore/playbooks/docker-build.yml
Normal file
@@ -0,0 +1,103 @@
|
||||
---
|
||||
# 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 }}"
|
||||
Reference in New Issue
Block a user