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:

  1. Uruchamia się przy każdym push do gałęzi głównej (np. main lub master).
  2. Klonuje repozytorium.
  3. Dodaje zdalny repozytorium (git remote add).
  4. 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

  1. 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).
  2. Dodaj klucz publiczny do gitlab.avlab.pl:

    • Zaloguj się na gitlab.avlab.pl.
    • Przejdź do Settings → SSH Keys i dodaj klucz publiczny.
  3. 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).
  4. 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

  1. Zatwierdź i wypchnij plik .gitlab-ci.yml do swojego repozytorium.
  2. Sprawdź w CI/CD → Pipelines, czy potok zakończył się sukcesem.
  3. 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.