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.
.gitlab-ci.ymlPlik ten:
push do gałęzi głównej (np. main lub master).git remote add).git push --mirror.yamlstages: - 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
Aby powyższy skrypt działał, musisz dodać zmienne CI/CD w ustawieniach swojego repozytorium w GitLabie:
SSH_PRIVATE_KEYgitlab.avlab.pl).-----BEGIN OPENSSH PRIVATE KEY-----...Wygeneruj klucz SSH (jeśli nie masz):
bashssh-keygen -t ed25519 -C "twoj@email.com"
id_ed25519) i publiczny (id_ed25519.pub).Dodaj klucz publiczny do gitlab.avlab.pl:
gitlab.avlab.pl.Dodaj klucz prywatny jako zmienną CI/CD:
SSH_PRIVATE_KEY-----BEGIN OPENSSH PRIVATE KEY----- i -----END OPENSSH PRIVATE KEY-----).File (opcjonalnie, jeśli GitLab obsługuje typ File dla kluczy SSH).Utwórz puste repozytorium na gitlab.avlab.pl (jeśli nie istnieje):
git@gitlab.avlab.pl:twoje-repo.git) musi być poprawny.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.:
yamlonly: - main - develop
Bezpieczeństwo:
Upewnij się, że klucz prywatny jest chroniony (nie jest widoczny w logach ani w repozytorium).
.gitlab-ci.yml do swojego repozytorium.gitlab.avlab.pl, czy zmiany zostały zsynchronizowane.Czy chcesz, żebym dostosował ten skrypt do konkretnych potrzeb (np. inne gałęzie, dodatkowe kroki)?