Files
jonnybravo 87c52bccbe
Test & Deploy Hugo Docker CMS / test-and-deploy (push) Has been cancelled
Restart nach Deploy erzwingen
2026-09-10 10:21:19 +02:00

157 lines
4.8 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
# Shared tasks: Hugo Docker CMS bereitstellen
# Wird von deploy.yml (Playbook) und molecule converge.yml includiert.
# ── Verzeichnisse anlegen ──
- name: Zielverzeichnisse erstellen
ansible.builtin.file:
path: "{{ deploy_path }}/{{ item }}"
state: directory
mode: "0755"
loop:
- content
- crt
- site/assets/css
- site/assets/js
- site/layouts/_default
- site/layouts/partials
- site/static
# ── docker-compose.yml kopieren ──
- name: docker-compose.yml kopieren
ansible.builtin.copy:
src: "{{ project_root }}/docker-compose.yml"
dest: "{{ deploy_path }}/docker-compose.yml"
mode: "0644"
# ── Statische Site-Dateien kopieren ──
- name: Hugo-Layouts kopieren
ansible.builtin.copy:
src: "{{ project_root }}/site/layouts/"
dest: "{{ deploy_path }}/site/layouts/"
mode: "0644"
- name: main.css kopieren
ansible.builtin.copy:
src: "{{ project_root }}/site/assets/css/main.css"
dest: "{{ deploy_path }}/site/assets/css/main.css"
mode: "0644"
- name: search.js kopieren
ansible.builtin.copy:
src: "{{ project_root }}/site/assets/js/"
dest: "{{ deploy_path }}/site/assets/js/"
mode: "0644"
- name: Entrypoint kopieren und ausführbar machen
ansible.builtin.copy:
src: "{{ project_root }}/site/entrypoint.sh"
dest: "{{ deploy_path }}/site/entrypoint.sh"
mode: "0755"
# ── Zertifikate kopieren ──
- name: Zertifikate für Ziel-Host kopieren
ansible.builtin.copy:
src: "{{ project_root }}/crt/"
dest: "{{ deploy_path }}/crt/"
mode: "0600"
changed_when: molecule_test is not defined
- name: Existierende crt-Dateien finden
ansible.builtin.stat:
path: "{{ deploy_path }}/crt/{{ item }}"
loop:
- "ca.crt"
- "{{ target_hostname }}.crt"
- "{{ target_hostname }}-chain.crt"
- "localhost.crt"
- "localhost-chain.crt"
register: crt_stat
- name: Zertifikate lesbar machen
ansible.builtin.file:
path: "{{ deploy_path }}/crt/{{ item.item }}"
mode: "0644"
loop: "{{ crt_stat.results | selectattr('stat.exists') | list }}"
changed_when: molecule_test is not defined
loop_control:
label: "{{ item.item }}"
# ── Content (optional, nur wenn lokal vorhanden) ──
- name: Beispiel-Content kopieren (falls vorhanden)
ansible.builtin.copy:
src: "{{ project_root }}/content/"
dest: "{{ deploy_path }}/content/"
mode: "0644"
ignore_errors: true
# ── Templates rendern ──
- name: Caddyfile aus Template generieren
ansible.builtin.template:
src: "templates/Caddyfile.j2"
dest: "{{ deploy_path }}/Caddyfile"
mode: "0644"
- name: hugo.toml aus Template generieren
ansible.builtin.template:
src: "templates/hugo.toml.j2"
dest: "{{ deploy_path }}/site/hugo.toml"
mode: "0644"
# ── Docker Compose starten ──
- name: Docker Compose Pull (neueste Images)
ansible.builtin.command:
cmd: docker compose pull
chdir: "{{ deploy_path }}"
register: pull_result
changed_when: "'Pulled' in pull_result.stdout or 'newer' in pull_result.stdout"
when: molecule_test is not defined
- name: Docker Compose starten
ansible.builtin.command:
cmd: docker compose up -d
chdir: "{{ deploy_path }}"
register: compose_result
changed_when: "'Starting' in compose_result.stdout or 'Creating' in compose_result.stdout"
when: molecule_test is not defined
# WICHTIG: geänderte Volume-Dateien (entrypoint.sh, layouts, assets, Caddyfile)
# werden von `up -d` NICHT neu geladen – ein laufender Container wird nicht
# neu gestartet. Expliziter Restart nötig, damit z.B. der neue entrypoint
# (Pagefind-Install) tatsächlich ausgeführt wird.
- name: Container neu starten (geänderte Dateien neu laden)
ansible.builtin.command:
cmd: docker compose restart
chdir: "{{ deploy_path }}"
register: restart_result
changed_when: true
when: molecule_test is not defined
- name: Warten bis Caddy lauscht
ansible.builtin.wait_for:
port: "{{ target_port }}"
host: "127.0.0.1"
timeout: 30
when: molecule_test is not defined
- name: HTTPS-Smoke-Test
ansible.builtin.uri:
url: "https://localhost:{{ target_port }}/"
validate_certs: false
return_content: false
register: smoketest
failed_when: smoketest.status != 200
when: molecule_test is not defined
- name: Erfolgsmeldung
ansible.builtin.debug:
msg:
- "✅ Hugo Docker CMS läuft!"
- " https://{{ target_hostname }}:{{ target_port }}/"
- " https://localhost:{{ target_port }}/"
- " Pfad: {{ deploy_path }}"
- " .md-Dateien: {{ deploy_path }}/content/"
- ""
- "🔒 CA-Zertifikat muss noch vertraut werden (auf deinem Client):"
- " sudo cp {{ project_root }}/crt/ca.crt /etc/ca-certificates/trust-source/anchors/hugo-docker-ca.crt"
- " sudo update-ca-trust"