docker - 在使用 Docker 配置构建代理之前,Teamcity Build 不会运行?

标签 docker build continuous-integration teamcity

我为我的 Teamcity 管道创建了一个新版本。我第一次使用 Docker buildstep。在我设置好一切之后,我意识到构建代理似乎还没有准备好。

enter image description here

我知道我的代理似乎还没有准备好与 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 

这样做后,我摆脱了屏幕截图中提到的消息。我的代理配置现在具有以下内容:
docker.server.osType     linux
docker.server.version    18.06.1
docker.version   18.06.1

但是 Teamcity 仍然提示这条消息:

enter image description here

这让我再次无能为力。

最终解决方案 :
只需重新启动 teamcity 服务器实例即可解决即将出现的 EDIT2 问题。代理实际上能够运行构建,但 teamcity 无法在不重新启动的情况下意识到这一点。

编辑2

索取资料:

我的 CI 服务器操作系统:
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"

运行容器:
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

容器运行:
## 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


构建步骤信息:

enter image description here
enter image description here
enter image description here

最佳答案

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(在这种情况下,您将受益于主机和所有容器之间共享的缓存,但存在安全问题:您的构建实际上可能会损害您的主机 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 
    
    UPDdocker.server.osType需要,因为在构建步骤中设置了 linux

    关于docker - 在使用 Docker 配置构建代理之前,Teamcity Build 不会运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55631068/

    相关文章:

    docker - 连接到 docker 容器中正在运行的 Erlang 应用程序版本

    docker - Dockerfile 中的桥接网络连接

    windows - sublime text 2 控制台仅显示 gruntjs 输出的第一行

    asp.net - tfspreview (visualstudio) 可以发布到私有(private) IIS Web 应用程序服务器吗?

    git - AzureDevOps YAML管道存储库资源 `ref`回退

    google-cloud-platform - 在不破坏构建日志的情况下并行化谷歌云构建步骤

    docker - docker 镜像存储在本地机器的什么位置

    docker - 无法在 swarm 撰写 yaml 文件中使用用户定义的桥

    android - Android studio 3.2中Build Bundle Option的使用

    c# - 在框架 "netcoreapp2.0"和 RID "debian.8-x64"上使用 PostSharp 构建错误