TeamCity On-Premises 2024.03 Help

容器包装器

Container Wrapper 扩展允许在指定的 Docker / LXC 镜像中运行构建步骤。 镜像是通过 docker pullpodman pull 命令拉取的,具体取决于在运行构建的代理上安装了哪种容器管理器。

TeamCity可以匿名拉取容器(如果镜像公开可用)或登录到注册表后拉取(用于私有注册表或避免匿名下载时的DockerHub惩罚)。 如果您需要 TeamCity 在提取镜像之前对注册表进行授权,请按照以下步骤配置 Docker 支持 构建功能:

  1. 在您的项目设置中,从侧边栏选择 Connections ,并按照 配置与 Docker 的连接 中的指示,为您的项目添加新的 Docker 或 Podman 连接。

  2. 在您的构建配置设置中,按照 Docker 支持 中的说明配置 Docker 支持 构建功能,添加在上一步中创建的连接。

该扩展适用于以下的 构建运行程序

容器设置

在构建步骤设置的 Container Settings 部分中,您可以指定一个将用于运行构建步骤的镜像。 一旦指定了镜像,以下选项即可变得可用。

设置

描述

在容器内运行步骤

Docker Hub或其他注册处所述的镜像名称。 TeamCity 将从指定的镜像启动一个容器,并尝试在此容器内运行此构建步骤。

例如, ruby:2.4 将在 Ruby 容器中运行步骤,版本 2.4。

如果运行构建的代理安装了 Podman 而非 Docker,可以使用完整的镜像名称(例如, docker.io/library/alpine:latest ,而非 alpine:latest ),或确保在构建代理机器上的 registries.conf 文件中指定了注册表域。 另见:如何管理 Linux 容器注册表

镜像平台

选择 <Any>(默认),Linux,或 Windows。 请注意,Podman 不支持 Windows 镜像。

明确拉取镜像

如果启用,将在启动 docker run/ podman run 命令之前,通过 docker pull <imageName>/ podman pull <imageName 从 Hub 仓库拉取镜像。

额外的运行参数

允许为 docker runpodman run 命令指定额外选项。 默认参数是 --rm ,但您可以提供更多,例如,添加额外的卷映射。

容器包装器如何运行

从技术上讲,构建运行程序的命令被包装在一个 shell 脚本中,这个脚本在容器内部执行,使用 docker runpodman run 命令。 要查看已启动进程的详细信息、脚本文本等,请在 详细模式 中检查构建日志。

容器包装器将路径映射到构建检出目录以及其他代理目录,如 buildAgent/work ,以便所有这些目录在构建代理和容器包装器 内部具有相同的位置。

如果进程环境包含由之前的 Docker Compose 构建步骤设置的 TEAMCITY_DOCKER_NETWORK 环境变量,那么这个网络将会通过 --网络 开关传递给已启动的 docker run 命令。

在 Linux 上恢复文件所有权

使用 Docker 的构建代理在每一步运行在容器内部的末尾执行 chown 命令,以恢复 buildAgent 用户对检出目录的访问权限。 此操作可以防止与构建代理无法删除不再需要的由 root 所有权创建的容器文件相关的潜在问题。 使用 Podman 的代理不执行此步骤。

默认情况下,TeamCity 代理使用 Docker Hub 的 busybox 镜像来运行 chown 命令。 您可以使用 teamcity.internal.docker.busybox 参数指定一个替代的镜像名称,无论是在 buildAgent.properties 文件还是在 构建配置参数 中。

环境变量处理

TeamCity 将环境变量从 构建配置 传递到 Docker 或 Podman 进程,但它不会从 构建代理 传递环境变量,因为它们可能与容器环境无关。 在构建日志的 Verbose mode 中,可以查看传递的环境变量列表。

设置 Image 入口点

如果一个 Docker 镜像没有定义一个 ENTRYPOINT ,您仍然可以使用从命令行运行一个带有 ENTRYPOINT 的容器:

  1. 添加一个 Command Line 构建步骤。

  2. Run 模式设置为 可执行的带参数

  3. 命令可执行 字段中,指定目标容器中 ENTRYPOINT 的完整路径。

  4. Docker 设置 中,指定容器的名称。

TeamCity 将使用定义的 ENTRYPOINT 启动指定的 Docker 镜像。

设置容器用户

如果您的步骤在本地存储上创建或访问文件或文件夹,请确保这些操作是在具有足够权限的正确用户下执行的。 为了实现这一目标,将 --user=<value> 添加到跑步者的 额外运行参数 中。

steps { script { // ... dockerImage = "python:windowsservercore-ltsc2022" dockerRunParameters = "--user=1001" } }

主机的 UID 可以通过 env.UID 参数 ( --user=%env.UID%) 获取。

最后修改日期: 16日 7月 2024年