- 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
9.1 KiB
Git-Repository in Semaphore Self-Hosted integrieren
Diese Anleitung beschreibt, wie du dein Git-Repository in Semaphore Self-Hosted (Ansible-UI) integrierst.
?? ?bersicht
Semaphore Self-Hosted ist eine Web-UI f?r Ansible, die es erm?glicht:
- Ansible-Playbooks ?ber eine grafische Oberfl?che auszuf?hren
- CI/CD-Workflows mit Ansible zu automatisieren
- Git-Repositories als Playbook-Quellen zu verwenden
?? Schritt 1: Semaphore starten
1.1 Environment-Datei erstellen
cd deployment/stacks/semaphore
cp env.example .env
1.2 Encryption Key generieren (WICHTIG!)
# Linux/WSL
head -c32 /dev/urandom | base64
# Windows PowerShell
-join ((48..57) + (65..90) + (97..122) | Get-Random -Count 32 | % {[char]$_}) | ConvertTo-Base64
Kopiere den generierten Key und setze ihn in .env:
SEMAPHORE_ACCESS_KEY_ENCRYPTION=<dein-generierter-key>
1.3 Stack starten
docker compose up -d
1.4 Web-UI ?ffnen
?ffne im Browser: http://localhost:9300
?? WICHTIG: Semaphore ist NUR lokal zug?nglich (127.0.0.1). Es gibt KEINEN externen Zugriff aus Sicherheitsgr?nden!
Standard-Login:
- Username:
admin - Password:
admin
?? Schritt 2: Projekt in Semaphore erstellen
2.1 Neues Projekt anlegen
- Melde dich in Semaphore an
- Klicke auf "New Project" oder "Create Project"
- Gib einen Projektnamen ein: "michaelschiemer"
- Klicke auf "Create"
2.2 Git-Repository als Playbook-Quelle hinzuf?gen
Semaphore Self-Hosted kann Playbooks direkt aus Git-Repositories laden. Du hast zwei Optionen:
Option A: Playbooks aus Repository-Clone verwenden (Empfohlen)
- Clone dein Repository lokal:
git clone https://git.michaelschiemer.de/michael/michaelschiemer.git
cd michaelschiemer
- Erstelle ein Playbook-Verzeichnis f?r Semaphore:
mkdir -p deployment/stacks/semaphore/playbooks
cp deployment/ansible/playbooks/*.yml deployment/stacks/semaphore/playbooks/
Option B: Playbooks direkt in Semaphore einf?gen
Semaphore kann auch Playbooks direkt im Web-UI erstellen/bearbeiten. F?r Git-Integration ist Option A besser.
??? Schritt 3: Inventory erstellen
Ein Inventory definiert die Hosts, auf denen Playbooks ausgef?hrt werden.
3.1 Inventory anlegen
- Gehe zu deinem Projekt ? Inventories ? New Inventory
- Name: "Production Hosts" oder "Local Hosts"
- Klicke auf "Create"
3.2 Host hinzuf?gen
- Klicke auf dein Inventory ? Add Host
- F?lle folgende Felder aus:
F?r Production-Deployment:
Name: production
Address: 94.16.110.151
SSH Username: deploy
SSH Port: 22
F?r Staging-Deployment:
Name: staging
Address: 94.16.110.151 # oder dein Staging-Host
SSH Username: deploy
SSH Port: 22
3.3 SSH-Key hinzuf?gen
- Gehe zu Keys (Seitenleiste)
- Klicke auf "New Key"
- Gib einen Namen ein: "Deployment Key"
- F?ge deinen SSH Private Key ein (aus
~/.ssh/productionoder ?hnlich) - W?hle den Key im Host-Inventory aus
?? Schritt 4: Template erstellen
Templates verbinden Playbooks mit Inventories und definieren Parameter.
4.1 Template f?r Tests erstellen
- Gehe zu Templates ? New Template
- Template-Name: "Run PHP Tests"
- Inventory: W?hle dein Inventory
- Playbook: Erstelle ein Playbook oder verwende ein vorhandenes:
---
- name: Run PHP Tests
hosts: localhost
gather_facts: no
tasks:
- name: Checkout repository
git:
repo: https://git.michaelschiemer.de/michael/michaelschiemer.git
dest: /tmp/ci-build
version: main
- name: Install dependencies
command: composer install --no-interaction --prefer-dist
args:
chdir: /tmp/ci-build
- name: Run tests
command: ./vendor/bin/pest
args:
chdir: /tmp/ci-build
register: test_result
- name: Show test results
debug:
var: test_result.stdout_lines
- Speichere das Template
4.2 Template f?r Build erstellen
Erstelle ein Template f?r Docker Image Build:
---
- name: Build and Push Docker Image
hosts: localhost
gather_facts: no
tasks:
- name: Checkout repository
git:
repo: https://git.michaelschiemer.de/michael/michaelschiemer.git
dest: /tmp/ci-build
version: main
- name: Login to Docker registry
docker_login:
username: "{{ registry_user }}"
password: "{{ registry_password }}"
registry_url: "{{ registry_url }}"
vars:
registry_user: "admin"
registry_url: "registry.michaelschiemer.de"
- name: Build Docker image
docker_image:
name: "{{ registry_url }}/framework:{{ image_tag }}"
tag: "{{ image_tag }}"
source: build
build:
path: /tmp/ci-build
dockerfile: Dockerfile.production
push: yes
vars:
registry_url: "registry.michaelschiemer.de"
image_tag: "latest"
4.3 Template f?r Deployment erstellen
Erstelle ein Template f?r Production-Deployment (verwendet die vorhandenen Ansible-Playbooks):
---
- name: Deploy to Production
hosts: production
gather_facts: yes
become: yes
tasks:
- name: Checkout deployment scripts
git:
repo: https://git.michaelschiemer.de/michael/michaelschiemer.git
dest: /tmp/deployment
version: main
- name: Include deployment playbook
include_role:
name: deployment/ansible/playbooks/deploy-update.yml
Oder verwende die vorhandenen Ansible-Playbooks direkt:
Vorteil: Die vorhandenen Playbooks in deployment/ansible/playbooks/ k?nnen direkt verwendet werden!
- Erstelle ein Template: "Deploy to Production"
- W?hle Inventory: "Production Hosts"
- Playbook-Pfad:
deployment/ansible/playbooks/deploy-update.yml - Speichere
?? Schritt 5: CI/CD-Workflow einrichten
5.1 Git-Webhook konfigurieren (Optional)
Semaphore kann Webhooks von Git-Repositories empfangen, um automatisch Tasks zu starten.
- Gehe zu deinem Git-Repository (Gitea)
- Settings ? Webhooks ? Add Webhook
- Webhook-URL:
http://localhost:9300/api/hook/git(nur lokal!) - Content-Type:
application/json - Secret: Optional, aber empfohlen
5.2 Task manuell starten
- Gehe zu Templates
- Klicke auf dein Template (z.B. "Run PHP Tests")
- Klicke auf "Run"
- Beobachte die Ausf?hrung in Echtzeit
5.3 Task automatisch starten
Semaphore kann Tasks basierend auf Git-Events starten:
- Gehe zu Template ? Settings
- Aktiviere "Auto Run on Push"
- W?hle Branch:
mainoderstaging - Speichere
?? Verwendung vorhandener Ansible-Playbooks
Vorhandene Playbooks verwenden
Die vorhandenen Ansible-Playbooks in deployment/ansible/playbooks/ k?nnen direkt in Semaphore verwendet werden:
- Mounte Playbooks als Volume (in
docker-compose.yml):
volumes:
- ./../../ansible/playbooks:/tmp/semaphore/playbooks:ro
- Erstelle Templates, die auf diese Playbooks verweisen:
- Playbook-Pfad:
/tmp/semaphore/playbooks/deploy-update.yml - Inventory: W?hle dein Production-Inventory
- Playbook-Pfad:
Beispiel-Templates
Template: Deploy Update
- Name: "Deploy Update"
- Inventory: "Production Hosts"
- Playbook:
/tmp/semaphore/playbooks/deploy-update.yml - Variables:
registry_url: registry.michaelschiemer.de image_name: framework image_tag: latest
Template: Rollback
- Name: "Rollback"
- Inventory: "Production Hosts"
- Playbook:
/tmp/semaphore/playbooks/rollback.yml - Variables:
registry_url: registry.michaelschiemer.de image_name: framework
?? Erweiterte Konfiguration
Docker Socket f?r Build-Tasks
F?r Docker-Build-Tasks muss der Semaphore-Container Zugriff auf den Docker-Socket haben:
In docker-compose.yml hinzuf?gen:
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
Environment-Variablen f?r Templates
Du kannst Environment-Variablen in Templates verwenden:
- Gehe zu Template ? Variables
- F?ge Variablen hinzu:
registry_url:registry.michaelschiemer.deregistry_user:adminimage_name:framework
Git-Integration mit SSH-Keys
F?r private Repositories:
- Gehe zu Keys
- Erstelle einen SSH-Key f?r Git-Access
- F?ge den Public Key zu deinem Git-Repository hinzu (Deploy Keys)
- Verwende SSH-URL in Git-Tasks:
git: repo: git@git.michaelschiemer.de:michael/michaelschiemer.git
?? N?tzliche Links
? Checkliste
- Semaphore gestartet (http://localhost:9300)
- Projekt erstellt
- Inventory mit Hosts erstellt
- SSH-Keys f?r Host-Zugriff konfiguriert
- Template f?r Tests erstellt
- Template f?r Build erstellt
- Template f?r Deployment erstellt
- Erstes Template erfolgreich ausgef?hrt
- Git-Webhook konfiguriert (optional)
N?chste Schritte: Starte Semaphore und erstelle dein erstes Template!