搭建GitLab+Jenkins(基于docker下)持续集成环境教程

如果您有代购或者代维服务器、PHP网站建设、程序代码修改、系统开发等需求,可以联系我购买付费服务。QQ401313302

搭建GitLab+Jenkins(基于docker下)持续集成环境教程

环境介绍

系统: centos6.9
IP地址: 192.168.20.15
gitlab地址:gitlab.tools.funet8.com:81 [80端口为nginx占用]

jenkins地址: 192.168.20.15:9090 [默认8080端口改为9090]

slave主机:192.168.20.187

安装docker方法略

1.安装gitlab-基于docker

1.下载Gitlab镜像

# docker pull gitlab/gitlab-ce:latest

2.启动Gitlab
用下面的命令启动一个默认配置的Gitlab。如果我们只在本机测试使用的话,将hostname替换为localhost。如果需要让外部系统也能访问的话使用外网IP地址。 端口81端口 444端口

docker run -itd --hostname gitlab.tools.funet8.com -p 444:443 -p 81:80 -p 22:22 --name gitlab --restart always -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab     -v /data/gitlab/data:/var/opt/gitlab -v /etc/localtime:/etc/localtime gitlab/gitlab-ce:latest

3.进入gitlab

docker exec -it gitlab /bin/bash
编辑`/etc/gitlab/gitlab.rb`文件,这是Gitlab的全局配置文件。所有选项都可以在这里配置。

http://gitlab.tools.funet8.com:81/
设置初始密码

4.开启关闭注册

去掉 Sign-up enabled 的对勾
Admin-->settings --> Sign-in Restrictions
Sign-upenbaled  关闭注册功能
Sign-inenbaled  关闭注册登录功能

就可以新建私有git版本库

解决时区问题

启动容器时候加一下 -v /etc/localtime:/etc/localtime,容器里面就会跟host一个时区了
或者:
进入容器
root@gitlab:/# ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

# docker cp /etc/timezone gitlab:/etc/timezone
# docker cp /usr/share/zoneinfo/Asia/Shanghai  gitlab:/etc/localtime

gitlab配置ssh-key

登录账户,到某个git项目

settings ----> Repository ---->Deploy Keys --->expand 
导入本机的key

参考:http://blog.csdn.net/u011054333/article/details/61532271

2.安装jenkins-基于docker

1.创建jenkins文件夹

mkdir /data/jenkins

#在安装jenkins时候,挂在文件夹/data/jenkins/的归属用户id必须是1000,否则会抛出无操作权限异常
chown -R 1000:1000 /data/jenkins

2.启动Jenkins

#由于宿主机8080端口被占用,这里采用9090端口对应docker的8080
docker run -itd -p 9090:8080 -p 50000:50000 --name jenkins --restart always --privileged=true  -v /data/jenkins:/var/jenkins_home jenkins

遇到报错(Tag latest not found in repository jenkins):

报错:由于这个是在centos7下成功,但是在centos6下会报错:
Tag latest not found in repository jenkins
解决办法: 将dns改为 8.8.8.8

遇到报错:iptables failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 50000 -j DNAT --to-destination 172.17.0.1:50000
解决办法:重建docker0网络恢复
http://blog.csdn.net/tengdazhang770960436/article/details/77963182

# docker run -itd -p 9090:8080 -p 50000:50000 --name jenkins --restart always --privileged=true  -v /data/jenkins:/var/jenkins_home jenkins
30d4e87585fc4386cfcf42dd6a64a415d1002caa5648affc2e562306147b2837
Error response from daemon: Cannot start container 30d4e87585fc4386cfcf42dd6a64a415d1002caa5648affc2e562306147b2837: iptables failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 50000 -j DNAT --to-destination 172.17.0.1:50000 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)

解决办法:重建docker0网络恢复
pkill docker 
iptables -t nat -F 
ifconfig docker0 down 
brctl delbr docker0 
docker -d 
service docker restart

防火墙开启9090端口

iptables -A INPUT -p tcp --dport 9090 -j ACCEPT
service iptables save
service iptables restart

3.配置jenkins密码等

访问:
http://IP:9090/
如果要求输入初始密码:
cat /data/jenkins/secrets/initialAdminPassword

4.安装插件

安装插件
根据自己业务需要安装的插件:
1.gitlab hook plugin
2.build authorization token root plugin
3.Dingding[钉钉] Plugin
4.Parameterized Trigger plugin
5.Build Pipeline Plugin
6.Build Automation Management Tool
7.GitLab Plugin
8.Gitlab Authentication plugin
9.Git Parameter

解决时区问题

# docker cp /etc/timezone jenkins:/etc/timezone
# docker cp /usr/share/zoneinfo/Asia/Shanghai  jenkins:/etc/localtime

参考:
Docker安装Jenkins:http://blog.csdn.net/mmd0308/article/details/77206563

187服务器上安装git并且配置密钥

安装git

