【问题标题】:How to use Docker image from GitHub Packages?如何使用来自 GitHub Packages 的 Docker 镜像?
【发布时间】:2023-04-02 06:17:01
【问题描述】:

我有这个代码.github/workflows/main.yaml

# .github/workflows/main.yaml
name: CI Workflow

on: [push]

jobs:
  rspec-job:
    runs-on: ubuntu-latest
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    container:
      image: I-stucked-here
      volumes:
        - /vendor/bundle
    steps:
      - code omitted for brevity

这项工作的主要思想是在容器模式下运行所有​​步骤。不在 Linux 主机模式下。

在同一个存储库下,我有一个名为 ruby-rimy-2.6.3 的公共 Docker 映像。由于它不是在 DockerHub 上公开托管的,因此我无法找到一种方法来以编程方式向 GitHub Packages/Registry 验证自己的身份。

我确实尝试过使用不同的语法(见下面的代码),但没有奏效。

# .github/workflows/main.yaml
name: CI Workflow

on: [push]

jobs:
  rspec-job:
    runs-on: ubuntu-latest
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    container:
      image: docker://docker.pkg.github.com/zulhfreelancer/rimy/ruby-rimy-2.6.3:latest
      volumes:
        - /vendor/bundle
    steps:
      - code omitted for brevity

从文档中,GitHub 说 GITHUB_TOKEN 在作业运行时可用。我如何使用这个GITHUB_TOKEN 环境变量来运行类似docker login 的东西 container: 部分以便作业能够拉取图像?

使用 GitHub Personal Token 对我来说不是一个选项,因为在将相同的东西应用到我的 GitHub 组织之前,该存储库只是我的实验存储库。我不想将我的个人令牌放在我组织的存储库环境变量/秘密下——这只会将我的个人令牌暴露给我的同事。

【问题讨论】:

    标签: docker github-actions


    【解决方案1】:

    您不需要使用container 指令在容器中运行测试。

    GitHub Actions 主机安装了 docker 和 docker-compose。我这样做的方式是在我的存储库中有一个docker-compose.yml,其中包括一个运行测试的“服务”。然后,您的工作流程需要执行docker login 并简单地运行docker-compose run test 命令。

    请注意,这种方法的美妙之处在于,您的测试在您自己的机器和 CI 机器上执行完全相同。完全相同的步骤。

    类似的东西:

    name: Test
    on:
      pull_request:
      push: { branches: master }
    
    jobs:
      test:
        name: Run test suite
        runs-on: ubuntu-latest
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    
        steps:
        - name: Checkout code
          uses: actions/checkout@v2
    
        - name: Docker login
          run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
    
        - name: Build docker images
          run: docker-compose build
    
        - name: Run tests
          run: docker-compose run test
    

    我在 DockerHub 上做同样的事情,非常轻松和成功。

    当然,如果你不想使用docker-compose,在登录步骤正确登录后,你仍然可以使用任何普通的docker run ...命令。

    我不确定docker login 命令是否会按原样工作,请参阅这些以进行更深入的讨论:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 2021-02-13
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 2023-03-21
      • 2016-05-18
      相关资源
      最近更新 更多