如何使用Github actions正确推送Docker镜像

3
我正在设置一个Github action来推送Docker镜像到Docker Hub,遵循Github官方README.md for docker/build-push-action@v2的步骤。
这是我在.github/workflows/目录中的action。
name: Publish Docker image

on:
  push:
    branches: master

jobs:
  push_to_registry:
    name: Push Docker image to Docker Hub
    runs-on: ubuntu-latest
    steps:
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      -
        name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      -
        name: Build and push
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: user/app:latest
      -
        name: Image digest
        run: echo ${{ steps.docker_build.outputs.digest }}

在我的分支中测试了该操作是否正常后,我将分支合并到主仓库。令我惊讶的是,登录步骤失败,并在Github操作日志中显示以下错误。

Run docker/login-action@v1
  with:
    logout: true
Error: Username and password required

起初我以为可能错误地定义(甚至未定义)主存储库中的密钥,但在使用Octokit进行请求后,我发现它们确实存在。

{
  total_count: 2,
  secrets: [
    {
      name: 'DOCKER_PASSWORD',
      created_at: '2020-11-04T15:28:55Z',
      updated_at: '2020-11-16T13:11:27Z'
    },
    {
      name: 'DOCKER_USERNAME',
      created_at: '2020-11-04T15:28:55Z',
      updated_at: '2020-11-16T13:11:27Z'
    }
  ]
}


我认为docker/login-action@v1没有使用在with:关键词后提供的用户名和密码。我非常困惑,因为这在我的分支上可行,不明白为什么with:关键词发送了logout: true关键字,而我没有设置它。
有人对此有更深入的了解吗?

这里对我来说运行良好。我还在该步骤的输出中看到了logout: true,因此可能是默认设置:https://github.com/textbook/salary-stats/runs/1400126139?check_suite_focus=true,但推送仍然成功,我猜这是为Post Run清理步骤而设计的。您确定正在运行您认为应该运行的工作流吗? - jonrsharpe
@jonrsharpe 是的,我确定。这是正在运行的工作流程,这是日志 - Diego Asterio
奇怪,我不知道该告诉你什么 - 你可以看到它在我的非常相似的设置下运行良好。 - jonrsharpe
4
你想知道是否有解决办法?我也遇到了非常类似的问题。 - Felipe Kettle
2个回答

2
请您检查存储库设置中的密钥是否如下所示:

enter image description here

另外,当你说

在我的分支中测试了操作后,我将分支合并到了主仓库。

这是否意味着主仓库也是你的? 因为密钥不会在仓库之间转移。如果你fork了另一个用户的仓库,并想要贡献需要密钥的工作流更改,主仓库的所有者将必须添加相同名称的密钥。 此外,密钥不会在拉取请求工作流运行中使用。因此,只有在更改合并到仓库后才能看到它是否起作用。


1

我遇到了同样的问题,请检查您放置密钥的位置,现在GitHub有两种类型的密钥,您应该使用如图所示的Actions。如果您使用depependabot.输入图像描述 输入图像描述 输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接