这个回答基于@aphexlog的回答以及@Andrea De Luisi关于如何更新 Code Artifact 令牌的评论,因为它在12小时后会过期。我的解决方案以 Nuget Package Manager 为例,并使用一个独立的 GitHub Action (.yml文件)来运行cron作业,与dependabot配置分开。
前提条件
- dependabot.yml 文件位于
YourProject/.github/dependabot.yml
- aws-code-artifact-updatetoken.yml 文件(可以随意命名)位于
YourProject\.github\workflows\aws-code-artifact-updatetoken.yml
- AWS 凭证作为存储库/组织机密
- 个人访问令牌经典版(PAT),有效期为 30-90 天,如果您需要更安全的话。但是对于这种用例,我认为没有过期或 365 天过期已足够安全。
要创建您的 PAT(经典版),请转到您的个人帐户设置,向下滚动直到看到 <> 开发者设置
,然后转到个人访问令牌下拉菜单并选择令牌(经典版)。生成一个新令牌,并确保单击生成新令牌(经典版)。如果您不属于任何组织,请单击 workflow 范围(这将强制使用 repo 范围)。如果您属于组织,请还单击 admin:org 范围
选项 1
- 创建或加入GitHub组织
- 进入组织设置,向下滚动至"secrets",选择"dependabot"并创建一个Dependabot组织密码
选项2
- 进入您的存储库,单击"设置"选项卡
- 向下滚动至"secrets",选择"dependabot"并创建一个新的Dependabot存储库密码
我已经将我的机密创建为CODE_ARTIFACT_TOKEN_PRIVATE_REPOS的dependabot组织机密,并且仅可访问私有存储库。我的初始值是一个虚拟值"test",因为它将在工作流程运行后被运行和更新为正确的令牌。
aws-code-artifact-updatetoken.yml
name: Update AWS Code Artifact Token
on:
schedule:
- cron: "0 */10 * * *"
workflow_dispatch:
这将为工作流创建名称,并设置一个cron-job以使GitHub Actions自动每10小时运行一次
jobs:
update-code-artifact-token:
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-west-2
GH_TOKEN: ${{ secrets.ORG_SECRETS }}
steps:
- name: Get Code Artifact Token
run: |
export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain fullstackindie --domain-owner 896630178141 --query authorizationToken --output text`
创建一个在Ubuntu上运行的作业。以一种格式创建环境变量,可以自动地被安装在GitHub Action runner上的
aws cli和
gh cli (github)使用。我正在将CODEARTIFACT_AUTH_TOKEN导出为当前shell中的变量,在稍后的步骤中使用。这个变量得到了一个正确的CodeArtifact令牌。
请用您的AWS CodeArtifact帐户信息替换--domain fullstackindie --domain-owner 896630178141。
- name: Update Code Artifact Token
run: |
gh secret set CODE_ARTIFACT_TOKEN_PRIVATE_REPOS --org FullStackIndieLLC --visibility private --app dependabot --body "$CODEARTIFACT_AUTH_TOKEN"
这最后一步使用github cli来设置之前为您的repo或组织创建的Dependabot Repository/Organization secret。您可以为gh secret set设置不同的标志/参数,但您必须包括--app dependabot以更新Dependabot secrets。您还必须包括包含令牌的--body参数。当使用环境变量时,必须使用"$MY_ENV"格式的--body。因为我的dependabot组织机密仅适用于私有存储库,所以我将可见性设置为私有。我还使用--org flag来更改我的Dependabot组织机密。如果使用Dependabot Repository secret,则您的令牌将类似于此
- name: Update Code Artifact Token
run: |
gh secret set CODE_ARTIFACT_TOKEN_PRIVATE_REPOS --repo MyRepo --visibility private --app dependabot --body "$CODEARTIFACT_AUTH_TOKEN"
我建议通过进入您的存储库中的“操作”选项卡,单击工作流程,然后在下拉菜单中单击“运行工作流程”来强制执行工作流程。否则,在第一次运行之前,您的存储库可能需要大约10个小时左右才能更新令牌。