2017-02-08 9 views
4

Хорошо, что заголовок почти не требует пояснений.Как я могу скомпоновать код слияния Gitlab в ветку на успешной сборке

Таким образом, я хочу, чтобы ветвь (т. Е. Dev) была объединена с другой ветвью (т. Е. Производство), если сборка выполнена успешно.

В случае, если вы хотите знать, почему, пожалуйста, обратите внимание на этот вопрос:
https://stackoverflow.com/questions/42109335/gitlab-runner-starts-merge-automate-merge?noredirect=1#comment71394445_42109335

ответ

1

Там нет простой способ сделать это, как из GitLab версии 8.15. Единственный способ сделать это - использовать API и webhooks.

Это основная суть того, что вы должны сделать:

1. Create a webhook который крюки толкать события.

2.Проверьте, принадлежит ли нажатие к ветке, которую вы хотите слить.

3. Create a merge запрос и сразу accept it с опцией "merge_when_build_succeeds": true.

Таким образом, он объединит ветвь, если сборка будет успешной. Не самая удобная вещь для настройки, но она должна работать.

+0

На самом деле теперь есть ключи развертывания с возможностью записи, которые можно использовать для этого. В более ранних версиях это было бы возможно, создав учетную запись пользователя только для этой цели. –

1

Самое простое решение состоит в том, чтобы сделать запрос на слияние и нажать кнопку «Слияние при конвейере трубопровода», это объединит ветку после сборки. Это я бы рекомендовал.

Ниже приведено рабочее решение, которое я не рекомендую для автоматического слияния. Для этого требуется создать ключ развертывания с доступом для записи и сохранить закрытый ключ в качестве переменной проекта GITLAB_DEPLOY KEY, а также сделать ssh-keyscan на сервере и сохранить его в переменной GITLAB_PUBLIC_KEY.

mergetomaster: 
    stage: deploy 
    image: alpine 
    only: 
    - dev 
    script: 
    - apk add --update git openssh-client 
    - mkdir ~/.ssh 
    - echo $GITLAB_DEPLOY_KEY > ~/.ssh/id_rsa 
    - chmod 400 ~/.ssh/id_rsa 
    - echo $GITLAB_PUBLIC_KEY > ~/.ssh/known_hosts 
    // Steal the identity of person that triggered the build 
    - git config --global user.email "$GITLAB_USER_EMAIL" 
    - git config --global user.name "$GITLAB_USER_ID" 
    - git remote set-url origin <ssh-repository-url> 
    - git checkout master 
    - git reset --hard origin/master 
    - git merge $CI_BUILD_REF 
    - git push origin master 
+0

У меня есть аналогичная настройка для развертывания, которая использует пользовательское альпийское изображение с уже «сгоревшим» ключом. Ваше решение кажется более элегантным, и я бы хотел его принять, но мне нужно, чтобы вы уточнили некоторые моменты. Не могли бы вы подробно объяснить все эти переменные (GITLAB_DEPLOY_KEY, GITLAB_PUBLIC_KEY, закрытый ключ), где их создавать, и использовать фиктивные примеры (id_rsa_gitlab_server.pub, id_rsa_my_key.pub, «Развернуть ключи» или «Переменные»)? Я думаю, GITLAB_USER_EMAIL, GITLAB_USER_ID и CI_BUILD_REF сгенерированы автоматически. Никогда не работал с vars проекта и раньше не открывал ключи, и это запутывает – StLia

3

Я пытался @ Якуб-Кан решения, но я всегда получал id_rsa invalid format. Я думаю, что секретные переменные gitlab каким-то образом ввернуты.

Я запустил его, просто передав ключ развертывания в ssh-add без создания ssh-ключей. Вот работающее решение:

merge to master: 
    stage: deploy 
    image: alpine 
    only: 
    - dev-branch 
    before_script: 
    - apk add --update git openssh-client 
    - mkdir ~/.ssh 
    - ssh-keyscan -p 2222 <gitlab.domain.com> > ~/.ssh/known_hosts 
    - eval `ssh-agent -s` 
    - ssh-add <(echo "$GITLAB_DEPLOY_KEY") 
    - ssh -T [email protected]<gitlab.domain.com> -p 2222 
    - git config --global user.email "$GITLAB_USER_EMAIL" 
    - git config --global user.name "$GITLAB_USER_ID" 
    - git remote set-url origin ssh://[email protected]<gitlab.domain.com>:2222/path/to/repo.git 
    script:  
    - git checkout master 
    - git reset --hard origin/master 
    - git merge $CI_BUILD_REF 
    - git push origin master 
+0

. Это выглядит хорошо, но я не могу подтвердить это, просто потому, что я удалил свой gitlab-сервер и переключился на битбакет:/ – StLia

+0

У меня есть неверный формат в любом случае. И фактически вывод этого закрытого ключа через echo пропускает новую строку после ----- BEGIN RSA KEY ----- – holms