TeamCity to Docker

资料来源

jetbrains/teamcity-server
TeamCity服务器 - 强大的持续集成和持续交付,开箱即用
jetbrains/teamcity-agent
TeamCity服务器 - 强大的持续集成和持续交付,开箱即用
jetbrains/teamcity-minimal-agent
TeamCity服务器 - 强大的持续集成和持续交付,开箱即用
TeamCity On-Premises
欢迎来到TeamCity 2022.10的文档--一个用于各种工作流程和开发实践的CI/CD解决方案
JetBrains/teamcity-docker-samples
欢迎来到TeamCity 2022.10的文档--一个用于各种工作流程和开发实践的CI/CD解决方案

内容由deepl翻译jetbrains/teamcity-server而来.请先查看官方文档,以官方文档为主

jetbrains/teamcity-server 翻译

Linux 容器

1
2
3
4
5
docker run --name teamcity-server-instance  \
-v <path-to-data-directory>:/data/teamcity_server/datadir \
-v <path-to-logs-directory>:/opt/teamcity/logs \
-p <port-on-host>:8111 \
jetbrains/teamcity-server

解释:

  • <path-to-data-directory>:是主机目录,作为TeamCity数据目录,TeamCity存储项目设置和构建结果。为全新的启动传递一个空目录。如果没有设置映射,你会在容器关闭时丢失所有的TeamCity设置。
  • <path-to-logs-directory>:是用于存储TeamCity服务器日志的主机目录。映射可以省略,但这样一来,日志会在容器关闭时丢失,这将使问题调查无法进行。

注意:

如果你需要以非root权限运行基于Linux的容器(例如,在使用一些开源容器应用平台时),通过传递一个额外的-u 1000:1000参数来明确设置服务器的内部用户标识。注意,切换到非根用户后,你可能无法对根用户下创建的文件进行写入操作。在这种情况下,运行chown -R 1000:1000 <目录>来改变包含这些文件的目录的所有权。

HTTPS反向代理TeamCity
  • 如果TeamCity作为Nginx或Apache等反向代理服务器的端点,它应该被配置为向终端用户提供安全cookies。
  • 为了实现这一点,你可以在docker运行命令中传递一个额外的-e TEAMCITY_HTTPS_PROXY_ENABLED=true参数。有了这个参数,TeamCity将以一个替代的server-https-proxy.xml配置文件启动,该文件可以启用HTTPS选项。
替代的Tomcat配置

TeamCity有Tomcat J2EE服务器,如果你需要为TomCat提供替代配置,你可以使用额外的参数

1
-v /alternative/path/to/conf:/opt/teamcity/conf 

要获得Tomcat的conf目录的当前内容的样本,可以使用docker cp命令。

Windows 容器

1
2
3
4
5
6
docker run --name teamcity-server-instance
-v <path-to-data-directory>:C:/ProgramData/JetBrains/TeamCity
-v <path-to-logs-directory>:C:/TeamCity/logs
-v <path-to-temp-directory>:C:/TeamCity/temp
-p <port-on-host>:8111
jetbrains/teamcity-server

解释:

见上面的<path-to-ata-directory>和<path-to-logs-directory>描述;<path-to-temp-directory>是临时文件的目录。

注意:

我们还建议为Docker进程分配足够的资源,就像在这个例子中。

1
2
3
4
5
6
docker run --memory="6g" --cpus=4 -e TEAMCITY_SERVER_MEM_OPTS="-Xmx3g -XX:MaxPermSize=270m -XX:ReservedCodeCacheSize=640m" --name teamcity-server-instance
-v <path-to-data-directory>:C:/ProgramData/JetBrains/TeamCity
-v <path-to-logs-directory>:C:/TeamCity/logs
-v <path-to-temp-directory>:C:/TeamCity/temp
-p <port-on-host>:8111
jetbrains/teamcity-server

关于Windows容器中已知问题的细节,可在TeamCity文档中找到。

数据库

除了数据目录外,TeamCity还在一个SQL数据库中存储用户集和构建结果。默认情况下,TeamCity服务器使用一个内部数据库,存储在数据目录下的文件系统中。然而,生产使用需要一个外部数据库。要在生产中使用服务器,请确保审查并应用建议

建立代理

你将需要至少一个TeamCity代理来运行构建。查看jetbrains/teamcity-agentjetbrains/teamcity-minimal-agent图片。要了解如何一次性启动TeamCity服务器和代理,请看这些Docker Compose样本

附加命令

当你需要向服务器进程传递额外的环境变量时,使用常规的-e选项。例如,要传递TEAMCITY_SERVER_MEM_OPTS环境变量,使用。

1
2
3
4
5
6
docker run --name teamcity-server-instance   \
-e TEAMCITY_SERVER_MEM_OPTS="-Xmx2g -XX:MaxPermSize=270m -XX:ReservedCodeCacheSize=640m" \
-v <path-to-data-directory>:/data/teamcity_server/datadir \
-v <path-to-log-directory>:/opt/teamcity/logs \
-p <port-on-host>:8111 \
jetbrains/teamcity-server

