使用gitlab构建基于docker的持续集成(一)
使用gitlab构建基于docker的持续集成(一)
开篇
关于CI,我的简单理解就是,项目的一键编译+测试+部署发布,然后可以重复利用这个过程,你只要一提交代码,项目就发布完成了。
而docker,可以给编译,测试,部署提供环境支撑,简单来说,就是比传统CI更方便,简化了CI过程中的环境问题。
本来是有想法是部署到公网,让大家试一下效果的,但是由于部署gitlab非常消耗,我的小服务器抗不住,只好把过程记录下来,给大家一个参考,也给自己做个备忘。
先贴几张效果图吧,有个整体印象。



本文大致是分三部分,基础准备,Centos主机上的配置,win主机的配置,最后发布测试。
整体环境规划
- 本机(开发机):win10系统
- 开启Hyper-v
- 安装docker for windows
- vs2017
- 使用自签名证书的话要导入证书
- hosts设置域名:gitlab.luna.cn 映射gitlab服务器上
- gitlab服务器:Centos 7.3
- docker
- docker-compose
- 导入CA证书
- 设置hosts设置域名:gitlab.luna.cn 映射本机ip
- gitlab-runner:Centos7.3 (我把它部署到了gitlab服务器上了,规范的做法是应该分开部署)
- docker
- docker-compose
准备工作
CA证书
我提供一个我用的证书,证书的域名为:gitlab.luna.cn
创建两个文本,然后复制下面代码,改文件名即可。
gitlab.luna.cn.crt
-----BEGIN CERTIFICATE-----
MIIDWzCCAkOgAwIBAgIBATANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDEw5naXRs
YWIubHVuYS5jbjAgFw0xODA0MTMxNjU2MDBaGA8yMTE4MDQxMzE2NTYwMFowGTEX
MBUGA1UEAxMOZ2l0bGFiLmx1bmEuY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQDfNr+I2/H7blGFJfpoN4DM3Z4eRolH439ElKkdIj99XiXQ0U2mIm57
LaFORPGPh0ESqT4qKWSeIyQvPInBb97ACbVj30iqBoQPC919bHOjQpebp7L/8YMH
ZMqA7Njaq+a397d6bbtMTKX0nixmTSqqrohJhK6vvdKgjLhK1neLDmGw9wJwh40W
IuOV8u/gQqGGnKmzJieMufowTcSPm9nM0rACYpUAdGCpMp1MFxpkRKd62LKzx36j
uaXKmwiLo9RsKlPGoZbyOjZhkEw2F0TQDSno5CKJIsO+GqK2Piu2o55bmhe8DOWv
+v3BfGaM0Ne5injmCE+SUs7baInS7TqFAgMBAAGjgaswgagwDwYDVR0TAQH/BAUw
AwEB/zAdBgNVHQ4EFgQUtX0LUdEaIwJnFSIIVNwNBRX6Js8wCwYDVR0PBAQDAgGG
MDsGA1UdJQQ0MDIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUF
BwMEBggrBgEFBQcDCDAZBgNVHREEEjAQgg5naXRsYWIubHVuYS5jbjARBglghkgB
hvhCAQEEBAMCAPcwDQYJKoZIhvcNAQELBQADggEBACYKfo4KacODb202yW+GFuf1
4jzUtM7xVp9KfDbKfitpYJETNDouDoauZRmjJHHqTOMXlnVQjkgC01o5t/QcCT/X
siV+/5aqj+44Ww3POd9CizVId1luWC44UZ+tJxJmQqgn5fckH7SE5k8+tZrzQgZa
wbqE37mnCauWMTcLrUxEy36m4yQjrn5XCk2LRZt60kU2q/CbOyR7FCzF3Dv0+99r
OfmA52THHlFxyoP4E20cEH/bVZ11wyTopCR9B7yzQykkJ3jeNylwEOWPnhDOk4+t
ZRedShv32tHM+XT9wuQ0+YgV+jjcM3PfqfhDSunln/i0dKHnkMRZyqLbSE4pOo8=
-----END CERTIFICATE-----
gitlab.luna.cn.key
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA3za/iNvx+25RhSX6aDeAzN2eHkaJR+N/RJSpHSI/fV4l0NFN
piJuey2hTkTxj4dBEqk+KilkniMkLzyJwW/ewAm1Y99IqgaEDwvdfWxzo0KXm6ey
//GDB2TKgOzY2qvmt/e3em27TEyl9J4sZk0qqq6ISYSur73SoIy4StZ3iw5hsPcC
cIeNFiLjlfLv4EKhhpypsyYnjLn6ME3Ej5vZzNKwAmKVAHRgqTKdTBcaZESnetiy
s8d+o7mlypsIi6PUbCpTxqGW8jo2YZBMNhdE0A0p6OQiiSLDvhqitj4rtqOeW5oX
vAzlr/r9wXxmjNDXuYp45ghPklLO22iJ0u06hQIDAQABAoIBAGX8pdbqZ83xwd2M
VLV5Zqg0OiKrJ95o26WCJyLgmxG1CqI2f7wAz2oIl0MjzRs/OURFf9nTv91hQQ80
Idz4OFaWGQLg6lqFT6FwUmsUOmHF829zWB4JQ00FiGEP1qVTFb/It1SA/qsF+m2i
N7cmWvBRfoPY09gIa0xf/3RyOXyW4ynzxN6OGUmXK7uuGmjJsG+yYUcIkpi2nVb9
WhCB06sNZ/wLWhg9hHZTaiC/DQ3WmFp2pZCI8qoY5jD3rx0yKJmqrShYkphKHYuM
9AnyRoMLTUJZIzHuiysbQMq50qunlEIz9mQdAvKH+ObP+AqXJSpyQ/11Xk45YqQy
aJwP2wECgYEA783ihXtg7vS1Ymj7IRN07i0oXm16M+j7wgq/PpI/FJqL7S2Es3Ot
3lqEsX4V5/HLgAwsH2kcNelkqmSzLE6CwxktmFqj16MBxGkteI5T0O8QE4+KcZFh
M3JIMkuwPjHoQP9SoDfxblVOm01y0RqDR39Speh3ZQxZU/eg7hjiU+0CgYEA7koF
yxzLUAbjB2jMHsMxejpyk2qFOgGjW2Poy38kPapeID7q9dUSUXDgqnPZ0hsrv0I5
8jrh+OK4+Nn9MtpJ2XtP116Jc6hvUOMplZALiU8oCU5IwCAGh6oVOiDfENTe7jRV
wZYiYdBa5cfhprp3SThx1gCQVja1SJJ77E7u3fkCgYEApoYsVVE2IPnhs3L/YRqn
ynWlYN1ZTQ7vNPJNl9/q2h3wKUXArvUXuh7VooPSJn1sOYE6ap2NL4rhksnW+l+S
wnSLiw72U9oocgIvx1XesmowmcTF+NNh0l378KFKxAXYKLqk4Am5KEspCQOhRb/J
hi7Ob9OchZkrtvlw0aaKFIkCgYEAtUcI60EHhuUGV7+o8YorHMJUIcO6gKt4W/FA
y3b42hS+sKdM1iH3Yo+Nyv6Bae6TtFesf5O+Dzpj36Tuk34vCk1eKwjXZm5v6Mg3
/Xjs3dOjMJkmjUqPzSteJK+XI1XeFrcnujL+Cw2X6RDLoKxgTQqsx1H8fCn4dbJC
pj5SR/kCgYA3dJD4p66xs7NxreppPCiuJvdTcK5GNseLy0ZK/EIJhAaZd5eB43h2
TwBWieY8hDEgeqO52Y4lwLVEPFLfnDvVhy5Vt21RY4DkubrLVrT9Qfi9FXoZDv1K
FopMObRAdaaxh9h5SHjIUg6ABf5owQsB1y+cmaGYHIDkLttOmXVJEA==
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDWzCCAkOgAwIBAgIBATANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDEw5naXRs
YWIubHVuYS5jbjAgFw0xODA0MTMxNjU2MDBaGA8yMTE4MDQxMzE2NTYwMFowGTEX
MBUGA1UEAxMOZ2l0bGFiLmx1bmEuY24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQDfNr+I2/H7blGFJfpoN4DM3Z4eRolH439ElKkdIj99XiXQ0U2mIm57
LaFORPGPh0ESqT4qKWSeIyQvPInBb97ACbVj30iqBoQPC919bHOjQpebp7L/8YMH
ZMqA7Njaq+a397d6bbtMTKX0nixmTSqqrohJhK6vvdKgjLhK1neLDmGw9wJwh40W
IuOV8u/gQqGGnKmzJieMufowTcSPm9nM0rACYpUAdGCpMp1MFxpkRKd62LKzx36j
uaXKmwiLo9RsKlPGoZbyOjZhkEw2F0TQDSno5CKJIsO+GqK2Piu2o55bmhe8DOWv
+v3BfGaM0Ne5injmCE+SUs7baInS7TqFAgMBAAGjgaswgagwDwYDVR0TAQH/BAUw
AwEB/zAdBgNVHQ4EFgQUtX0LUdEaIwJnFSIIVNwNBRX6Js8wCwYDVR0PBAQDAgGG
MDsGA1UdJQQ0MDIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUF
BwMEBggrBgEFBQcDCDAZBgNVHREEEjAQgg5naXRsYWIubHVuYS5jbjARBglghkgB
hvhCAQEEBAMCAPcwDQYJKoZIhvcNAQELBQADggEBACYKfo4KacODb202yW+GFuf1
4jzUtM7xVp9KfDbKfitpYJETNDouDoauZRmjJHHqTOMXlnVQjkgC01o5t/QcCT/X
siV+/5aqj+44Ww3POd9CizVId1luWC44UZ+tJxJmQqgn5fckH7SE5k8+tZrzQgZa
wbqE37mnCauWMTcLrUxEy36m4yQjrn5XCk2LRZt60kU2q/CbOyR7FCzF3Dv0+99r
OfmA52THHlFxyoP4E20cEH/bVZ11wyTopCR9B7yzQykkJ3jeNylwEOWPnhDOk4+t
ZRedShv32tHM+XT9wuQ0+YgV+jjcM3PfqfhDSunln/i0dKHnkMRZyqLbSE4pOo8=
-----END CERTIFICATE-----
虚拟机系统:安装Centos7.3
安装的时候尤其要注意:
- 开启网络,不开启,后续需要进到虚拟机开启,比较麻烦。
- 设置时区,不设置的话,时间会错误。
- 设置密码,root的密码,不说你也知道。
- 最小安装,就是默认,不要去选其他的乱七八糟的预装系统。
最后,要保证虚拟机能联网,主机能ping通虚拟机就可以了。
3.设置Centos的host
1.获取Centos主机的IP
[root@gitlab etc]# ip addr
2.找eth0的地址,我这里找到ip为:172.24.162.122
3.设置hosts
[root@gitlab etc]# vi /etc/hosts
4.添加一条记录
172.24.162.122 gitlab.luna.cn
5.你也可以把hostname也一起改了。
5.退出保存即可。
6.ping一下域名,看一下是否可以通。
设置windows的host
1.打开C:\Windows\System32\drivers\etc\hosts文件
2.添加记录172.24.162.122 gitlab.luna.cn
3.最好重启。
4.尝试ping一下域名,是否能通,能通就行。
Centos上docker安装
获取docker官方源
yum -y install yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
如果获取不到源,可以用阿里源,vi /etc/yum.repos.d/docker-ce.repo替换掉内容为下面的
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker
#刷新yum源
yum makecache fast
#安装docker-ce
yum -y install docker-ce
最后最好配置一下docker仓库源,不然下载镜像会很慢。我配置的阿里云的源。
https://cr.console.aliyun.com/?spm=5176.1971733.0.2.6c045aaaZ9Js2o#/accelerator
Centos上docker-compose安装
这里有点坑,我推荐的是安装一个python3和python2共存环境,然后从github上直接下载docker-compose
因为我网上看到的是python3支持yml文件的中文注释。
以下是参考命令,不要复制全部运行,会有问题
安装python3,并且和Python2.7.5共存
mv /usr/bin/python2.7 /usr/bin/python2.7.5 # 保留默认版本python为python2.7.5
ln -s /usr/bin/python2.7.5 /usr/local/bin/python2.7.5 # 创建软连接
#yum修改
ll /usr/bin/yum* # 查看/usr/bin/目录下所有yum文件(7个)头部
vi /usr/bin/yum* # 修改/usr/bin/目录下所有yum文件(7个)头部
#!/usr/bin/python —> #!/usr/bin/python2.7.5
vi /usr/libexec/urlgrabber-ext-down # 修改/usr/libexec/目录下 urlgrabber-ext-down头部
#!/usr/bin/python —> #!/usr/bin/python2.7.5
#firewall也要修改
ll /usr/bin/firewall* #查看,2个
vi /usr/bin/firewall* #修改
vi /usr/sbin/firewalld #修改
#编译环境
yum -y groupinstall 'Development Tools'
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel
#下载python3
yum -y install wget
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
#编译,就不一步一步解释了
tar zxvf Python-3.6.2.tgz
cd Python-3.6.2
./configure
make all
make install
make clean
make distclean
rm -rf /usr/bin/python
rm -rf /usr/bin/python3
rm -rf /usr/bin/python3.6
ln -s /usr/local/bin/python3.6 /usr/bin/python
ln -s /usr/local/bin/python3.6 /usr/bin/python3
ln -s /usr/local/bin/python3.6 /usr/bin/python3.6
/usr/bin/python -V
/usr/bin/python3 -V
/usr/bin/python3.6 -V
rm -rf /usr/local/bin/python
rm -rf /usr/local/bin/python3
ln -s /usr/local/bin/python3.6 /usr/local/bin/python
ln -s /usr/local/bin/python3.6 /usr/local/bin/python3
python -V
python3 -V
python3.6 -V
下载docker-compose
curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
如果可以使用docker-compose命令基本算安装成功了吧。
window下安装docker for windows就可以了,包含docker-compose
Centos7.3导入CA证书
yum install ca-certificates
update-ca-trust force-enable
#拷贝证书,foo.crt只是例子
cp foo.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust extract
window10导入CA证书
直接打开.crt证书





