gocd是一个持续集成的工具,可视化效果非常好

运行gocd-server

1
2
3
4
5
docker run -d --name server 
-p8153:8153 -p8154:8154
-v /path/to/godata:/godata
-v /path/to/go:/home/go
gocd/gocd-server:v18.1.0

我们就可以通过http://go-server-ip:8153来访问gocd-server的web了

运行gocd-agent

1
2
3
4
5
6
7
docker run -d --name gocd 
-e AGENT_AUTO_REGISTER_KEY=53f57d90-c749-4758-b430-5af341117b0e
-e AGENT_AUTO_REGISTER_RESOURCES=diagnosis,bj
-e AGENT_AUTO_REGISTER_ENVIRONMENTS=bj
-e AGENT_AUTO_REGISTER_HOSTNAME=diagnosis_bj
-e GO_SERVER_URL=https://go-server-ip:8154/go
gocd/gocd-agent-centos-7:v18.1.0

其中AGENT_AUTO_REGISTER_KEY是在gocd-server的配置中。
执行完之后,就可以在web中看到添加的agent。

安装插件

1
2
cd /path/to/godata/plugins/external
wget https://github.com/gocd-contrib/script-executor-task/releases/download/0.3/script-executor-0.3.0.jar

DOOD

我们通常希望在agent中执行docker命令在宿主中建立镜像运行容器网上大家把这种技术称之为DOOD(docker outside of docker)。
docker命令只能在root权限下执行,但是gocd的脚本是在go用户下运行的所以会报错,解决办法就是想办法让脚本切换到root下运行脚本,具体办法如下:

创建su文件

su的文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth required pam_wheel.so use_uid
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include syste 大专栏  在Docker中运行gocdm-auth
session include system-auth
session include postlogin
session optional pam_xauth.so

创建dockerfile制作dood-gocd镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM gocd/gocd-agent-centos-7:v18.1.0
RUN yum install -y yum-utils
device-mapper-persistent-data
lvm2
RUN yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
RUN yum install -y docker-ce
RUN yum -y install sudo
RUN echo 'go ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN gpasswd -a go wheel
COPY su /etc/pam.d/su
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

这里的root方案就是在脚本中调用su root切换到root账户,并且取消输入密码。

1
2
3
4
5
6
7
8
9
10
docker build -t gocd-agent-dood .

docker run -d --name gocd 
-e AGENT_AUTO_REGISTER_KEY=53f57d90-c749-4758-b430-5af341117b0e
-e AGENT_AUTO_REGISTER_RESOURCES=diagnosis,bj
-e AGENT_AUTO_REGISTER_ENVIRONMENTS=bj
-e AGENT_AUTO_REGISTER_HOSTNAME=diagnosis_bj
-e GO_SERVER_URL=https://go-server-ip:8154/go
-v /var/run/docker.sock:/var/run/docker.sock
gocd-agent-dood

上面命令里的挂载就是把宿主机的docker.sock挂载到容器中,这样我们就能在gocd-agent-dood的容器中运行dock命名在宿主机上创建镜像运行容器了。

script如下:

1
2
3
4
su - root <<EOF
xxx
xxx
xxx

在Docker中运行gocd的更多相关文章

  1. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  2. .NET Core Web 应用部署到 Docker 中运行

    环境介绍 : 虚拟机:VirtualBox 5.1.6 系 统:Ubuntu 16.04.1 LTS 系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get up ...

  3. docker中运行ASP.NET Core Web API

    在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...

  4. 在Docker中运行torch版的neural style

    相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes 敬请多多关注哈~~~ 在Docker中运行to ...

  5. ASP.NET Core 网站在Docker中运行

    Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...

  6. 在Docker中运行EOS(MAC版)

    在Docker中运行EOS(MAC版) 在Docker中也可以简单快速的构建EOS.IO.笔者在Mac平台下参考官方文档躺了一次河.记录如下: 安装依赖 Docker 版本 17.05或者更高 tes ...

  7. 在docker中运行jenkins实现代码自动发布到测试服务器

    在docker中运行jenkins 用的镜像是apline版:lts-alpine,并设置正确的时区. docker run --name jenkins_master -d \ -p 8081:80 ...

  8. 在Docker中运行纸壳CMS并配置使用MySql

    纸壳CMS是基于ASP.Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. GitHub:https://github.com/ ...

  9. 在docker中运行elasticsearch时go程序无法连接到节点

    错误信息: panic: no active connection found: no Elasticsearch node available 在docker中运行es时,默认启动sniffing  ...

随机推荐

  1. 天融信(NAT)地址转换端口映射配置

    目的地址为公司的公网地址 服务:选择或者自己定义一个端口号,就是要映射到服务器上的那个端口号 目的地址转换为:服务器ip 目的端口转换为:选择定义的服务(端口号) 规则描述:随便写

  2. PAT甲级——1077.Kuchiguse(20分)

    The Japanese language is notorious for its sentence ending particles. Personal preference of such pa ...

  3. 工具类BitMap 把网络URL图片转换成BitMap

    代码不复杂,直接把完整代码贴上. 这次是用到很旧的HttpURLConnection,那为什麽会用这个,因为我本来想转回okhttp的,可实在没时间转,项目就已经做下去了,结果转不回来. packag ...

  4. 2)#ifndef和#pragma once

    #################################################################################################### ...

  5. Python实现求1-1000以内的素数

    def func(): for i in range(2,1000): # count表示被整除的次数 count = 0 for j in range(1,i+1): if i%j==0: coun ...

  6. [LC] 398. Random Pick Index

    Given an array of integers with possible duplicates, randomly output the index of a given target num ...

  7. 吴裕雄--天生自然 HADOOP大数据分布式处理:CenterOS 7 多台物理机、虚拟机相互桥连接ping通,并且能够成功连接外网

    选择用于桥接模式下的虚拟交换机,并且要选择对应的有线或者无线的网卡,如果主机是插网线联网的,那就选择有线网卡,如果主机是连无线网络的就选择无线网卡.Realtek PCIe GBE Family Co ...

  8. 吴裕雄--天生自然 Hadoop大数据分布式处理:关闭CenterOS 7防火墙

    使用命令:systemctl status firewalld.service 查看防火墙状态 执行后可以看到绿色字样标注的“active(running)”,说明防火墙是开启状态 使用命令:syst ...

  9. django框架进阶-AJAX-长期维护

    ##################   预备知识---json     ####################### 预备知识,json 什么是json?这是一种数据格式,和语言没有关系, 为什么 ...

  10. 蓝桥杯-PREV45-图形排版

    这是2017年蓝桥杯C组C++的压轴题,拿到之后没什么想法.但是蓝桥杯有部分分.所以直接敲了个大暴力提交上去过了一半的数据.后来想到了DP,但是没能实现出来,感觉还是有问题的.后来看了解题视频发现是预 ...