Я хотел бы запустить 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_TOKEN
s, но это не сработало:
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
Я почти уверен, что секрет
GITHUB_TOKEN
по умолчанию в репозитории ограничен только этим репозиторием. Вы не можете использовать его для доступа к другим репозиториям.Вместо этого попробуйте использовать токен с ограниченным доступом
repo
. Создайте его на https://github.com/settings/tokens, а затем добавьте его в качестве секрета в репозиторий, в котором выполняется ваш рабочий процесс. Он будет находиться в разделе https://github.com/%5Busernameprovided/%5Brepo%5D/settings/secretsИспользуйте этот секрет в своем рабочем процессе вместо
GITHUB_TOKEN
.Или используйте метод
x-access-token
, который я считаю предпочтительным.Кроме того, я думаю, вам нужно изменить ссылку на частный гем, чтобы он использовал HTTPS. То, как вы на него ссылаетесь сейчас, означает, что он попытается использовать SSH-ключ вместо токена, определенного в
BUNDLE_GITHUB__COM
.Привет, @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
Итак, мой проект содержал частные драгоценные камни, доступ к которым осуществлялся с помощью ключа ssh. Мы не хотели изменять Gemfile и получать к нему доступ через
https
, потому что это потребовало бы изменения процедур развертывания.Мы использовали это действие ssh-key-action. Мы добавили закрытый ключ ssh в секреты github для
SSH_KEY
.Это сработало без сбоев.
Примечание. Убедитесь, что параметр
key
не имеет жестко закодированный закрытый ключ. Так не пойдет.