要运行 maintainDB 脚本(例如用于服务器备份),请停止正在运行的容器并从主机上执行以下命令。

1
2
3
4
5
6
docker run -it --name teamcity-server-instance  \
-v <path-to-data-directory>:/data/teamcity_server/datadir \
-v <path-to-log-directory>:/opt/teamcity/logs \
-p <port-on-host>:8111 \
jetbrains/teamcity-server \
"/opt/teamcity/bin/maintainDB.sh" "backup"

请确保所有本地系统路径与主服务器启动命令保持一致。要改变Tomcat容器内TeamCity应用的上下文,请将-e TEAMCITY_CONTEXT=/context传给docker run命令。默认的是ROOT,意味着服务器将在http://host/

升级TeamCity

请务必检查通用的TeamCity升级说明。如果你没有对容器做任何改动,你可以直接停止运行中的容器,通过常规命令拉出一个较新版本的镜像和其中的服务器。如果你改变了镜像,你需要将这些变化复制到新的TeamCity服务器镜像上。一般来说,使用Docker常识来执行升级。

实际操作

1. 拉取镜像

docker pull jetbrains/teamcity-server

2. 创建文件夹

在合适的位置创建如下文件夹

  • conf: 配置文件
  • data: TeamCity数据目录
  • logs: 日志文件
  • temp: 缓存文件

3. 复制配置文件

  1. docker images: 查看teamcity镜像[IMAGE ID]
  2. docker run [IMAGE ID] -d: 通过镜像id运行
  3. docker ps -a: 查看运行的镜像获取[CONTAINER ID]
  4. docker cp [CONTAINER ID]:/opt/teamcity/conf 要存放conf文件的位置: 拷贝配置文件
  5. dockers stop [CONTAINER ID]: 停止镜像 xaat-861223d9-bea5-43e6-b10d-61e09be9bbdd
  6. docker rm [CONTAINER ID]: 删除镜像

4. 执行

(1). 拉取jetbrains/teamcity-agent
1
docker pull jetbrains/teamcity-agent
(2). 创建docker 网络
1
docker network create teamcity
(3). 编写docker-compose.yml

注意: 请确保docker已经安装此扩展,如为安装可以访问这里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
version: "3"

networks:
teamcity:
external: true

services:
server:
image: jetbrains/teamcity-server:latest
networks:
- teamcity
ports:
- "8111:8111"
volumes:
- .\目标地址\teamcity\data:/data/teamcity_server/datadir
- .\目标地址\teamcity\logs:/opt/teamcity/logs
- .\目标地址\teamcity\conf:/opt/teamcity/conf
- .\目标地址\teamcity\temp:/opt/teamcity/temp
mem_limit: 2g

agent:
image: jetbrains/teamcity-agent:latest
networks:
- teamcity
volumes:
- .\目标地址\teamcity\teamcity_agent\conf:/data/teamcity_agent/conf
- .\目标地址\teamcity\teamcity_agent\work:/opt/buildagent/work
- .\目标地址\teamcity\teamcity_agent\system:/opt/buildagent/system
environment:
- SERVER_URL=server:8111
- TEAMCITY_SERVER_MEM_OPTS=-Xmx2g -XX:ReservedCodeCacheSize=350m
- AGENT_NAME=teamcity-agent
depends_on:
- server

解释:

  • teamcity-agent环境变量
    • SERVER_URL– 团队城市服务器代理将连接到的网址
    • AGENT_NAME–(可选)TeamCity UI 中的代理名称,如果省略,则自动生成
    • AGENT_TOKEN–(可选)代理授权令牌,如果未设置,则应通过 TeamCity UI 对代理进行授权。
    • OWN_ADDRESS–(可选,仅限 Linux)构建代理绑定到的 IP 地址,自动检测
    • OWN_PORT–(可选,仅限 Linux)端口构建代理绑定到,默认情况下为 9090
    • DOCKER_IN_DOCKER– (可选,仅限 Linux)在 Docker 中运行 Docker。
  • 重新启动生成代理容器时,它会重新签出生成的源。若要避免这种情况,应传递几个其他选项,以在重新启动之间保留生成代理状态:
    • 保留检出源 (-v /opt/buildagent/work:/opt/buildagent/work)
    • 保留内部生成代理缓存 (-v /opt/buildagent/system:/opt/buildagent/system)
(4). 运行

注意: 请在 docer-compose.yml 文件根目录下下执行此命令

1
docker compose up -d

查看运行情况

1
2
3
docker ps -a
docker logs [CONTAINER ID]
docker logs [CONTAINER ID]

TeamCity to Docker
https://crudclass.github.io/2022/10/29/docker/TeamCity/
作者
Zero
发布于
星期六, 十月 29日 2022, 3:42 下午
许可协议