yum -y install git
[root@yxkj_centos187 ~]# su -l www
克隆版本库:出现密钥问题
[www@yxkj_centos187 ~]$ git clone git@gitlab.tools.funet8.com:funet8_test_project/test_funet8_com.git
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
生成密钥:
[www@yxkj_centos187 .ssh]$ ssh-keygen -t rsa -f /home/www/.ssh/id_rsa -P ''
[www@yxkj_centos187 .ssh]$ cat /home/www/.ssh/id_rsa.pub 
将id_rsa.pub内容上传的gitlab的ssh-key中

再测试:
[www@yxkj_centos187 .ssh]$ git clone git@gitlab.tools.funet8.com:funet8_test_project/test_funet8_com.git
[www@yxkj_centos187 .ssh]$ ls
test_funet8_com

同步的shell脚本
在187上
vi /data/conf/shell/jenkins/test_funet8_com_jenkis_git_pull.sh

#!/bin/bash

###说明:
#vi /data/conf/shell/jenkins/test_funet8_com_jenkis_git_pull.sh
#chmod +x /data/conf/shell/jenkins/test_funet8_com_jenkis_git_pull.sh
#chown www.www /data/conf/shell/jenkins/test_funet8_com_jenkis_git_pull.sh
###test.funet8.com_jenkis自动拉取gitlab文件本地

#切换www 用户操作
cd /data/wwwroot/web/test_website/test.funet8.com/
/usr/bin/git pull


##############################################################################
#如果使用root用户执行。
#!/bin/bash

###说明:
###jenkis自动拉取gitlab文件本地

#su -l www
#cd /data/wwwroot/web/jenkins_test/
#/usr/bin/git pull

#切换www 用户操作
 su - www <<EOF
 cd /data/wwwroot/web/jenkins_test/
 /usr/bin/git pull
 exit;
 EOF

3.配置jenkis实现自动化集成交付-gitlab自动触发jenkins

操作步骤

1.jenkins后台--->Enter an item name--->选择构建一个自由风格的软件项目
2.构建触发器
为了令牌的安全性,我们使用openssl生成一个

[root@yxkj_centos187 ]# openssl rand -hex 10
4b0a35066e03be88da4c

勾选:触发远程构建 (例如,使用脚本)
勾选:Build when a change is pushed to GitLab. GitLab CI Service URL: ....
如图:
1-chufa

3.构建-->增加构建步骤--->Execute shell

ssh -p 60920 root@192.168.1.4 "/data/conf/shell/jenkins/test_funet8_com_jenkis_git_pull.sh"
ssh -p 60920 www@192.168.20.187 "/data/conf/shell/jenkins/test_funet8_com_jenkis_git_pull.sh"

docker exec -it jenkins /bin/bash
进入jenkins看能否执行ssh -p 60920 www@192.168.20.187 "/data/conf/shell/jenkins/test_funet8_com_jenkis_git_pull.sh" 此命令,如果不行那就需要做密钥配对

密钥配对

[root@yxkj_mariaDB ~]# cat /data/jenkins/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvOJKQceZbh0f9lZ8VSncEil/pW4c6FTSfnMsQMXgcAhiOpnuPq0g0QxpDlwamzVAZYMLi7fgOEXPN7yns+cnhgqHl3sfCZTdFoLK7screAdk7ILW5Lz3JlhWNhSt77bVap6PzEnrwmltXRSOVIVmC8YtNyPLhkY7nKZw8Psz4ud4OdmrFHRR+3oLBhE8zSHArGO88SLQjX4ygzdg2uDfabS74rI0mouqL8yguMM+7eJKbGzVSTmBlhqGKn9ddzHrJ2x7JEa085KzbM7UxoBOdK5X/5zjnaTCeKEuw3PJm3t8f0RbPyizha+LH65PbX6wwqf6n/qAxiIjT3WgSrXMF root@centos7_qwjm

将以上内容复制到yxkj_centos187主机中
[root@yxkj_centos187 ~]# vi /home/www/.ssh/authorized_keys 

docker exec -it jenkins /bin/bash
测试是否能登录
ssh -p 60920 www@192.168.20.187

4.gitlab上添加钩子脚本
到gitlab项目中配置Webhooks
settings--->CI/CD--->Pipeline triggers

http://192.168.20.15:9090/buildByToken/build?job=auto-deploy&token=0a37c6d7ba1fe3472e26
auto-deploy=项目名称(构建时的项目名称)
0a37c6d7ba1fe3472e26=jenkins填写的令牌
根据:
http://192.168.20.15:9090/buildByToken/build?job=test.funet8.com_yxkj_centos187&token=4b0a35066e03be88da4c

5.配置钉钉通知

构建后操作
在钉钉新建一个群将,需要收到通知的人拉进来。
群设置--->群机器人--->添加机器人---->自定义

2-dingding2-dingding

得到webhook https://oapi.dingtalk.com/robot/send?access_token=[密钥]
将密钥复制到jenkins的通知配置中

3-dingding3-dingding

未经允许不得转载:好玩吧 » 搭建GitLab+Jenkins(基于docker下)持续集成环境教程