繁体   English   中英

在 GitHub 操作中使用本地 Dockerfile?

[英]Use local Dockerfile in a GitHub action?

我想设置一个 GitHub Action 来构建我的项目并在本地运行测试。 当我使用.devcontainer ,我在.devcontainer/Dockerfile中有一个Dockerfile ,它提供了构建项目所需的一切。

现在我想写一个 GitHub Action 来在每次推送时构建项目。 在本地我会这样做:

docker build -t local - < .devcontainer/Dockerfile
docker run -it -v $(pwd):/srv -w/srv local make test

GitHub 动作看起来很麻烦,但我最终写了这个:

on: push
jobs:
  build:
    name: build
    runs-on: ubuntu-latest
    steps:
      - name: check out repository
        uses: actions/checkout@v2
      - name: build project
        container:
          image: ".devcontainer/Dockerfile"
          volumes:
            - .:/srv
        run: make test

不幸的是,它不喜欢container关键字。

有什么线索吗?

容器密钥设计用于运行公开可用的 dockerized 操作,可在job.<job_id>密钥下使用,而不是steps密钥。 你不需要它来完成你的任务。

GitHub 跑步者已经安装了大量软件,包括 docker 和 docker 组合。

您可以轻松运行在 GitHub 工作流程中本地运行的相同命令。

steps:
- name: Check out code
  uses: actions/checkout@v2
- name: Build docker images
  run: docker build -t local < .devcontainer/Dockerfile
- name: Run tests
  run: docker run -it -v $PWD:/srv -w/srv local make test

我的大部分工作流程都是这样运行的,只使用 docker-compose,所以你最终会得到更干净的工作流程:

steps:
- name: Check out code
  uses: actions/checkout@v2
- name: Build docker images
  run: docker-compose build
- name: Setup database
  run: docker-compose run setup
- name: Run tests
  run: docker-compose run test

最好的解决方案是基于您的Dockerfile构建、发布和重用 Docker 映像。

我建议按照 Github 文档创建自定义build-and-publish-docker.yml操作: 发布 Docker 图像

假设您的存储库是公开的,您应该能够自动将您的图像上传到ghcr.io而无需任何配置。 作为替代方案,也可以将映像发布到 Docker Hub。

构建并发布图像后(基于先前创建的操作的on事件,也可以手动触发),您只需更新您的tests.yml操作,使其使用自定义 Docker 图像。 同样,这里有一个关于container选项的非常好的文档页面:在容器中运行作业

例如,我正在分享我在个人存储库中使用的内容:

  • Dockerfile :要在 CI 上构建的 Docker 映像
  • docker.yml :构建 Docker 映像的操作
  • lint.yml :使用内置 Docker 图像的操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM