需要安装三个东西docker、jenkins、gitlab

规划:

IP 安装软件                     配置
192.168.15.100 docker+jenkins 最少2核8g、4核16g最好
192.168.15.101 docker+gitlab 至少2核4g、2核8g最好(gitlab很占内存,配置低了每次部署会很慢)

生产环境配置,搭建测试可以忽略创建新用户,使用ssh登陆,禁止root登陆(这个步骤先不做,最后再做),密码登陆

useradd aaa
passwd aaa
输入密码:xxx

vim /etc/ssh/sshd_config
PermitRootLogin yes更改为no
systemctl restart sshd

防火墙设置

firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --zone=public --add-port=9997/tcp --permanent
firewall-cmd --zone=public --add-port=9998/tcp --permanent
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xxx" port protocol="tcp" port="2375" accept"
其中这个ip指的是gitlab主机ip

下面就是安装流程

第一步:在192.168.15.100和192.168.15.101安装docker

sudo yum -y update
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce-17.12.1.ce-1.el7.centos
sudo systemctl start docker
sudo systemctl enable docker
docker version

其中docker加速配置

vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://cnchaa37.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker

配置docker远程访问

vim /lib/systemd/system/docker.service
修改以ExecStart开头的行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
systemctl daemon-reload
service docker restart

详细可参考https://www.cnblogs.com/yufeng218/p/8370670.html

 

第二步:192.168.15.100中安装jenkins

注意:首先jenkins进行的大改,请使用https://hub.docker.com/r/jenkins/jenkins这个地址的响应标签

这个地址是docker已经弃用了的https://hub.docker.com/_/jenkins,请不要使用这个地址

mkdir -p /app/docker/jenkins
mkdir -p /app/software
docker pull jenkins/jenkins
docker run -itd -p 9998:8080 -p 9997:50000 --name jenkins --privileged=true  -v /app/docker/jenkins:/var/jenkins_home jenkins/jenkins
docker ps
docker ps -a 
docker logs jenkins
useradd jenkins
sudo chown -R 1000:1000 /app/docker/jenkins
#(或者sudo chown -R jenkins:jenkins /app/docker/jenkins)
docker rm jenkins
docker run -itd -p 9998:8080 -p 9997:50000 --name jenkins --privileged=true  -v /app/docker/jenkins:/var/jenkins_home jenkins/jenkins

查看日志:  docker logs 容器名称或容器id,我这里容器的名称叫jenkins

docker logs jenkins      

出现错误


网上查找了很多资料

如下解决方案

创建jenkins用户,默认创建jenkins组
useradd jenkins
设置挂载文件用户名和组均为jenkins
sudo chown -R 1000:1000 /app/docker/jenkins
#(或者sudo chown -R jenkins:jenkins /app/docker/jenkins)
移除之前的容器
docker rm jenkins
重新创建容器(一定要把宿主机的docker挂载,因为在jenkins中要使用shell,shell中要使用docker命令)
docker run -itd -p 9998:8080 -p 9997:50000 --name jenkins --privileged=true  -v /app/docker/jenkins:/var/jenkins_home jenkins/jenkins

 

浏览器访问:192.168.15.100:9998 

然后输入密码,密码查看

docker logs -f jenkins

然后就一直等,安装插件,安装完成后再进行如下配置

需要手动安装的插件有如下:

 

 

2、 Jenkins全局工具配置 本项目使用Jenkins需要配置Jdk1.8、Git、maven

1、Maven安装: 可以采用“自动安装”,在上图中勾选自动安装,选择maven版本即可。 本教程将maven程序目录拷贝到宿主机/home下,在上图配置即可。

fed0d3fd24819ec97e8ba5abf4396d15ad9.jpg

2、Jdk安装配置 与maven安装相同,也可以采用自动安装或手动安装的方法。(进入到jenkins容器中 echo $JAVA_HOME 获取java环境安装地址)

d3d27144f100b7a289bb98fd92e2075a735.jpg

3、Git安装方法同上 git安装完成配置如下图:

9d571be7271d61091f346aa90734abc207b.jpg

3 SSH Remote Hosts

 remote hosts是Jenkins提供的一种远程访问ssh服务器的方法,通过如下步骤测试此功能:

1、安装插件SSH plugin 从可选插件中选择SSH Plugin进行安装

3f9cde3e7e26ce1012b7eed2aca06b78131.jpg

安装成功可在已安装插件中查询:

a51018da1d7cbd00d628ef95a8f2ca70d77.jpg

2、配置凭证 配置远程SSH服务的账号和密码:

7eaba7dfca8f631b1d10b7905f349eb638e.jpg

3、配置SSH sites 配置远程ssh服务器的ip和端口,并选择第2步设置凭证

ec5727c05a40b094b82eb2f8943ffaa1777.jpg

4、在任务构建中编写脚本 选择第3步定义的SSH site,并在command输入脚本。 配置完成可以测试是否可以远程执行SSH指令

2f273de2655d1e8ae1f7cfff1591c07a4fe.jpg

 

 

 

第三步:在192.168.15.101中安装gitlab

普及知识:gitlab分为ee、ce,分别指企业版、社区版,推荐使用企业版,原因,企业版能使用社区版的全部功能,如果以后你们公司需要使用企业版,直接支付钱就可以开通了,其他都不变,如果是使用社区版就要迁移到企业版,所以推荐使用

启动并安装容器
docker run -d -p 9443:443 -p 9999:80 -p 9022:22 --name gitlab --restart=unless-stopped -v /var/lib/docker/volumes/gitlab-data/etc:/etc/gitlab -v /var/lib/docker/volumes/gitlab-data/log:/var/log/gitlab -v /var/lib/docker/volumes/gitlab-data/data:/var/opt/gitlab gitlab/gitlab-ee:11.11.1-ee.0
修改host文件(这个必须修host,不然拉取项目拉取不到,会提示一串数字不能解析host)
 vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
将host改成ip地址192.168.15.101

然后访问:192.168.15.101:9999,能正常访问说明成功了(第一次访问需要设置密码,那个设置密码就是设置root用户的密码,默认会有root这个账户)

 

第四步:也是最重要的一步

1、在Jenkins上安装好GitLab PluginGitlab Hook Plugin

 

2、在gitLab上加上ssh public key

在装Jenkins的机器上,用jenkins用户或者root用户生成ssh密钥对。如果jenkins是分master和slave的,那就在master上生成密钥对,如果jenkins是运行在docker里的,那就在docker里的jenkins master上生成密钥对。

生成密钥对:ssh-keygen -t rsa (记得先切换到相用户下root or jenkins,具体操作百度or Google很多),生成的密钥对在对用用户下的.ssh文件夹下,比如root用户,路径就是/root/.ssh

进入jenkins容器中
docker exec -it jenkins /bin/bash
生产密钥对
ssh-keygen -t rsa -C "1010621868@qq.com"

查看公钥内容
cat ~/.ssh/id_rsa.pub

 

然后将文件id_rsa.pub里面的内容copy到gitLab上, gitLab-->setting-->SSH Keys

webp

 

3.jenkins中 配置Job触发

在Job里的configuration里面,勾选Build when a change is pushed to GitLab. GitLab CI Service URL: http://147.128.64.212:8080/project/TEST_RC13_AA_TRIGGER,具体里面的配置都采用默认的,后面按需修改。

 

配置Job

4、在GitLab添加Webhood

步骤3中,红框框起来的url地址copy出来,然后Paste到GitLab上的对应项目上,GitLab-->project-->NSI-Ansible-->Settings-->Integrations

 

 

配置GitLab

把url复制到GitLab上,然后点击Add webhook按钮。生成webhook后点击test可以测试,返回Hook executed successfully: HTTP 200就表示成功了,同时Jenkins job也会build起来。

 

 

test webhook

 

 

如果是这样基本完成了,但test的时候有可能返回的是Hook executed successfully but returned HTTP 403,这是没有权限,需要把Jenkins-->Jenkins Manages-->Configure System,找到GitLab配置,去掉勾选。

 

 

去掉勾选

 

5、配置branch

这样子,只有有人push code到GitLab上,我Jenkins的job都会Run,但这有一个问题,这里没能区分Branch,无论提交到哪个branch的code都会触发Jenkins Job,这肯定不是我们希望的,所以还需要在Jenkins上配置。Jenkins-->Job-->configure-->Build Triggers,然后点击图中的红框,配置更多选项。

 

 

点击Advance

 

 

配置Branch

然后在Allowed branches中,选择filter branches by name,在include中填写你要的branch名称,这样就可以按branch触发。当然还能看到可以用正则来匹配branch,按需求来就好。

 

 

 

 

 

转载于:https://my.oschina.net/u/3962987/blog/3067032

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