2016-08-29 58 views
10

Mam problem z klonowaniem dużych repozytoriów za pośrednictwem protokołu HTTP w moim programie uruchamiającym Gitlab systemu Windows. Próbowałem kilka metod do płytkich klonów lub wyłączyć kompresję klon. Wciąż nie ma szczęścia.Jak włączyć klonowanie przez SSH dla programu uruchamiającego Gitlab?

Klonowanie tego samego repozytorium przez SSH działa świetnie jako rozwiązanie tymczasowe i chciałbym, aby działało to w naszym procesie Gitlab CI.

Kwestia jest teraz, gdy nie mam pojęcia, jak używać SSH jako metody klonowania dla multi-runner gitlab. Wydaje się domyślnie używać HTTP jako domyślnego, a moje jedyne opcje dotyczące klonowania to, czy wykona pełny klon czy pobranie.

CI/CD Display

Może ktoś wyjaśnić w jaki sposób mogę uzyskać tego klona/sprowadzić do pracy na biegacza przez SSH zamiast http?

Gitlab Wersja: GitLab Community Edition 8.10.7

Dzięki!

+2

Wygląda na to, że problem jest otwarty dla tej funkcji ([233] (https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/233)), ale wydaje się, że zostało zamknięte bez wdrożenia ... – Lucas

Odpowiedz

0

Według:

https://docs.gitlab.com/ee/ci/ssh_keys/README.html

Musisz:

  1. Utwórz nową parę kluczy SSH z ssh-keygen
  2. dodać klucz prywatny jako tajny zmienną do projektu
  3. Uruchom ssh-agent podczas zadania, aby załadować klucz prywatny.

Przykład gitlab_ci.yml:

before_script: 
    # Install ssh-agent if not already installed, it is required by Docker. 
    # (change apt-get to yum if you use a CentOS-based image) 
    - 'which ssh-agent || (apt-get update -y && apt-get install openssh-client -y)' 

    # Run ssh-agent (inside the build environment) 
    - eval $(ssh-agent -s) 

    # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store 
    - ssh-add <(echo "$SSH_PRIVATE_KEY") 

    # For Docker builds disable host key checking. Be aware that by adding that 
    # you are suspectible to man-in-the-middle attacks. 
    # WARNING: Use this only with the Docker executor, if you use it with shell 
    # you will overwrite your user's SSH config. 
    - mkdir -p ~/.ssh 
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' 
    # In order to properly check the server's host key, assuming you created the 
    # SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines 
    # instead. 
    # - mkdir -p ~/.ssh 
    # - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts' 
1

Jako nowicjusz do gitlab, udało mi się włamać na obejście tego problemu, jak również nie znaleźli wbudowany sposób na zmianę domyślny proces klonowania (chociaż here is a recent comment about how it can be done).

Przez disabling the automatic cloning process można skutecznie zmienić jego zachowanie całkowicie, po prostu pisząc swój własny proces klonowania w before_script. Tylko dla celów przykładu ma poniżej pokazują, jak osiągnąć ten cel do klonowania HTTP, ale może być przystosowany do ssh klonowania (if you're trying to use HTTP cloning you should use the built-in cloning process and the config.toml):

  1. utworzyć nowego użytkownika o nazwie „gitlab-runner” i generowania ich obsługi uwierzytelniania token do późniejszego użycia (lub w twoim przypadku wygenerowałbyś klucze ssh).

  2. Wyłącz proces klonowania dla biegacza dodając następującą zmienną zarówno w ustawieniach projektu lub grupy: .../settings/ci_cd

    klucz: GIT_STRATEGY

    wartość: brak

  3. sklonować repo w sposób before_script takie jako:

 
before_script: 
    ## clean the working directory 
    - BUILD_DIR=/home/gitlab-runner/builds/$RUNNER_TOKEN/0 
    - CLONE_DIR="$BUILD_DIR/$CI_PROJECT_PATH" 
    - cd $BUILD_DIR 
    - rm -rf $CLONE_DIR 
    - mkdir -p $CLONE_DIR 

    ## clone the project each time (inefficient, consider performing fetch instead if it already exists) 
    - git clone http://gitlab-runner:[email protected]:8888/${CI_PROJECT_PATH}.git $CLONE_DIR 
    - cd $CLONE_DIR 

Uwaga: Oto odnośne zmienne ja również skonfigurowane w kroku 2, zamiast ciężko kodujące je w skrypcie:

  • RUNNER_TOKEN: wartość „Runner Reklamowe” wymienionego w admin „biegaczy” Menu dla danego biegacza ty próbują uciekać.
  • GITLABRUNNER_USER_AUTH_TOKEN: To jest znak auth wygenerowane w kroku 1.

Również Otworzyłem problem w gitlab dla expanding configuration of the runner cloning process.