跳至主要内容

在容器中运行作业

使用容器运行作业中的步骤。

概述

使用jobs.<job_id>.container 创建一个容器来运行作业中任何尚未指定容器的步骤。如果您有使用脚本和容器操作的步骤,则容器操作将作为同一网络上具有相同卷挂载的同级容器运行。

如果您未设置container,则除非步骤引用配置为在容器中运行的操作,否则所有步骤都将在runs-on指定的宿主上直接运行。

注意

容器内run步骤的默认shell为sh,而不是bash。这可以通过jobs.<job_id>.defaults.runjobs.<job_id>.steps[*].shell来覆盖。

示例:在容器内运行作业

YAML
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设置usernamepasswordmap。凭据与您提供给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选项。