我正在尝试构建一个GitHub动作工作流程,其中涉及安装其他私人代表中存在的依赖项。我已经尝试了各种排列方式(现在我有点迷失了方向),但我无法使它们正常工作。
我创建了一个秘密,存储在TOKEN_GITHUB
中,该秘密可授予对其他存储库的访问权限,因此我可以正确安装,因为我相信所提供的内容仅限于当前代表。
这是一个示例GitHub工作流文件,该文件最终通过CDK部署了多个Lambda,但为简单起见,我将其排除在外:
deploy.yml
name: Lint, Audit, Test & Deploy
on:
push:
branches: [master]
jobs:
build:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, 'ci skip')"
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: 12
- name: getList Lambda
run: |
cd lambdas
cd getList
npm ci
npm audit --production --audit-level=moderate
- name: getItem Lambda
run: |
cd lambdas
cd getItem
npm ci
npm audit --production --audit-level=moderate
- name: saveItem Lambda
run: |
cd lambdas
cd saveItem
npm ci
npm audit --production --audit-level=moderate
因此基本上,在npm ci
lambda的getList
期间,此操作失败。我遇到了各种错误,例如:
npm ERR! git@github.com:权限被拒绝(公钥)。 npm ERR!致命:无法从远程存储库读取。
我的package.json
lambda的getList
如下:
{
"name": "getList",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "jest"
},
"dependencies": {
"dotenv": "^8.2.0",
"mongodb": "^3.5.7",
"get-db": "MyUsername/getDB"
},
"devDependencies": {
"jest": "^26.0.1"
}
}
我也尝试过将username:token
包含在package.json文件中,尽管我不愿意将令牌放在其中而不是秘密,但这还是行不通的。我也尝试过使用https
路径进行npm安装:
https://x-oauth-basic@github.com/MyUsername/getDB.git
的gitconfig行为
git config --global url."https://${{secrets.TOKEN_GITHUB}}:x-oauth-basic@github.com/".insteadOf https://x-oauth-basic@github.com/
有人可以看到我在这里做错了吗?唯一想到的是设置gitconfig
不会跨步骤共享吗?
值得注意的是,我所有的步骤都需要安装私有依赖项,这就是我将其拆分的原因。同样,我在本地尝试的所有工作几乎都可以正常运行,只是在操作中失败了。
答案 0 :(得分:2)
您的git config行不起作用的原因是由于actions/checkout
进行身份验证的方式。您更改身份验证的尝试已被操作保留的凭据覆盖。我以前碰到过与此相关的其他问题,如果您有兴趣,可以阅读一些有关我发现的here的信息。
您将很高兴知道这里有一个简单的解决方法。只需禁用actions/checkout
保留在git config中的身份验证即可。
- uses: actions/checkout@v2
with:
persist-credentials: false
您的package.json依存关系很好。
"dependencies": {
...
"get-db": "MyUsername/getDB"
},
这是示例工作流程。 PAT
是repo
范围内的Personal Access Token。请注意,git config
更改在步骤之间仍然存在,因此每个作业只需运行一次。
- uses: actions/checkout@v2
with:
persist-credentials: false
- uses: actions/setup-node@v1
with:
node-version: 12.x
- run: git config --global url."https://${{ secrets.PAT }}@github.com/".insteadOf ssh://git@github.com/
- run: npm ci
...