Pobieranie GitLab CI do klonowania prywatnych repozytoriów

Mam GitLab & GitLab CI skonfigurowany do hostowania i testowania niektórych moich prywatnych transakcji repos. Dla moich modułów composer w tym systemie, mam Satis skonfigurowany do rozwiązywania moich prywatnych pakietów.

Oczywiście te prywatne Pakiety wymagają klucza ssh do ich sklonowania, a ja mam to działające w terminalu - mogę uruchomić composer install i pobrać te pakiety, o ile klucz jest dodany z ssh-add w powłoce.

Jednakże, podczas uruchamiania moich testów w GitLab CI, jeśli projekt ma którekolwiek z tych zależności testy nie zostaną zakończone, ponieważ moja instancja GitLab wymaga uwierzytelnienia, aby uzyskać deps (oczywiście), a test nie powie Host key verification failed.

Moje pytanie brzmi jak skonfigurować to tak, aby gdy runner uruchomi test, mógł uwierzytelnić się na gitlab bez hasła? Próbowałem umieścić SSH-key bez hasła w moim folderze runners ~/.ssh, jednak kompilacja nie będzie nawet dodawać klucza, " eval ssh-agent -s", a następnie SSH-add wydaje się zawieść mówiąc, że agent nie działa...

Author: CSchulz, 2014-09-05

7 answers

Zamieszczam to jako odpowiedź, ponieważ inne nie były do końca jasne i / lub szczegółowe IMHO

Zaczynając od GitLab 8.12+, zakładając, że podmoduł repo znajduje się na tym samym serwerze, co ten, który go żąda, możesz teraz:

  1. Skonfiguruj repo z podmodułami git jak zwykle (git submodule add git@somewhere:folder/mysubmodule.git)

  2. Zmodyfikuj swój plik .gitmodules w następujący sposób

    [submodule "mysubmodule"]
      path = mysubmodule
      url = ../../group/mysubmodule.git
    

    Gdzie"../../ group / mysubmodule.git ' jest względną ścieżką z twojego repozytorium do podmodułu jeden.

  3. Dodaj następujące wiersze do gitlab-ci.yml

    variables:
      GIT_SUBMODULE_STRATEGY: recursive
    

    Aby polecić biegaczowi pobranie wszystkich podmodułówprzed kompilacją.

Zastrzeżenie: jeśli twój biegacz zdaje się ignorować dyrektywę GIT_SUBMODULE_STRATEGY, powinieneś rozważyć zaktualizowanie jej .

(źródło: https://docs.gitlab.com/ce/ci/git_submodules.html )

 12
Author: Marco A.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-14 11:01:34

Tutaj pełne howto:

Projekt Ogólny

  • generowanie pary kluczy SSH
  • dodanie prywatnej zmiennej jako bezpiecznej zmiennej środowiskowej projektu
  • udostępnienie prywatnego dla skryptów testowych na GitLab-CI
  • dodanie publicznego jako klucza wdrażania na każdej z prywatnych zależności

Generowanie pary publicznych i prywatnych kluczy SSH

Generowanie pary kluczy publicznych i prywatnych SSH bez hasło:

ssh-keygen -b 4096 -C "<name of your project>" -N "" -f /tmp/name_of_your_project.key

Dodawanie prywatnego klucza SSH do projektu

Musisz dodać klucz jako bezpieczną zmienną środowiskową do swojego projektu jako po:

  • przeglądaj https://<gitlab_host>/<group>/<project_name>/variables
  • kliknij "Dodaj zmienną"
  • wypełnij pole tekstowe Key SSH_PRIVATE_KEY
  • wypełnij pole tekstowe Value prywatnym kluczem SSH
  • kliknij "Zapisz zmiany"

Ujawnianie prywatnego klucza SSH do skryptów testowych

W celu udostępnij swój klucz prywatny do skryptów testowych, które musisz dodać poniżej do pliku .gitlab-ci.yml:

before_script:
  # install ssh-agent
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  # run ssh-agent
  - eval $(ssh-agent -s)
  # add ssh key stored in SSH_PRIVATE_KEY variable to the agent store
  - ssh-add <(echo "$SSH_PRIVATE_KEY")
  # disable host key checking (NOTE: makes you susceptible to man-in-the-middle attacks)
  # WARNING: use only in docker container, if you use it with shell you will overwrite your user's ssh config
  - mkdir -p ~/.ssh
  - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

Fragment kodu pochodzi z Dokumentacji GitLab

Dodanie publicznego klucza SSH jako klucza wdrażania do wszystkich prywatnych zależności

Musisz zarejestrować publiczny klucz SSH jako deploy key do wszystkich prywatnych zależności w następujący sposób:

  • przeglądaj https://<gitlab_host>/<group>/<dependency_name>/deploy_keys
  • kliknij "nowy klucz wdrażania"
  • wypełnij pole tekstowe Title z Nazwa projektu
  • wypełnij pole tekstowe Key publicznym kluczem SSH
  • kliknij "Utwórz klucz wdrożenia"
 34
Author: toch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-04 16:15:03

Naprawiono to przez dodanie klucza do znanych hostów z ssh-keyscan -H 'localgitlab.co.uk' >> ~gitlab_ci_runner/.ssh/known_hosts

 4
Author: danbroooks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-06 16:40:21

Jeśli nie chcesz bawić się przy użyciu kluczy ssh lub modułów podrzędnych, możesz zastąpić repo w konfiguracji Gita, aby uwierzytelnić się tokenem zadania (w gitlab-ci.yml):

before_script:
  - git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.example.com/group/repo.git".insteadOf [email protected]:group/repo.git
 2
Author: a544jh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-25 13:35:29

Użyłem Rozmieść tokeny , aby rozwiązać ten problem, ponieważ ustawienie kluczy SSH dla biegacza testowego wydaje się trochę zbyt długie.

git clone http://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git

Tokeny wdrożenia są przypisane do projektu i są tylko do odczytu.

 1
Author: Juddling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-11 14:49:22

Miałem scenariusz, w którym musiałem użyć klucza ssh w 3 różnych skryptach, więc umieściłem klucz ssh w jednym skrypcie powłoki i wywołałem go pierwszy, przed pozostałymi 3 skryptami. To skończyło się nie działa, myślę, że ze względu na ssh-agent nie utrzymujące się pomiędzy skryptami powłoki, lub coś w tym stylu. Skończyło się na wysłaniu klucza prywatnego do pliku ~/.ssh/id_rsa, który na pewno będzie się utrzymywał w innych skryptach.

.gitlab-ci.yml

script:
    - ci/init_ssh.sh
    - git push # or whatever you need ssh for

Ci/init_ssh.sh

# only run in docker:
[[ ! -e /.dockerenv ]] && exit 0

mkdir -p ~/.ssh
echo "$GITLAB_RUNNER_SSH_KEY" > ~/.ssh/id_rsa
chmod 400 ~/.ssh/id_rsa
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > /.ssh/config

It działa jak urok!

 0
Author: user3246077,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-15 21:08:55

Wydaje się, że w końcu jest rozsądne rozwiązanie .

W skrócie od GitLab 8.12 wszystko, co musisz zrobić, to użyć ścieżek względnych w .submodules, a git submodule update --init będzie po prostu działać

 0
Author: Eri Rubin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-09 01:58:06