从零搭建基于gitlab+jenkins+maven的系统发布流水线

一、Java环境准备(jdk 1.8)

  1. 查看当前是否存在Java环境,如果存在 jdk 1.8,则进入下一个环节。
    java -version

devops新建流水线 java搭建流水线_docker

  1. 下载 jdk 1.8
    yum -y install java-1.8.0-openjdk
  2. 配置环境变量
    vi /etc/profile
  3. 输入 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

devops新建流水线 java搭建流水线_devops新建流水线_02

esc退出编辑模式,输入 :wq 保存并退出

  1. 使用source /etc/profile更新配置后,再次输入 java -version查看是否安装成功,如果没成功,则仔细确认环境变量中JAVA_HOME的路径是否有误

devops新建流水线 java搭建流水线_java_03

二、Maven环境准备

  1. 下载wget工具
    yum -y install wget
  2. 远程下载Maven
    使用命令 cd /usr/local,进入到local目录

复制安装包在官网连接后,直接命令下载

devops新建流水线 java搭建流水线_devops新建流水线_04

wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

  1. 解压(根据自己实际安装包名称修改)
    tar -zxvf apache-maven-3.6.3-bin.tar.gz
  2. 改名
    mv apache-maven-3.6.3 maven
  3. 配置环境变量
    vi /etc/profile
  4. 输入 i 进入编辑模式,在文件的最后加上
MAVEN_HOME=/usr/local/maven
export PATH=${MAVEN_HOME}/bin:${PATH}

devops新建流水线 java搭建流水线_devops新建流水线_05


esc退出编辑模式,输入 :wq 保存并退出

  1. 使用source /etc/profile更新配置后,输入 mvn -v查看是否配置成功,如果没成功,则仔细确认环境变量中MAVEN_HOME的路径是否有误

devops新建流水线 java搭建流水线_jenkins_06

  1. 配置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>

devops新建流水线 java搭建流水线_java_07

  1. 配置默认maven仓库
<localRepository>/usr/local/maven/repository</localRepository>

devops新建流水线 java搭建流水线_linux_08

三、git 环境准备

  1. 安装git
    yum -y install git
  2. 使用git --version查看是否安装成功

devops新建流水线 java搭建流水线_linux_09

四、docker 环境准备

  1. 卸载之前已经安装过的版本
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

devops新建流水线 java搭建流水线_linux_10

  1. 安装需要的包
yum install -y yum-utils

devops新建流水线 java搭建流水线_java_11

  1. 设置阿里云镜像仓库
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

devops新建流水线 java搭建流水线_docker_12

  1. 安装docker引擎
# 更新软件包索引
yum makecache fast

#安装
yum install docker-ce docker-ce-cli containerd.io

devops新建流水线 java搭建流水线_docker_13

  1. 启动docker服务
systemctl start docker
  1. 查看是否安装成功
docker version

devops新建流水线 java搭建流水线_docker_14

至此完成Linux服务器上,docker的安装

  1. 配置阿里云镜像加速
    登录账号即可

devops新建流水线 java搭建流水线_devops新建流水线_15

devops新建流水线 java搭建流水线_java_16

五、Gitlab部署(docker部署)

  1. 拉取gitlab镜像
    docker pull gitlab/gitlab-ce

devops新建流水线 java搭建流水线_java_17

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:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录
  1. 修改配置
    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端口

如图所示:

devops新建流水线 java搭建流水线_docker_18

