Как связать установку частного гема с действиями github

Я хотел бы запустить rspec для драгоценного камня (назовите его priv_gem_a) с помощью действий github.

priv_gem_a зависит от другого драгоценного камня, находящегося в частном репо (назовите его priv_gem_b). Однако я не могу связать установку priv_gem_b из-за недопустимых разрешений.

Ошибка:

Fetching gem metadata from https://rubygems.org/..........
Fetching [email protected]:myorg/priv_gem_b
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Host key verification failed.
Retrying `git clone '[email protected]:myorg/priv_gem_b' "/opt/hostedtoolcache/Ruby/2.6.3/x64/lib/ruby/gems/2.6.0/cache/bundler/git/priv_gem_b-886cdb130fe04681e92ab5365f7a1c690be8e62b" --bare --no-hardlinks --quiet` due to error (2/4): Bundler::Source::Git::GitCommandError Git error: command `git clone '[email protected]:myorg/priv_gem_b' "/opt/hostedtoolcache/Ruby/2.6.3/x64/lib/ruby/gems/2.6.0/cache/bundler/git/priv_gem_b-886cdb130fe04681e92ab5365f7a1c690be8e62b" --bare --no-hardlinks --quiet` in directory /home/runner/work/priv_gem_a/priv_gem_a has failed.

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

Поэтому я попытался добавить переменные среды в свой файл рабочего процесса, включающий GITHUB_TOKENs, но это не сработало:

name: Test Code

on:
   push:
     branches:
     - master

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/[email protected]
    - name: Set up Ruby 2.6
      uses: actions/[email protected]
      with:
        ruby-version: 2.6.x
    - name: Install dependencies
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        BUNDLE_GITHUB__COM: ${{ secrets.GITHUB_TOKEN }}:x-oauth-basic
      run: |
        gem install bundler
        gem update bundler
        bundle install --without development --jobs 4 --retry 3
    - name: Test with RSpec
      run: |
        bundle exec rspec

Просто отрывок из Gemfile по этому поводу:

gem 'priv_gem_b', '>= 7.0.1', '< 8', git: '[email protected]:my_org/priv_gem_b', branch: :master

См. также:  Заводская функция, возвращающая объект определенного типа - как это сделать лучше
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. Stefan Collier

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

    Вместо этого попробуйте использовать токен с ограниченным доступом repo. Создайте его на https://github.com/settings/tokens, а затем добавьте его в качестве секрета в репозиторий, в котором выполняется ваш рабочий процесс. Он будет находиться в разделе https://github.com/%5Busernameprovided/%5Brepo%5D/settings/secrets

    Используйте этот секрет в своем рабочем процессе вместо GITHUB_TOKEN.

    BUNDLE_GITHUB__COM: ${{ secrets.REPO_SCOPED_TOKEN }}:x-oauth-basic
    

    Или используйте метод x-access-token, который я считаю предпочтительным.

    BUNDLE_GITHUB__COM: x-access-token:${{ secrets.REPO_SCOPED_TOKEN }}
    

    Кроме того, я думаю, вам нужно изменить ссылку на частный гем, чтобы он использовал HTTPS. То, как вы на него ссылаетесь сейчас, означает, что он попытается использовать SSH-ключ вместо токена, определенного в BUNDLE_GITHUB__COM.

    gem 'my_private_repo', git: 'https://github.com/username/my_private_repo.git'
    

    Привет, @peterevans, спасибо за разъяснения по GITHUB_TOKEN, теперь это имеет смысл! Тем не менее, я пробовал этот метод, но, похоже, он не забирает мой токен (… / токены «никогда не использовались» рядом с новым). Ошибка такая же. Любые идеи? person Stefan Collier; 20.09.2019

    @StefanJCollier. Вы также создали секрет, содержащий токен, в репозитории, в котором размещен рабочий процесс? person Stefan Collier; 21.09.2019

    Ага, я сделал это. Можно ли повторить / распечатать ключ (просто чтобы доказать, что он используется)? Я предполагаю, что он не потерпит неудачу, если вы используете ${{ secrets.THIS_DOES_NOT_EXIST }}, если он не определен person Stefan Collier; 23.09.2019

    Мне кажется, что то, как вы используете секреты, правильно. Думаю, я знаю, в чем проблема. Я обновил ответ дополнительным шагом. Попробуйте изменить ссылку на гем, чтобы использовать HTTPS. person Stefan Collier; 24.09.2019

    @StefanJCollier Вы пробовали предложенное мной обновление? person Stefan Collier; 26.09.2019

  2. Stefan Collier

    Итак, мой проект содержал частные драгоценные камни, доступ к которым осуществлялся с помощью ключа ssh. Мы не хотели изменять Gemfile и получать к нему доступ через https, потому что это потребовало бы изменения процедур развертывания.

    Мы использовали это действие ssh-key-action. Мы добавили закрытый ключ ssh в секреты github для SSH_KEY.

    - name: Install SSH keys
      uses: shimataro/[email protected]
      with:
        key: ${{ secrets.SSH_KEY }}
        known_hosts: "Add known public keys of github here"
    
    - name: Install gems # usual step to install the gems.
      run: |
        bundle config path vendor/bundle 
        bundle install --jobs 4 --retry 3
    

    Это сработало без сбоев.

    Примечание. Убедитесь, что параметр key не имеет жестко закодированный закрытый ключ. Так не пойдет.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: