首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Teamcity构建在构建代理配置为Docker之前不会运行?

Teamcity构建在构建代理配置为Docker之前不会运行?
EN

Stack Overflow用户
提问于 2019-04-11 11:08:05
回答 2查看 5.5K关注 0票数 4

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

据我所知,我的经纪人似乎还没有准备好用码头来建造,但是没有人真正告诉我你是如何做到的。我阅读了官方指南,但没有提到如何将码头安装到我的代理中(如果这是解决问题的方法)。

有人能告诉我要怎么做才能让它开始工作吗?

编辑

@ Pomidor高级教授帮助我走近了一步。我将他的第一个示例添加到了docker命令中。

代码语言:javascript
复制
docker run -it -e SERVER_URL="<url to TeamCity server>"  \
    --privileged -e DOCKER_IN_DOCKER=start \    
    jetbrains/teamcity-agent 

这样做之后,我去掉了屏幕截图中提到的消息。我的代理配置现在有以下内容:

代码语言:javascript
复制
docker.server.osType     linux
docker.server.version    18.06.1
docker.version   18.06.1

但是仍然在抱怨这个消息:

这让我又一次不知所措。

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

EDIT2

索取资料:

我的CI服务器操作系统:

代码语言:javascript
复制
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"

正在运行的集装箱:

代码语言:javascript
复制
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

集装箱由以下方式运行:

代码语言:javascript
复制
## 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

构建步骤信息:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-11 13:44:07

TC限制了配置,因为TA没有启动Docker守护进程。

您应该通过-e DOCKER_IN_DOCKER=start来自动启动容器中的停靠守护进程。另外,坞守护进程需要停靠套接字。在Linux容器中,如果需要构建内部可用的Docker守护进程,则有两个选项:

  • --privileged旗在容器中运行新的Docker守护进程
  • 来自主机的-v docker_volumes:/var/lib/docker Docker (在本例中,您将受益于主机和所有容器之间共享的缓存,但存在一个安全问题:您的构建可能实际上会损害您的主机码头,因此使用它将承担您自己的风险)

在Linux容器中,如果需要构建内部可用的Docker守护进程,则有两个选项:

  1. 来自主机的Docker (在本例中,您将受益于主机和所有容器之间共享的缓存,但存在一个安全问题:您的构建可能实际上会损害您的主机码头,因此使用它将承担您自己的风险)

示例

代码语言:javascript
复制
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 

UPD

需要docker.server.osType,因为在构建步骤中设置了linux

票数 8
EN

Stack Overflow用户

发布于 2020-06-19 21:34:51

对我起作用的是更改/var/run/docker.sock代理容器的权限。

在容器内运行一个shell:docker exec -u 0 -it <CONTAINER_ID> bash

更改对接器套接字的权限:chmod 666 /var/run/docker.sock

验证码头容器是否使用套接字:docker version

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55631068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档