Shy*_*mar 6 github docker dockerfile docker-compose github-actions
这里我在一个作业下有两个工作流程。我们想要实现的唯一目标是,我们希望通过缓存或其他方式重用容器镜像。我们对node_modules 的做法类似
jobs:
build:
name: build
runs-on: [self-hosted, x64, linux, research]
container:
image: <sample docker image>
env:
NPM_AUTH_TOKEN: <sample token>
steps:
- uses: actions/checkout@v2
- name: Install
run: |
npm install
- name: Build
run: |
npm build
Test:
name: Test Lint
runs-on: [self-hosted, x64, linux, research]
container:
image: <sample docker image>
env:
NPM_AUTH_TOKEN: <sample token>
steps:
- uses: actions/checkout@v2
- name: Install Dependencies
run: npm ci
- name: Lint Check
run: npm run lint
Run Code Online (Sandbox Code Playgroud)
小智 6
我建议使用Docker 的 Build Push 操作来实现此目的。通过build-push-action,您可以使用内联缓存、注册表缓存或实验性缓存后端 API 来缓存容器映像:
name: Build and push
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: user/app:latest
cache-from: type=registry,ref=user/app:latest
cache-to: type=inline
Run Code Online (Sandbox Code Playgroud)
请参阅Buildkit 文档。
name: Build and push
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: user/app:latest
cache-from: type=registry,ref=user/app:buildcache
cache-to: type=registry,ref=user/app:buildcache,mode=max
Run Code Online (Sandbox Code Playgroud)
请参阅Buildkit 文档。
name: Build and push
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: user/app:latest
cache-from: type=gha
cache-to: type=gha,mode=max
Run Code Online (Sandbox Code Playgroud)
请参阅Buildkit 文档。
我个人更喜欢使用缓存后端 API,因为它易于设置,并且可以极大地缩短整体 CI 管道的运行持续时间。
通过查看评论,您似乎想在工作流程之间共享 Docker 缓存。在这种情况下,您可以使用以下示例在工作流程中的作业之间共享 Docker 容器:
jobs:
build:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
tags: myimage:latest
outputs: type=docker,dest=/tmp/myimage.tar
-
name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: myimage
path: /tmp/myimage.tar
use:
runs-on: ubuntu-latest
needs: build
steps:
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Download artifact
uses: actions/download-artifact@v2
with:
name: myimage
path: /tmp
-
name: Load Docker image
run: |
docker load --input /tmp/myimage.tar
docker image ls -a
Run Code Online (Sandbox Code Playgroud)
一般来说,GitHub Actions (GHA) 中的作业之间不会共享数据。作业实际上会在不同的临时虚拟机上并行运行,除非您显式创建需求依赖项
GHA确实提供了缓存机制。对于包管理器类型缓存,他们简化了它,请参阅此处。
对于 docker 镜像,您可以使用 docker buildx 缓存并缓存到远程注册表(包括 ghcr),或者使用 GHA缓存操作,这可能更容易。actions/cache 的语法在页面上非常简单明了。对于 buildx 来说,文档总是有点问题(我认为主要是因为构建它的人非常聪明,他们没有意识到我们有多么不了解他们内心的想法),所以你需要配置缓存操作,然后 buildx 来缓存它。
或者,您可以docker save imagename > imagename.tar在缓存中执行并使用它。这里有一个很好的例子。不知道是谁写的,但它确实有效。
| 归档时间: |
|
| 查看次数: |
6011 次 |
| 最近记录: |