gitlab-ci: установка нескольких репозиториев gitlab в виде модулей npm с разными ключами ssh - PullRequest
1 голос
/ 11 июня 2019

У меня есть проект на gitlab, который должен установить два других проекта gitlab в виде пакетов npm. Когда был только один пакет, мой .gitlab-ci.yml был настроен так:

stages:
    - lint

variables:
  PROJECT_1_KEY: $PROJECT_1_KEY

lint:
  stage: lint
  image: node-chrome:latest
  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)
    - ssh-add <(echo "$PROJECT_1_KEY")
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - cd app
    - npm install

Это сработало просто отлично.

Однако попытка добавить второй проект, для которого требуется собственный ключ развертывания, до сих пор не увенчалась успехом.

Я добавил вторую переменную env PROJECT_2_KEY в раздел переменных.

То, что я пробовал:

Использование ssh-add для добавления обеих клавиш

  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)
    - ssh-add <(echo "$PROJECT_1_KEY")
    - ssh-add <(echo "$PROJECT_2_KEY")
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - cd app
    - npm install

Создание отдельных файлов, по одному для каждого ключа развертывания, и добавление их в .ssh/config файл

  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)
    - mkdir -p ~/.ssh
    - echo "$PROJECT_1_KEY" > ~/.ssh/project_1
    - echo "$PROJECT_2_KEY" > ~/.ssh/project_2
    - echo -e "Host project_1\n\tHostName gitlab.com\n\tIdentityFile $HOME/.ssh/project_1" > ~/.ssh/config
    - echo -e "Host project_2\n\tHostName gitlab.com\n\tIdentityFile $HOME/.ssh/project_2" >> ~/.ssh/config
    - cd app
    - npm install

Добавление обоих ключей в один файл id_rsa и добавление gitlab.com в known_hosts

  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)
    - mkdir -p ~/.ssh
    - echo "$PROJECT_1_KEY" >> ~/.ssh/id_rsa
    - echo "$PROJECT_2_KEY" >> ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - touch ~/.ssh/known_hosts
    - ssh-keyscan gitlab.com >> ~/.ssh/known_hosts
    - cd app
    - npm install

Я немного летаю вслепую. Есть ли правильная техника для того, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 11 июня 2019

Я сражался в подобном сражении только в другом контексте (PHP Composer, требующий частного репозитория gitlab).Я не смог заставить пример, основанный на SSH, работать так, как я был доволен, поэтому я решил воспользоваться настройкой композитора, которая использовала пользовательский URL в качестве ссылки для определенной зависимости.

В PHP это выгляделонапример:

"require": {
       "foo/bar": "dev-master",
...
"repositories": [
    {
        "type": "vcs",
        "url": "https://gitlab+deploy-token-1234:abc-def-ghijk@gitlab.com/path/to/repo.git"
    }
]

Итак, учитывая контекст npm, можете ли вы использовать ключевое слово dependencies для определения проектов с использованием URL-адресов git, содержащих данные токена для аутентификации?

"dependencies" : {
  "foo/bar" : "https://gitlab+deploy-token-1234:abc-def-ghijk@gitlab.com/path/to/repo.git",
}

Если вам не нравится включать данные авторизации в подтвержденный package.json, вы можете попробовать пропустить это и просто использовать необработанный URL-адрес git.В некоторых проектах во время сборки я просто выполняю прямое клонирование git другого частного проекта, и кажется, что процесс сборки имеет разрешение на клонирование без какой-либо настройки.(Я не совсем уверен, «кем» авторизован процесс сборки, но предположительно пользователь, который запустил сборку?)

...