Note
GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。
概述
使用 jobs.<job_id>.container
创建用于运行作业中尚未指定容器的任何步骤的容器。 如有步骤同时使用脚本和容器操作,则容器操作将运行为同一网络上使用相同卷挂载的同级容器。
若不设置 container
,所有步骤将直接在 runs-on
指定的主机上运行,除非步骤引用已配置为在容器中运行的操作。
Note
用于容器中的 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
选项”。
Warning
不支持 --network
和 --entrypoint
选项。