Можно ли сделать git push внутри Gitlab-CI без SSH? - PullRequest
0 голосов
/ 27 мая 2018

Мы хотим знать, возможно ли технически, как в GitHub, сделать git push с использованием протокола https, а не ssh и без , используя напрямую имя пользователя и пароль в запросе curl.

Я видел людей, которые, кажется, думают, что это возможно, мы не смогли доказать это.

Существуют ли какие-либо доказательства или свидетели, которые могут подтвердить такую ​​функцию, которая позволяет вам выдвигать, используя токен доступа пользователя или gitlab-ci-token в CI?

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Мне не удалось откатиться через https от исполнителя Docker , когда я внес изменения в репозиторий, который был клонирован gitlab-runner .Поэтому я использую следующий обходной путь:

  1. Клонировать репозиторий во временное местоположение с помощью https с токеном доступа пользователя .
  2. Doнекоторые Git работают (например, объединяются или помечаются).
  3. Нажмите изменения назад.

У меня есть работа в .gitlab-ci.yml:

tagMaster:
  stage: finalize
  script: ./tag_master.sh
  only:
  - master
  except:
  - tags

, а затем у меня есть скрипт оболочки tag_master.sh с Git командами:

#!/usr/bin/env bash

OPC_VERSION=`gradle -q opcVersion`
CI_PIPELINE_ID=${CI_PIPELINE_ID:-00000}

mkdir /tmp/git-tag
cd /tmp/git-tag
git clone https://deployer-token:$DEPLOYER_TOKEN@my.company.com/my-user/my-repo.git
cd my-repo
git config user.email deployer@my.company.com
git config user.name 'Deployer'
git checkout master
git pull
git tag -a -m "[GitLab Runner] Tag ${OPC_VERSION}-${CI_PIPELINE_ID}" ${OPC_VERSION}-${CI_PIPELINE_ID}
git push --tags

Это хорошо работает.

0 голосов
/ 16 июля 2018

Я даю свой before_script.sh, который можно использовать в любом .gitlab-ci.yml

before_script:
  - ./before_script.sh

Все, что вам нужно, это установить в своем проекте переменную защищенной среды с именем GL_TOKEN или GITLAB_TOKEN.

if [[ -v "GL_TOKEN" || -v "GITLAB_TOKEN" ]]; then
  if [[ "${CI_PROJECT_URL}" =~ (([^/]*/){3}) ]]; then
    mkdir -p $HOME/.config/git
    echo "${BASH_REMATCH[1]/:\/\//://gitlab-ci-token:${GL_TOKEN:-$GITLAB_TOKEN}@}" > $HOME/.config/git/credentials
    git config --global credential.helper store
  fi
fi

Это не требует изменения стратегии git по умолчанию, и она будет нормально работать с незащищенной веткой, используя стандартную gitlab-ci-token.

В защищенной ветке вы можете использоватькоманда git push как обычно.

Мы прекратили использовать SSH-ключи, ответы Vít Kotačka помогли нам понять, почему она не работала раньше.

0 голосов
/ 28 мая 2018

Я думаю, что вы должны добавить свой открытый ключ в gitlab по адресу ниже

gitlab.com/profile/keys

, чтобы вы могли нажимать && pull без пароля пользователя

...