输入:wq,保存并退出

  1. 重新运行容器
    docker restart gitlab
  2. 在浏览器中输入服务器的ip地址(如果刚才有配置端口号则需要加上,服务器记得需要开放端口,如果使用虚拟机,则需要关闭虚拟机的防火墙
    然后会出现一个界面,让你输入密码
    而后需要登陆

账号:root

密码:刚输入的密码

devops新建流水线 java搭建流水线_java_19

六、安装&配置Jenkins

安装

  1. 下载Jenkins库

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

devops新建流水线 java搭建流水线_java_20

  1. 安装key

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

  1. 安装Jenkins

yum install -y jenkins

devops新建流水线 java搭建流水线_jenkins_21

  1. 启动Jenkins服务(默认使用8080端口,如果被占用了,需修改)

systemctl start jenkins

  1. 修改配置文件,以root方式启动Jenkins

vim /etc/sysconfig/jenkins 将用户修改为root

devops新建流水线 java搭建流水线_linux_22

devops新建流水线 java搭建流水线_jenkins_23

  1. 重启服务systemctl restart jenkins
  2. 浏览器输入 ip:8080 即可访问

devops新建流水线 java搭建流水线_docker_24

配置

  1. 查看并配置密码

cat /var/lib/jenkins/secrets/initialAdminPassword

devops新建流水线 java搭建流水线_docker_25

将该密码复制到界面上,即可启动

  1. 选择推荐的插件,需要别的插件可在后续添加

devops新建流水线 java搭建流水线_linux_26

  1. 创建管理员账户

devops新建流水线 java搭建流水线_java_27

  1. 默认即可

devops新建流水线 java搭建流水线_java_28

  1. 点击开始后进入首页

devops新建流水线 java搭建流水线_docker_29

  1. 配置Java、maven、git环境

devops新建流水线 java搭建流水线_devops新建流水线_30

  1. 首先是Java,取消这个勾

devops新建流水线 java搭建流水线_devops新建流水线_31

放入系统中的jdk路径,使用cat /etc/profile,查看我们之前配置好的路径即可

devops新建流水线 java搭建流水线_jenkins_32

  1. maven

devops新建流水线 java搭建流水线_docker_33

  1. git(根据你安装的实际情况,/usr/bin/git为默认路径)

devops新建流水线 java搭建流水线_java_34

完成配置后,保存即可

  1. 安装插件

devops新建流水线 java搭建流水线_java_35

直接找到以下插件进行安装,搜索下载即可(如果速度慢的话,可自行在配置中添加镜像,具体配置方式百度)

需要安装的插件有:
Publish Over SSH
Maven Integration
GitLab
GitLab Hook
GitLab Authentication
GitLab API
Git
Git client Plugin
Git Parameter

devops新建流水线 java搭建流水线_java_36


devops新建流水线 java搭建流水线_java_37

  1. 重启Jenkins后,重新登陆即可
    systemctl restart jenkins

七、配置Jenkins连接gitlab

  1. 登录gitlab服务器,点击设置

devops新建流水线 java搭建流水线_devops新建流水线_38

  1. 设置好后,点击创建token

devops新建流水线 java搭建流水线_devops新建流水线_39

  1. 记录好个人令牌
  2. devops新建流水线 java搭建流水线_docker_40

  3. 进入Jenkins系统设置

devops新建流水线 java搭建流水线_jenkins_41

5.找到gitlab设置,注意url需要 http:// 开头

devops新建流水线 java搭建流水线_devops新建流水线_42

6.选择API token设置

devops新建流水线 java搭建流水线_devops新建流水线_43

devops新建流水线 java搭建流水线_docker_44

7.测试,显示success

devops新建流水线 java搭建流水线_java_45

  1. 进行ssh连接配置(项目部署在远程主机需要)

devops新建流水线 java搭建流水线_java_46

devops新建流水线 java搭建流水线_jenkins_47

  1. 成功后,保存退出即可

八、部署项目

  1. 在gitlab准备一个maven项目,我这里做了一个springboot的hello world项目

devops新建流水线 java搭建流水线_docker_48

  1. 上传到gitlab中

devops新建流水线 java搭建流水线_docker_49

  1. 在Jenkins中新建item

devops新建流水线 java搭建流水线_java_50

  1. 选择maven项目

devops新建流水线 java搭建流水线_docker_51

  1. 复制gitlab中的项目地址

devops新建流水线 java搭建流水线_java_52

  1. 填入地址,然后添加账号密码验证

devops新建流水线 java搭建流水线_docker_53

devops新建流水线 java搭建流水线_java_54

选择分支

devops新建流水线 java搭建流水线_java_55

7.构建触发器

devops新建流水线 java搭建流水线_devops新建流水线_56

点击高级选项

devops新建流水线 java搭建流水线_devops新建流水线_57

最后,点击保存即可.

  1. 在gitlab项目中设置webhooks

devops新建流水线 java搭建流水线_docker_58

devops新建流水线 java搭建流水线_linux_59

devops新建流水线 java搭建流水线_jenkins_60

如果出现Urlis blocked: Requests to the local network are not allowed问题,参考,设置后保存即可

devops新建流水线 java搭建流水线_jenkins_61

devops新建流水线 java搭建流水线_linux_62

  1. 进行测试

devops新建流水线 java搭建流水线_docker_63

devops新建流水线 java搭建流水线_docker_64

可以在Jenkins中看到构建

devops新建流水线 java搭建流水线_java_65

至此,完成了gitlab与Jenkins的互通

九、完成自动化部署

  1. 进入maven工程中的设置

devops新建流水线 java搭建流水线_linux_66

  1. 找到build

输入clean maven打包命令

devops新建流水线 java搭建流水线_docker_67

  1. 找到Post Steps配置

devops新建流水线 java搭建流水线_jenkins_68

  1. 脚本(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测试

devops新建流水线 java搭建流水线_jenkins_69

Jenkins中等待构建

devops新建流水线 java搭建流水线_devops新建流水线_70

效果(我在项目中设置了运行在8081端口上):

devops新建流水线 java搭建流水线_jenkins_71

至此完成了整个项目的从零搭建

十一、后续

服务器重启以后,发现启动了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