如何在 GitHub Actions 中构建的 Dockerfile 中使用 github 令牌并尝试克隆私有存储库?

Posted

技术标签:

【中文标题】如何在 GitHub Actions 中构建的 Dockerfile 中使用 github 令牌并尝试克隆私有存储库?【英文标题】:How to use github token in Dockerfile that is built in GitHub Actions and trying to clone private repository? 【发布时间】:2021-09-17 08:49:05 【问题描述】:

这是我的 GitHub 操作步骤。 PRIVATE_REQUIREMENT_OWNER_TOKEN 秘密已创建并包含具有完整 repo 范围的 GitHub 令牌:

  - name: Build docker image
    id: docker_build
    uses: docker/build-push-action@v2
    with:
      push: false
      context: .
      tags: 'username/image:latest'
      secrets: |
        "github_token=$ secrets.PRIVATE_REQUIREMENT_OWNER_TOKEN "

这是 requirements.txt 中的一行,其中包含指向私有存储库的链接,并在上述步骤中从 Dockerfile 构建 docker 映像时尝试安装:

git+ssh://git@github.com/username/private-repository

该行已添加到Dockerfile

RUN --mount=type=secret,id=github_token pip install https://$(cat /run/secrets/github_token)@github.com/username/private-repository.git

在 GitHub Actions 中引发以下错误:

#11 [ 6/12] RUN --mount=type=secret,id=PRIVATE_REQUIREMENT_OWNER_TOKEN_SECRET pip install https://$(cat /run/secrets/PRIVATE_REQUIREMENT_OWNER_TOKEN_SECRET)@github.com/username/private-repository.git
#11 sha256:b3d88dd9813db3257b15f53f1eb5a4c593c69ff98ec03cc4d70d564df1a1f7f6
#11 0.697 Collecting https://****@github.com/vassilyvv/django-sinbad.git
#11 0.790   ERROR: HTTP error 404 while getting https://****@github.com/username/private-repository
.git
#11 0.791 ERROR: Could not install requirement https://****@github.com/username/private-repository
.git because of HTTP error 404 Client Error: Not Found for url: https://github.com/username/private-repository
 for URL https://****@github.com/username/private-repository.git

但是当我尝试使用相同的令牌在本地机器上克隆存储库时,它运行良好:

git clone https://<token>@github.com/username/private-repository.git

我完全不知道如何使用这个github_token 来成功克隆上面提到的私有仓库。

我的目标是克隆私有 GitHub 存储库,同时从 GitHub Actions 中的 Dockerfile 构建 docker 映像。而且我几乎可以肯定我已经执行了一些错误的步骤。请帮忙!

【问题讨论】:

嗨。该主题可能对您有所帮助:Pass variable from a github action to docker image build @Vas 是/run/secrets/github_token base64 编码,还是实际上包含预期值? 没有编码就进入了机密部分。我不确定它是如何存储在 /run/secrets/github_token 中的,因为我没有设法在 GH Actions 日志中显示它 【参考方案1】:

我认为这是提供给pip 的 git URL 的问题。如果需要从私有 git 仓库安装 python 包,可以使用以下格式。

pip install git+https://&lt;PERSONAL_ACCESS_TOKEN&gt;@github.com/username/private-repo.git

所以在你的情况下,它将是:

pip install git+https://$(cat /run/secrets/github_token)@github.com/username/private-repository.git

见:https://pip.pypa.io/en/stable/cli/pip_install/#git

【讨论】:

你太棒了!

以上是关于如何在 GitHub Actions 中构建的 Dockerfile 中使用 github 令牌并尝试克隆私有存储库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GitHub Actions 中缓存纱线包

Github Actions - 如何在 CI 构建时将 SCSS 编译为 CSS?

如何在推送事件中跳过 GitHub Actions 作业?

如何使用可重用的Github Actions和Heroku构建简单的部署管道

GitHub Actions:如何像合并一样构建拉取请求?

如何使用 GitHub Actions 对构建工件进行版本化?