从零搭建基于gitlab+jenkins+maven的系统发布流水线
一、Java环境准备(jdk 1.8)
- 查看当前是否存在Java环境,如果存在 jdk 1.8,则进入下一个环节。
java -version
- 下载 jdk 1.8
yum -y install java-1.8.0-openjdk
- 配置环境变量
vi /etc/profile
- 输入
i
进入编辑模式,在文件的最后加上
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
esc
退出编辑模式,输入 :wq
保存并退出
- 使用
source /etc/profile
更新配置后,再次输入java -version
查看是否安装成功,如果没成功,则仔细确认环境变量中JAVA_HOME的路径是否有误
二、Maven环境准备
- 下载wget工具
yum -y install wget
- 远程下载Maven
使用命令cd /usr/local
,进入到local目录
复制安装包在官网连接后,直接命令下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
- 解压(根据自己实际安装包名称修改)
tar -zxvf apache-maven-3.6.3-bin.tar.gz
- 改名
mv apache-maven-3.6.3 maven
- 配置环境变量
vi /etc/profile
- 输入
i
进入编辑模式,在文件的最后加上
MAVEN_HOME=/usr/local/maven
export PATH=${MAVEN_HOME}/bin:${PATH}
esc
退出编辑模式,输入 :wq
保存并退出
- 使用
source /etc/profile
更新配置后,输入mvn -v
查看是否配置成功,如果没成功,则仔细确认环境变量中MAVEN_HOME的路径是否有误
- 配置maven阿里云镜像
vim /usr/local/maven/conf/settings.xml
找到<mirrors> </mirrors>
标签,在改标签中添加如下代码
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
- 配置默认maven仓库
<localRepository>/usr/local/maven/repository</localRepository>
三、git 环境准备
- 安装git
yum -y install git
- 使用
git --version
查看是否安装成功
四、docker 环境准备
- 卸载之前已经安装过的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装需要的包
yum install -y yum-utils
- 设置阿里云镜像仓库
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装docker引擎
# 更新软件包索引
yum makecache fast
#安装
yum install docker-ce docker-ce-cli containerd.io
- 启动docker服务
systemctl start docker
- 查看是否安装成功
docker version
至此完成Linux服务器上,docker的安装
- 配置阿里云镜像加速
登录账号即可
五、Gitlab部署(docker部署)
- 拉取gitlab镜像
docker pull gitlab/gitlab-ce
2.运行gitlab镜像
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
参数说明:
# -d:后台运行
# -p:将容器内部端口向外映射(这里根据实际情况做端口映射,例子中选择了直接不改动端口)
# --name:命名容器名称
# -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
- 修改配置
vim /home/gitlab/config/gitlab.rb
输入i
给配置文件添加如下信息:
external_url 'http://IP' 配置http协议所使用的访问地址,不加端口号默认为80,如果上面修改了端口号,格式为 http://(IP):(端口)
gitlab_rails['gitlab_ssh_host'] = 'IP' 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_shell_ssh_port'] = 222 此端口是run时22端口映射的222端口
如图所示:
输入:wq
,保存并退出
- 重新运行容器
docker restart gitlab
- 在浏览器中输入服务器的ip地址(如果刚才有配置端口号则需要加上,服务器记得需要开放端口,如果使用虚拟机,则需要关闭虚拟机的防火墙)
然后会出现一个界面,让你输入密码
而后需要登陆
账号:root
密码:刚输入的密码
六、安装&配置Jenkins
安装
- 下载Jenkins库
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
- 安装key
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
- 安装Jenkins
yum install -y jenkins
- 启动Jenkins服务(默认使用8080端口,如果被占用了,需修改)
systemctl start jenkins
- 修改配置文件,以root方式启动Jenkins
vim /etc/sysconfig/jenkins
将用户修改为root
- 重启服务
systemctl restart jenkins
- 浏览器输入 ip:8080 即可访问
配置
- 查看并配置密码
cat /var/lib/jenkins/secrets/initialAdminPassword
将该密码复制到界面上,即可启动
- 选择推荐的插件,需要别的插件可在后续添加
- 创建管理员账户
- 默认即可
- 点击开始后进入首页
- 配置Java、maven、git环境
- 首先是Java,取消这个勾
放入系统中的jdk路径,使用cat /etc/profile
,查看我们之前配置好的路径即可
- maven
- git(根据你安装的实际情况,
/usr/bin/git
为默认路径)
完成配置后,保存即可
- 安装插件
直接找到以下插件进行安装,搜索下载即可(如果速度慢的话,可自行在配置中添加镜像,具体配置方式百度)
需要安装的插件有:
Publish Over SSH
Maven Integration
GitLab
GitLab Hook
GitLab Authentication
GitLab API
Git
Git client Plugin
Git Parameter
- 重启Jenkins后,重新登陆即可
systemctl restart jenkins
七、配置Jenkins连接gitlab
- 登录gitlab服务器,点击设置
- 设置好后,点击创建token
- 记录好个人令牌
- 进入Jenkins系统设置
5.找到gitlab设置,注意url需要 http://
开头
6.选择API token设置
7.测试,显示success
- 进行ssh连接配置(项目部署在远程主机需要)
- 成功后,保存退出即可
八、部署项目
- 在gitlab准备一个maven项目,我这里做了一个springboot的hello world项目
- 上传到gitlab中
- 在Jenkins中新建item
- 选择maven项目
- 复制gitlab中的项目地址
- 填入地址,然后添加账号密码验证
选择分支
7.构建触发器
点击高级选项
最后,点击保存即可.
- 在gitlab项目中设置webhooks
如果出现Urlis blocked: Requests to the local network are not allowed
问题,参考,设置后保存即可
- 进行测试
可以在Jenkins中看到构建
至此,完成了gitlab与Jenkins的互通
九、完成自动化部署
- 进入maven工程中的设置
- 找到build
输入clean maven
打包命令
- 找到Post Steps配置
- 脚本(jar包名称根据实际情况修改)
pid=`ps -ef | grep demo.jar | grep -v grep | awk '{print $2}'`
echo “旧应用进程id:$pid”
if [ -n "$pid" ]
then
kill -9 $pid
fi
cd /home/demo
./start.sh
npid=`ps -ef | grep demo.jar | grep -v grep | awk '{print $2}'`
echo "新的进程 $npid:$?"
echo "启动成功!"
然后保存退出
5.连接运行jar包的远程主机,添加一个启动脚本start.sh
cd /home
mkdir demo
cd /home/demo
touch start.sh
chmod u+x start.sh #修改为可执行文件
vim start.sh
编辑start.sh添加以下代码(jar包名称根据实际情况修改)
export oldId=$BUILD_ID
export BUILD_ID=dontKillMe
nohup java -jar demo.jar >log.txt &
export BUILD_ID=$oldId
sleep 40
保存后,完成所有操作
注意: 最好在远程主机上先使用Java -jar xxx.jar
尝试运行项目的jar包,免得出现端口占用,无法运行等问题
十、测试效果
gitlab中push测试
Jenkins中等待构建
效果(我在项目中设置了运行在8081端口上):
至此完成了整个项目的从零搭建
十一、后续
服务器重启以后,发现启动了Jenkins也无法访问,原因是虚拟机的8080端口没通过防火墙(Jenkins一般会使用另外的服务器,设置了开放8080端口便可)
如果使用了虚拟机,设置一下即可
防火墙开放8080端口
firewall-cmd --permanent --zone=public --add-port=8080/tcp
重新载入设置
systemctl reload firewalld
ps :需要设置开机重启,docker,gitlab才会重新启动,建议直接将Jenkins、docker设置为开机启动.
docker设置为开机启动(gitlab使用了docker部署)
systemctl enable docker
Jenkins设置为开机启动
systemctl enable jenkins.service