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...
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:
Skonfiguruj repo z podmodułami git jak zwykle (
git submodule add git@somewhere:folder/mysubmodule.git
)-
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.
-
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 )
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"
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
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
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.
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!
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ć
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