我想通过github操作在gem(称为priv_gem_a
)上运行rspec。
priv_gem_a
依赖于另一个私有仓库中的宝石(称为priv_gem_b
)。但是由于权限无效,我无法捆绑安装priv_gem_b
。
错误:
Fetching gem metadata from https://rubygems.org/..........
Fetching git@github.com: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 'git@github.com: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 'git@github.com: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
的工作流文件中,但这不起作用:
name: Test Code
on:
push:
branches:
- master
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up Ruby 2.6
uses: actions/setup-ruby@v1
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: 'git@github.com:my_org/priv_gem_b', branch: :master
答案 0 :(得分:5)
我相当确定存储库中的默认机密GITHUB_TOKEN
仅适用于该存储库。您不能使用它来访问其他存储库。
尝试改用repo
范围内的令牌。在https://github.com/settings/tokens创建一个,然后作为秘密添加到您的工作流运行所在的存储库中。该存储库将位于https://github.com/[username]/[repo]/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 }}
此外,我认为您需要更改对私有gem的引用,以便它使用HTTPS。现在,您引用它的方式意味着它将尝试使用SSH密钥代替BUNDLE_GITHUB__COM
中定义的令牌。
gem 'my_private_repo', git: 'https://github.com/username/my_private_repo.git'
答案 1 :(得分:0)
因此,我的项目包含一个私有的gem,可以使用ssh密钥对其进行访问。
我们不想更改Gemfile并通过https
访问它,因为这将涉及更改部署过程。
我们使用了此操作ssh-key-action。我们在SSH_KEY
的{{3}}中添加了ssh私钥。
- name: Install SSH keys
uses: shimataro/ssh-key-action@v2
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
参数不是不是。这样是行不通的。