导入之后打开证书应该是这样的

补充
最后科普一个Centos开机启动docker的方法,网上找来的怎么做开机启动脚本
1.chmod +x /etc/rc.d/rc.local
2.vi /etc/rc.d/rc.local 添加/root/script/autostart.sh
3.vi /root/script/autostart.sh 添加/bin/systemctl start docker
使用gitlab构建基于docker的持续集成(一)的更多相关文章
- 使用gitlab构建基于docker的持续集成(三)
使用gitlab构建基于docker的持续集成(三) gitlab docker aspnetcore 持续集成 构建发布思路: aspnetcore 下的dockerfile编写 发布docker- ...
- 使用gitlab构建基于docker的持续集成(二)
使用gitlab构建基于docker的持续集成(二) gitlab docker aspnetcore Centos配置gitlab镜像并且启动 Centos配置防火墙 windows上访问gitla ...
- 【持续集成】GitLab CI + Docker 实现持续集成
GitLab CI + Docker 实现持续集成 一.持续集成(Continuous Integration, CI)的基本概念 概述 在传统软件的开发中,代码的集成工作通常是在所有人都将工作完成后 ...
- Docker+Jenkins持续集成环境(5): android构建与apk发布
项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个类似蒲公英的app托管平台. andro ...
- 学习笔记——Maven实战(四)基于Maven的持续集成实践
Martin的<持续集成> 相信很多读者和我一样,最早接触到持续集成的概念是来自Martin的著名文章<持续集成>,该文最早发布于2000年9月,之后在2006年进行了一次修订 ...
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...
- Maven实战(四)——基于Maven的持续集成实践
Martin的<持续集成> 相信非常多读者和我一样.最早接触到持续集成的概念是来自Martin的著名文章<持续集成>.该文最早公布于2000年9月,之后在2006年进行了一次修 ...
- Docker+Jenkins持续集成
Docker+Jenkins持续集成 使用etcd+confd实现容器服务注册与发现 前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇 ...
- 【K8S】基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇)
写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 服务器规划 IP 主机名 节点 操作 ...
随机推荐
- docker(10)上传本地镜像到镜像仓库
前言 之前通过docker搭建过jenkins+python3环境,如果想要在不同的机器上搭建一样的环境,就可以将之前搭建的镜像上传到镜像仓库,这样方便在不同的机器上快速搭建同一套环境. 如果公开的话 ...
- 树的直径&树的重心
树的直径 定义 那么树上最远的两个点,他们之间的距离,就被称之为树的直径. 树的直径的性质 1. 直径两端点一定是两个叶子节点. 2. 距离任意点最远的点一定是直径的一个端点,这个基于贪心求直径方法的 ...
- C#遇见C++的江湖 不行!得不到就干掉
C# VS C++ C#代码遇见了非托管dll如何处理 问题:托管与非托管,兼容? 方法一:DllImport 托管调试助手 "PInvokeStackImbalance" Me ...
- [HDU4734] F(x)(数位dp+优化)
>传送门<题意:对于一个有n位(这n位从高位到低位分别是An,An-1,An-2 ... A2,A1)的十进制数,我们定义它的权值F(x)=An*2n-1 + An-1*2n-2 + .. ...
- windows10与linux进行ftp遇到550 Failed to change directory及553 Could not creat file
第一个原因: 没有权限,可以使用带有l参数的ls命令来看文件或者目录的权限 ls -l 解决:给本地用户添加一个可写权限 chmod +w /home/student ##给对应的本地用户添加一个可写 ...
- AtCoder Beginner Contest 163
比赛链接:https://atcoder.jp/contests/abc163/tasks A - Circle Pond 题意 由半径输出圆周长. 代码 #include <bits/stdc ...
- zjnu1762 U (线段树)
Description Mirko is hungry as a bear, scratch that, programmer and has stumbled upon a local restau ...
- Codeforces Round #496 (Div. 3) E1. Median on Segments (Permutations Edition) (中位数,思维)
题意:给你一个数组,求有多少子数组的中位数等于\(m\).(若元素个数为偶数,取中间靠左的为中位数). 题解:由中位数的定义我们知道:若数组中\(<m\)的数有\(x\)个,\(>m\)的 ...
- HTTP笔记2--简单的HTTP 协议
HTTP概念 HTTP用于客户端和服务器之间的通信 客户端:请求访问文本或图像等资源的一端 服务器端而提供资源响应的一端 通过请求和响应的交换达成通信 HTTP 协议规定,请求从客户端发出,最后服务器 ...
- K8S(09)交付实战-通过流水线构建dubbo服务
k8s交付实战-流水线构建dubbo服务 目录 k8s交付实战-流水线构建dubbo服务 1 jenkins流水线准备工作 1.1 参数构建要点 1.2 创建流水线 1.2.1 创建流水线 1.2.2 ...