【问题标题】:Dependabot with AWS CodeArtifactDependabot 与 AWS CodeArtifact
【发布时间】:2023-01-08 02:40:59
【问题描述】:

我正在尝试将 Dependabot 与 AWS CodeArtifact 结合使用,但我不断遇到身份验证问题。

Dependabot 无法向私有包注册表进行身份验证 使用了以下私有包注册表并导致更新失败:###-###.d.codeartifact..amazonaws.com/npm/private。

日志:

代理 | 2022/06/29 16:52:05 [022] 获取 https://###-###.d.codeartifact.###.amazonaws.com:443/npm/private/hermes-engine 代理 | 2022/06/29 16:52:06 [022] 401 https://###-###.d.codeartifact.###.amazonaws.com:443/npm/private/hermes-engine 代理 | 2022/06/29 16:52:06 [024] 获取 https://###-###.d.codeartifact.###.amazonaws.com:443/npm/private/hermes-engine 代理 | 2022/06/29 16:52:06 [024] 401 https://###-###.d.codeartifact.###.amazonaws.com:443/npm/private/hermes-engine 更新器 |信息 <job_408163671> 更新 hermes 引擎时处理了错误:private_source_authentication_failure {:source=>"###-###.d.codeartifact.###.amazonaws.com/npm/private"}

我试过使用不同的 dependabot.yml 配置,例如带路径的完整 CodeArtifact URL 或使用 token 而不是用户名和密码。

我的dependabot.yml

version: 2
registries:
  npm-codeartifact:
    type: npm-registry
    url: https://<registry>-<account>.d.codeartifact.<region>.amazonaws.com
    username: aws
    password: ${{secrets.CODEARTIFACT_TOKEN}}

  - package-ecosystem: "npm"
    schedule:
      interval: "daily"
    registries:
      - npm-codeartifact

我应该使用什么来使 dependabot 与 CodeArtifact 一起工作?

【问题讨论】:

    标签: dependabot aws-codeartifact npm-registry


    【解决方案1】:

    如果您使用令牌,则无需指定用户名:

    version: 2
    registries:
      npm-codeartifact:
        type: npm-registry
        url: https://<registry>-<account>.d.codeartifact.<region>.amazonaws.com
        token: ${{secrets.CODEARTIFACT_TOKEN}}
    updates:
      # Keep npm dependencies up to date
        - package-ecosystem: "npm"
          schedule:
            interval: "daily"
          registries:
          - npm-codeartifact
    

    【讨论】:

    • 您好,感谢分享。 CodeArtifact 令牌在 12 小时后过期。有没有找到每次动作运行时更新或者直接重新生成的方法? (例如使用 CodeArtifact 访问/secretKey)
    【解决方案2】:

    这个答案是基于@aphexlog回答和@Andrea德路易丝评论关于如何更新代码工件令牌因为它会在 12 小时后过期。我的解决方案以 Nuget Package Manager 为例,并使用单独的 GitHub 操作(.yml 文件)它运行一个与 dependabot 配置分开的 cron-job。


    先决条件

    • dependabot.yml 位于YourProject/.github/dependabot.yml
    • aws-code-artifact-updatetoken.yml(随意命名)位于YourProject.githubworkflowsws-code-artifact-updatetoken.yml
    • 作为存储库/组织秘密的 AWS 凭证
    • 个人访问令牌经典 (PAT),如果您需要安全,有效期为 30-90 天。对于这个用例,我认为没有到期或 365 天到期是足够安全的。

    创造你的(经典)转到您的个人帐户设置,向下滚动直到看到 &lt;&gt; Developer Settings,然后转到个人访问令牌下拉列表并选择令牌(经典)。生成一个新令牌并确保单击生成新令牌(经典)。点击工作流范围(这将强制回购范围)如果你不属于一个组织。如果您确实属于组织,也请单击管理员:组织范围

    选项1

    • 创建或属于 GitHub 组织
    • 转到组织设置,向下滚动到显示的位置“秘密”并选择“依赖机器人”并创建 Dependabot Organization Secret

    选项 2

    • 转到您的存储库,单击“设置”标签
    • 向下滚动到它说的地方“秘密”并选择“依赖机器人”并创建一个新的 Dependabot Repository Secret

    我已经将我的秘密创建为一个名为 CODE_ARTIFACT_TOKEN_PRIVATE_REPOS 的 dependabot 组织秘密,它只能由私有存储库访问。我的初始值是一个虚拟值“测试”,因为它将在工作流运行后运行并更新为正确的令牌

    aws-code-artifact-updatetoken.yml

    name: Update AWS Code Artifact Token
    
    on:
      schedule:
        # Runs every 10 hours
        - cron: "0 */10 * * *"
      workflow_dispatch:
    

    这会为工作流程创建一个名称,并设置一个 cron-job 以每 10 小时在 GitHub Actions 上自动运行一次

    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 上运行的作业。以将自动使用的格式创建环境变量AWS CLIgh cli (github)安装在 GitHub Action runner 上。我正在将 CODEARTIFACT_AUTH_TOKEN 作为变量导出到当前 shell,以便在后面的步骤中使用。此变量获得适当的 CodeArtifact 令牌。将 --domain fullstackindie --domain-owner 896630178141 替换为您的 AWS CodeArtifact 账户信息。

      - 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 来先前为您的回购或组织创建的 Dependabot 存储库/组织秘密。您可以为 gh secret set 设置不同的标志/参数,但是你必须包含 --app dependabot 来更新 Dependabot 秘密.您还必须包括 - 身体包含令牌的 arg。使用环境变量时,您必须为 --body 使用“$MY_ENV”格式。因为我的 dependabot 组织机密仅对私有存储库有效,所以我将可见性设置为私有。我也在使用--组织标志更改我的 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 小时左右更新令牌

    【讨论】:

      【解决方案3】:

      @aphexlog 错过了让 dependabot 与诗歌一起工作的一个关键点。

      你需要添加添加哦:在令牌值之前。

      version: 2
      registries:
        npm-codeartifact:
          type: npm-registry
          url: https://<registry>-<account>.d.codeartifact.<region>.amazonaws.com
          token: aws:${{secrets.CODEARTIFACT_TOKEN}}
      updates:
        # Keep npm dependencies up to date
          - package-ecosystem: "npm"
            schedule:
              interval: "daily"
            registries:
            - npm-codeartifact
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-24
        • 2022-06-28
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 2022-07-19
        • 2021-07-29
        • 2022-09-28
        相关资源
        最近更新 更多