Leuk dat het voor je werkt en dat je stappen aan het zetten bent

. Dit bedoel ik niet vervelend, maar een dergelijke opzet is een enorme rode vlag

. Er is een reden dat ik o.a. voor GitLab Runners, Gitea Actions of Forgejo Actions ga hè... Want het mounten van server paden voor deployment is wat mij betreft een hele dikke, grote, vette
NO-NO.
Het mounten en rsyncen lijkt in eerste instantie een enorm goed idee totdat het een keer misgaat

. Je maakt daarnaast de deployment host afhankelijk van de target host. En het is een aardig beveiligingsrisico vanwege potentieel misbruik van schrijfrechten. Je wilt eigenlijk dat wanneer iemand toegang krijgt tot de deployment node nergens bij kan. Uit ervaring kan ik je vertellen dat ik collega's had die per ongeluk de hele root disk overschreven met zulke geintjes

. Want wat als de string replacement niet werkt omdat je die vergeten bent? Dan staat er per ongeluk:
rsync -a --delete . "/deployroot///"
Oeps

. Of wat als je deze lompe kerel dit doet:
# CI_REPO_OWNER=".."
# CI_REPO_NAME=".."
rsync -a --delete . "/deployroot/../../"
En nu niet zeggen dat dat niet kan, want met wat creativiteit kan er meer dan je denkt

.
Ansible is wat mij betreft de gouden standaard voor dit soort deployments. Met name omdat je ook veiligheid in kan bouwen en omdat communicatie via SSH of WinRM gaat. Ik ken Woodpecker verder niet, maar ik begrijp eerlijk gezegd niet waarom je niet een
native CI/CD platform neemt. Dat integreert volgens mij veel makkelijker en maak je het jezelf nu alleen maar lastig...
Ook kun je met GitLab Runners, Forgejo Actions of GitHub Actions de ingebouwde secrets gebruiken voor dit soort deployments waarmee authenticatie naar bijv. target machines per repo beperkt kan worden. Mijn infra repo heeft bijvoorbeeld de Ansible Vault sleutel:"
Maar die kan ik voor de rest niet inzien. Aan mijn account zitten daarnaast de deploy keys gekoppeld:
Dit is de private key van de deploy voor mijn machines.
Bedenk ook dat Forgejo Actions, Gitea Actions afgeleid zijn van GitHub Actions. De meeste actions die te vinden zijn op de GitHub marketplace zijn uitwisselbaar en te gebruiken in Forgejo. Misschien maakt dit je leven ook een stuk makkelijker

. Daarnaast zijn er ook legio voorbeelden. Ook maak ik gebruik van de Forgejo Container Registry voor mijn Docker Images. Die koppeling is dan hetzelfde als bij GitHub en de GitHub Container Registry.
In de repo van @
alex3305 zag ik nog wat behoorlijke complexe actions om allerhande versies aan te maken zodat je alle stacks samenneemt voor zover ik begrijp in een release, maar dat komt later wel.
Yes, maar je moet niet gaan rennen voordat je gaat lopen hè. Mijn
eerste Docker build workflow is al een heel stuk eenvoudiger.
Ik heb zelfs nog een hele tijd Docker container(s) gebruikt, net zoals met Woodpecker. Maar daar ben ik vanaf gestapt omdat ik nu een hosted tool cache gebruik. Daarmee heb ik geen extra ruimte nodig voor (custom) Docker images. Daarbij gebruik ik dan een cache stap zodat Forgejo Actions de cache kan gebruiken bij packages met dezelfde versie(s). Bij mijn infra repo gebruik ik daarvoor de hash van Python's requirements.txt en de hash van Ansible Galaxy requirements.yml:
.forgejo/actions/setup-ansible/action.yml
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| runs:
using: "composite"
steps:
- name: 🏗️ Setup Python
id: setup-python
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6
with:
cache: 'pip'
cache-dependency-path: 'requirements.txt'
- name: 👷 Install Python dependencies
if: steps.setup-python.outputs.cache-hit != 'true'
shell: bash
run: pip install -r requirements.txt
- name: 📦 Setup Ansible Galaxy Cache
id: ansible-galaxy-cache
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: |
.ansible
~/.ansible
key: ${{ runner.os }}-ansible-${{ hashFiles('**/requirements.yml') }}
restore-keys: |
${{ runner.os }}-ansible-
- name: 🌌 Install Ansible Galaxy dependencies
if: steps.ansible-galaxy-cache.outputs.cache-hit != 'true'
shell: bash
run: ansible-galaxy install -r requirements.yml |
Het is in dit geval maar een paar MB aan cache, maar zorgt ervoor dat Ansible in minder dan 10 seconde is geïnstalleerd en klaar is voor gebruik. Het opstarten van een Ansible container (zonder pull) was gek genoeg een minuutje langzamer. Waarschijnlijk omdat het om Docker in Docker in Docker ging

.