概述
使用jobs.<job_id>.container
创建一个容器来运行作业中任何尚未指定容器的步骤。如果您有使用脚本和容器操作的步骤,则容器操作将作为同一网络上具有相同卷挂载的同级容器运行。
如果您未设置container
,则除非步骤引用配置为在容器中运行的操作,否则所有步骤都将在runs-on
指定的宿主上直接运行。
注意
容器内run
步骤的默认shell为sh
,而不是bash
。这可以通过jobs.<job_id>.defaults.run
或jobs.<job_id>.steps[*].shell
来覆盖。
示例:在容器内运行作业
name: CI on: push: branches: [ main ] jobs: container-test-job: runs-on: ubuntu-latest container: image: node:18 env: NODE_ENV: development ports: - 80 volumes: - my_docker_volume:/volume_mount options: --cpus 1 steps: - name: Check for dockerenv file run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)
name: CI
on:
push:
branches: [ main ]
jobs:
container-test-job:
runs-on: ubuntu-latest
container:
image: node:18
env:
NODE_ENV: development
ports:
- 80
volumes:
- my_docker_volume:/volume_mount
options: --cpus 1
steps:
- name: Check for dockerenv file
run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)
仅指定容器镜像时,可以省略image
关键字。
jobs:
container-test-job:
runs-on: ubuntu-latest
container: node:18
定义容器镜像
使用jobs.<job_id>.container.image
定义用作运行操作的容器的Docker镜像。该值可以是Docker Hub镜像名称或注册表名称。
为容器注册表定义凭据
如果镜像的容器注册表需要身份验证才能拉取镜像,可以使用jobs.<job_id>.container.credentials
设置username
和password
的map
。凭据与您提供给docker login
命令的值相同。
示例:为容器注册表定义凭据
container:
image: ghcr.io/owner/image
credentials:
username: ${{ github.actor }}
password: ${{ secrets.github_token }}
使用容器的环境变量
使用jobs.<job_id>.container.env
设置容器中环境变量的map
。
公开容器上的网络端口
使用jobs.<job_id>.container.ports
设置要在容器上公开的端口的array
。
在容器中挂载卷
使用jobs.<job_id>.container.volumes
设置容器要使用的卷的array
。您可以使用卷在作业中的服务或其他步骤之间共享数据。您可以指定命名的Docker卷、匿名的Docker卷或主机上的绑定挂载。
要指定卷,请指定源和目标路径
<source>:<destinationPath>
.
<source>
是卷名或主机上的绝对路径,<destinationPath>
是容器中的绝对路径。
示例:在容器中挂载卷
volumes:
- my_docker_volume:/volume_mount
- /data/my_data
- /source/directory:/destination/directory
设置容器资源选项
使用jobs.<job_id>.container.options
配置其他Docker容器资源选项。有关选项列表,请参阅“docker create
选项”。
警告
不支持--network
和--entrypoint
选项。