簡體   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