xet*_*a11 4 teamcity continuous-integration build docker
我为我的 Teamcity 管道创建了一个新版本。我第一次使用 Docker buildstep。在我设置好一切之后,我意识到构建代理似乎还没有准备好。
我知道我的代理似乎还没有准备好使用 docker 进行构建,但实际上没有人告诉我如何做到这一点。我阅读了官方指南,但没有说明如何将 docker 实际安装到我的代理中(如果这是解决问题的方法)。
有人可以告诉我我必须做什么才能让它工作吗?
编辑
@Senior Pomidor 帮助我更近了一步。我在 docker run 命令中添加了他的第一个例子
docker run -it -e SERVER_URL="<url to TeamCity server>" \
--privileged -e DOCKER_IN_DOCKER=start \
jetbrains/teamcity-agent
Run Code Online (Sandbox Code Playgroud)
这样做之后,我摆脱了屏幕截图中提到的消息。我的代理配置现在具有以下内容:
docker.server.osType linux
docker.server.version 18.06.1
docker.version 18.06.1
Run Code Online (Sandbox Code Playgroud)
但Teamcity 仍然抱怨这条消息:
这让我再次无能为力。
最终解决方案:只需重新启动 teamcity 服务器实例即可解决即将出现的 EDIT2 问题。代理实际上能够运行构建,但 teamcity 无法在不重新启动的情况下意识到这一点。
编辑2
索取资料:
我的 CI 服务器操作系统:
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
Run Code Online (Sandbox Code Playgroud)
运行容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f8e0b04d6a6 jetbrains/teamcity-agent "/run-services.sh" 19 hours ago Up 19 hours 9090/tcp teamcity-agent
20964c22b2d9 jetbrains/teamcity-server "/run-services.sh" 37 hours ago Up 37 hours 0.0.0.0:80->8111/tcp teamcity-server-instance
Run Code Online (Sandbox Code Playgroud)
容器运行:
## Server
docker run -dit --name teamcity-server-instance -v /data/teamcity:/data/teamcity_server/datadir -v /var/log/teamcity:/opt/teamcity/logs -p 80:8111 jetbrains/teamcity-server
## Agent
docker run -itd --name teamcity-agent -e SERVER_URL="XXX.XXX.XXX.XXX:80" --privileged -e DOCKER_IN_DOCKER=start -v /etc/teamcity/agent/conf:/data/teamcity_agent/conf jetbrains/teamcity-agent
Run Code Online (Sandbox Code Playgroud)
构建步骤信息:
TC 限制了配置,因为 TA 没有启动 Docker 守护进程。
您应该通过 -e DOCKER_IN_DOCKER=start 自动启动容器中的 docker 守护进程。此外,docker 守护进程需要 docker 套接字。在 Linux 容器中,如果您需要在构建中使用 Docker 守护程序,您有两个选择:
--privileged 旗帜。在您的容器中运行的新 Docker 守护进程-v docker_volumes:/var/lib/docker 来自主机的 Docker(在这种情况下,您将受益于主机和所有容器之间共享的缓存,但存在安全问题:您的构建实际上可能会损害您的主机 Docker,因此使用它需要您自担风险)在 Linux 容器中,如果您需要在构建中使用 Docker 守护程序,您有两个选择:
例子
docker run -it -e SERVER_URL="<url to TeamCity server>" \
--privileged -e DOCKER_IN_DOCKER=start \
jetbrains/teamcity-agent
docker run -it -e SERVER_URL="<url to TeamCity server>" \
-v /var/run/docker.sock:/var/run/docker.sock \
jetbrains/teamcity-agent
Run Code Online (Sandbox Code Playgroud)
UPD
docker.server.osType 必需,因为在构建步骤中已设置 linux
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |