需要安装三个东西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下,在上图配置即可。
2、Jdk安装配置 与maven安装相同,也可以采用自动安装或手动安装的方法。(进入到jenkins容器中 echo $JAVA_HOME 获取java环境安装地址)
3、Git安装方法同上 git安装完成配置如下图:
3 SSH Remote Hosts
remote hosts是Jenkins提供的一种远程访问ssh服务器的方法,通过如下步骤测试此功能:
1、安装插件SSH plugin 从可选插件中选择SSH Plugin进行安装
安装成功可在已安装插件中查询:
2、配置凭证 配置远程SSH服务的账号和密码:
3、配置SSH sites 配置远程ssh服务器的ip和端口,并选择第2步设置凭证
4、在任务构建中编写脚本 选择第3步定义的SSH site,并在command输入脚本。 配置完成可以测试是否可以远程执行SSH指令
第三步:在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 Plugin和Gitlab 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
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,按需求来就好。
所有评论(0)