centos7下使用gitlab+shell实现CI/CD持续集成持续部署
centos7下使用gitlab+shell实现CI/CD持续集成持续部署
流程解释:第一步ci客户端向gitlab服务器注册自己,建立通信,第二步,当项目分支代码收到变化时,自动触发yml脚本,yml脚本根据注册时带入的runner通知客户端deploy脚本更新代码,同时执行编译和部署过程,deploy脚本写代码集成相关操作,具体见下面的讲解
CI部分
第一步:准备三台虚拟机S,C1,C2,我这里的三台机子都是全新的,除了系统文件没有其他文件
S:内存是4G用于装gitlab服务器 IP:192.168.95.131
C1:内存是1G用于装gitlab-CI客户端1 IP:192.168.95.132
C2:内存是1G用于装gitlab-CI客户端2 IP:192.168.95.133
第二步:在S上安装gitlab服务器
安装依赖
sudo yum install curl policycoreutils openssh-server openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo systemctl start firewalld
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld
windows下 下载安装包,下载地址是:
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm
并且上传至linux目录下 如/data/web-download
cd /data/web-download
安装python依赖 -y的意思是所有问答都使用Y
yum install -y policycoreutils-python
安装 这里安装需要花一点时间,耐心等待一下
rpm -i gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm
出现了这个图案,代表安装完成
安装 vim
yum install -y vim
更换端口(这里写ip地址或者域名都可以,但是不能写localhost)
vim /etc/gitlab/gitlab.rb
启动
gitlab-ctl reconfigure (这里可能需要一点时间)
重启:
gitlab-ctl restart(这里也会可能需要一点时间,不是必须项)
直接ip或者域名 +端口访问,如果访问不了,关闭防火墙或者防火墙开放端口
查看防火墙状态
systemctl status firewalld
关闭防火墙
systemctl stop firewalld
再次访问 即可,第一次登陆需要重新设置密码
新建组,新建项目
到这里服务器已经创建好了,项目也创建好了
第二步:在C1上安装 gitlab-ci客户端
安装 vim
yum install -y vim
安装runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
如果出现尝试其他镜像提示 可以ctrl+c 终止掉进程,然后更改镜像地址
vim /etc/yum.repos.d/runner_gitlab-ci-multi-runner.repo
将一下内容替换runner_gitlab-ci-multi-runner.repo原有的内容
[gitlab-ci-multi-runner]
name=gitlab-ci-multi-runner
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
执行 yum install -y gitlab-ci-multi-runner 即可
注册runner
gitlab-ci-multi-runner register
其中 url是gitlab 服务器的地址
token是上面新建的项目token
配置好后 刷新一下项目的runners,可以找到我们刚刚注册的runner,并且状态是绿色的
如果不是绿色的 重启runner即可
查看runner状态
gitlab-ci-multi-runner verify
重启所有runner:
gitlab-ci-multi-runner run
重启单个runner:
gitlab-ci-multi-runner run-single --url http://IP:port/ --token runnerToken --executor shell
编写 deploy文件
在gitlab-runner的~/.local/bin/目录下新建deploy文件
su gitlab-runner
mkdir ~/.local/bin -p
cd ~/.local/bin
vim deploy
复制以下内容到deploy文件
#!/bin/bash
if [ $# -ne 3 ]
then
echo "arguments error!"
exit 1
else
deploy_path="/data/wwwroot/$3/$1/$2"
if [ ! -d "$deploy_path" ]
then
git clone "git@192.168.95.131:${1}/${2}.git" $deploy_path
cd $deploy_path
git checkout $3
else
cd $deploy_path
git pull
fi
fi
以上脚本的意思是如果参数不是三个,打印参数错误
如果目录没建立 这git clone 并且git checkout
如果存在 则git clone
添加脚本执行权限
chmod +x ~/.local/bin/deploy
切换到root身份 编辑/etc/profile文件 最末尾添加加入 path路径
PATH="$HOME/.local/bin:$PATH"
给gitlab-runner用户创建文件权限
chown -hR gitlab-runner:gitlab-runner /data/wwwroot
配置ssh登录
su gitlab-runner
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen
然后一直按enter
查看id_rsa.pub文件 并复制 token
创建一个runner-1用户,并将该用户添加到项目成员中(赋予该成员maintainer角色)
在gitlab上,登录runner-1
将刚刚复制的token设置到runner-1用户的ssh-keys上
创建文件 .gitlab-ci.yml 和test.txt ,前者用于CI解析,后者用于触发CI
yml 内容如下
stages:
- deploy
deploy1:
stage: deploy
tags:
- test-runner-1
only:
- master
script:
- bash deploy java test-project master
修改test.txt文件,查看CI 功能是否触发
此时任务可能会报以下错误
gitlab-runner身份下 执行以下命令
/etc/profile
deploy java test-project master
第一次访问这个服务器的时候,有个命令行提示是要把sign添加进已知服务器列表,然后手工输入个yes
同样的,在C2上做C1基本一致的的操作(除了基本配置一致,修改一下yml),这里不再一步一步的演示,至于单机版,就是讲CI客户端和gitlab服务端装在同一服务器上,操作基本一致,这里也不再赘述
修改yml 文件(这里是指定两个runner并行部署) 其他均一致
自行查看c1,cd服务器文件是否都成功修改?如果都修改了,代表CI功能实现
CD部分
c1,c2服务器上安装好jdk,maven,tomcat,mysql,具体可见文章:https://www.cnblogs.com/tjqBlog/p/9573459.html
将一个常规的基于maven的spring web项目上传到gitlab服务器上,(我这里采用spring boot+mybatis的项目),
修改yam文件如下,
增加编译和部署生命周期
设置编译生命周期目标
设置部署生命周期目标
提交修改,查看CI/CD运行轨迹,所有目标均为绿色代表CI/CD功能成功实现,
这里的每种周期运行详情都可以点击进入查看,以下分别截图 deploy,build,ops,三个周期的详情