2016-08-29 2 views
10

У меня возникли проблемы с клонированием больших репозиториев через HTTP на моем Windows Gitlab runner. Я пробовал несколько методов делать мелкие клоны или отключать сжатие клонов. Еще не повезло.Как включить клонирование через SSH для бегуна Gitlab?

Клонирование того же хранилища через SSH отлично работает как временное решение, и я хотел бы, чтобы это работало над процессом Gitlab CI.

Проблема теперь стоит там, где я понятия не имею, как использовать SSH как метод клонирования для gitlab-multi-runner. По-видимому, он использует HTTP по умолчанию, и мои единственные варианты клонирования - это то, будет ли он делать полный клон или выборку.

CI/CD Display

Может кто-нибудь объяснить, как я мог бы получить, что клон/выборки, чтобы работать на полоза SSH вместо HTTP?

Gitlab Версия: GitLab Community Edition 8.10.7

Спасибо!

+2

Существует проблема, открытая для этой функции ([233] (https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/233)), но, похоже, она имеет был закрыт без реализации ... – Lucas

ответ

0

По:

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

Вам нужно:

  1. Создать новую пару ключей SSH с SSH-серийник
  2. Добавить секретный ключ в качестве секретного Variable к проекту
  3. Запустите ssh-agent во время задания, чтобы загрузить закрытый ключ.

Пример 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

Как новичок в gitlab, мне удалось взломать обходной путь к этому вопросу, я также не нашли встроенный способ изменить процесс клонирования по умолчанию (хотя here is a recent comment about how it can be done).

К disabling the automatic cloning process вы можете полностью отменить его поведение, просто написав свой собственный процесс клонирования в before_script. Только для целей примера делает ниже показано, как выполнить это для HTTP клонирования, но может быть адаптирован для ssh клонирования (if you're trying to use HTTP cloning you should use the built-in cloning process and the config.toml):

  1. Создание нового пользователя с именем «gitlab-бегун» и генерировать их Идент.польз токен для последующего использования (или в вашем случае вы должны генерировать ключи ssh).

  2. Отключить процесс клонирования для бегуна, добавив следующую переменную либо в настройках проекта или группы: .../settings/ci_cd

    ключ: GIT_STRATEGY

    значение: нет

  3. клонировать репо в before_script таких как:

 
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 

Примечание: Вот соответствующие переменные я также сконфигурированные на шаге 2, а не жесткого кодирования их в подлиннике:

  • RUNNER_TOKEN: значение «Runner Токен», перечисленных в Admin «Бегуны» меню для конкретного бегуна вы пытаются запустить.
  • GITLABRUNNER_USER_AUTH_TOKEN: Это маркер аутентификации, созданный на шаге 1.

Кроме того, я открыл вопрос в gitlab для expanding configuration of the runner cloning process.

Смежные вопросы