Przygotuj job GitLab CI/CD, który do zewnętrznej instancji GitLab (https://gitlab.avlab.pl) będzie wysyłał zmiany dodane do naszego repozytorium.
Apr 15, 8:47am
Oto przykładowy plik .gitlab-ci.yml, który skonfiguruje potok CI/CD w GitLabie, aby automatycznie wysyłał zmiany do zewnętrznej instancji GitLab (np. https://gitlab.avlab.pl). Zakładam, że chcesz zmirrorować repozytorium (np. za pomocą git push --mirror) do zewnętrznej instancji. Jest to typowe rozwiązanie, gdy chcesz zachować synchronizację między dwoma repozytoriami.
Przykładowy plik .gitlab-ci.yml
Plik ten:
Uruchamia się przy każdym push do gałęzi głównej (np. main lub master).
Klonuje repozytorium.
Dodaje zdalny repozytorium (git remote add).
Wysyła zmiany do zewnętrznej instancji GitLab za pomocą git push --mirror.
yaml
stages:
- mirror
mirror_to_external:
stage: mirror
image: alpine/git:latest
before_script:
- apk add --no-cache git openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan gitlab.avlab.pl >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- git remote add external git@gitlab.avlab.pl:twoje-repo.git
- git push --mirror external
only:
- main # lub master, w zależności od nazwy głównej gałęzi
Konfiguracja wymaganych zmiennych CI/CD
Aby powyższy skrypt działał, musisz dodać zmienne CI/CD w ustawieniach swojego repozytorium w GitLabie:
SSH_PRIVATE_KEY
Prywatny klucz SSH (do uwierzytelnienia z gitlab.avlab.pl).
-----BEGIN OPENSSH PRIVATE KEY-----...
Kroki konfiguracyjne
Wygeneruj klucz SSH (jeśli nie masz):
bash
ssh-keygen -t ed25519 -C "twoj@email.com"
Zapisz klucz prywatny (id_ed25519) i publiczny (id_ed25519.pub).
Dodaj klucz publiczny do gitlab.avlab.pl:
Zaloguj się na gitlab.avlab.pl.
Przejdź do Settings → SSH Keys i dodaj klucz publiczny.
Dodaj klucz prywatny jako zmienną CI/CD:
W swoim repozytorium w GitLabie przejdź do:
Settings → CI/CD → Variables.
Utwórz nową zmienną:
Key: SSH_PRIVATE_KEY
Value: Wklej całą zawartość klucza prywatnego (w tym -----BEGIN OPENSSH PRIVATE KEY----- i -----END OPENSSH PRIVATE KEY-----).
Type: File (opcjonalnie, jeśli GitLab obsługuje typ File dla kluczy SSH).
Mask variable: ✅ (ukryj wartość w logach).
Utwórz puste repozytorium na gitlab.avlab.pl (jeśli nie istnieje):
Adres repozytorium (np. git@gitlab.avlab.pl:twoje-repo.git) musi być poprawny.
Uwagi i alternatywy
Jeśli używasz HTTPS zamiast SSH:
Zamiast klucza SSH, użyj tokenu dostępu (Personal Access Token) z uprawnieniami write_repository.
Wtedy zamiast git@gitlab.avlab.pl:... użyj:
https://oauth2:$ACCESS_TOKEN@gitlab.avlab.pl/twoje-repo.git
i dodaj zmienną ACCESS_TOKEN w CI/CD.
Ograniczenie do konkretnych gałęzi:
W polu only możesz dodać więcej gałęzi, np.:
yaml
only:
- main
- develop
Bezpieczeństwo:
Upewnij się, że klucz prywatny jest chroniony (nie jest widoczny w logach ani w repozytorium).
Testowanie
Zatwierdź i wypchnij plik .gitlab-ci.yml do swojego repozytorium.
Sprawdź w CI/CD → Pipelines, czy potok zakończył się sukcesem.
Sprawdź na gitlab.avlab.pl, czy zmiany zostały zsynchronizowane.
Czy chcesz, żebym dostosował ten skrypt do konkretnych potrzeb (np. inne gałęzie, dodatkowe kroki)?
Apr 15, 8:48am
This is a shared conversation and may include unverified content that doesn't reflect Mistral AI's views. Login to resume chatting.