Bootstrap

ubuntu系统安装配置gitlab+Jenkins+发布持续集成持续部署保姆级教程。

1、服务器环境

名称                              系统                                   IP                              备注

gitlab               ubuntu20.04.2图形化          192.168.26.130        要求有6G的内存

Jenkins           Ubuntu20.04.2图形化          192.168.26.110        没有硬性要求   

测试服务器     Ubuntu20.04.2图形化          192.168.26.129        没有硬性要求

2、做时间同步(所有服务器都要执行)

timedatectl set-timezone "Asia/Shanghai"       #时区改为上海

ntpdate "ntp.aliyun.com"                                  #更正时间

出现下图错误 说明本机没有安装ntpdate 

解决办法

sudo apt install ntpdate

3、安装gitlab极狐

sudo apt-get update                          #更新系统的软件包列表和版本信息

sudo apt-get install -y curl openssh-server ca-certificates tzdata perl             #下载依赖

sudo systemctl status ssh                       #查看ssh是否在运行

sudo systemctl start ssh                          #启动ssh

curl -fsSL https://get.gitlab.cn | /bin/bash                #配置极狐gitlab软件源镜像

sudo EXTERNAL_URL="http://192.168.193.130" apt-get install gitlab-jh     #开始安装gitlab

注:URL后面的参数可以是本机的IP,也可以为域名,如果设置域名需要确保域名解析到本机的IP即可。

EXTERNAL_URL 中配置的地址来访问安装成功的极狐GitLab 实例。用户名默认为 root 。如果在安装过程中指定了初始密码,则用初始密码登录,如果未指定密码,则系统会随机生成一个密码并存储在 /etc/gitlab/initial_root_password 文件中, 查看随机密码并使用 root 用户名登录。

注意:出于安全原因,24 小时后,/etc/gitlab/initial_root_password 会被第一次 gitlab-ctl reconfigure 自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码。

gitlab常用命令

gitlab-ctl start # 启动所有gitlab组件

gitlab-ctl stop # 停止所有gitlab组件

gitlab-ctl restart # 重启所有gitlab组件

gitlab-ctl status # 查看服务状态

gitlab-ctl reconfigure # 启动服务

vim /etc/gitlab/gitlab.rb # 修改默认的配置文件

gitlab-ctl tail # 查看日志

4、登陆web页面查看

输入本机IP进行登陆

注:如果出现502错误 可以等一会再刷新看看 

默认用户是root

密码我们可以在/etc/gitlab/initial_root_password文件中进行查看

我们登陆上后先改密码

修改完成后我们再次登陆

5、将gitlab页面设置为中文

登陆gitlab页面

跟着图上标的步骤来

把页面拉到下面找到 Localization  选项

选择中文简体

在页面的最下面选择保存更改

在回到主页就可以看到已设置为中文

6、新建项目

新建项目

选择创建空白项目

7、使用命令行的方式向gitlab推送代码

 git branch -a                      #查看分支的命令

git status                           #查看当前工作目录的状态

找一个文件上传到你目录下 我的是在/root 目录下

  1. #设置用户名、邮箱为gitlab上设置的邮箱

  2. git config --global user.name "[email protected]"

  3. git config --global user.email "[email protected]"

  4. git config --global --list           #查看邮箱

#然后输入上面保存的地址

git clone http://192.168.193.130/root/java-project.git

git add .                    #把目录下的所有文件上传到git

git commit -m "你的描述"                #提交信息格式

git commit -m "测试"

git push <链接(orgin是别名)> <本地仓库>:<远程分支>

git push origin master

然后我们在浏览器可以看到下面的消息

我们上面操作推送代码的时候选择的的maser分支所以这里选择maser分支查看

下图可以看出我们推送的文件


1、Jenkins服务器安装部署

1、安装jdk17

sudo apt update                                            #更新软件包

sudo apt install openjdk-17-jdk                       # 下载jdk17

java -version                                                 #查看安装的 Java 版本信息

2、在Jenkins服务器安装git

sudo apt-get install git

echo $PATH                       #检查 PATH 变量

vim .bashrc      或者是 vim .bash_profile         #打开文件配置变量

export PATH=/usr/bin/git:$PATH                      #在文件尾部添加此变量

注意 文件路径 通常是 /usr/bin/git 或 /usr/local/bin/git

source ~/.bashrc         或者是 source ~/.bash_profile               #使命令生效

2、在Jenkins官网进行下载

Jenkins

下载Jenkins的war包到本地

将我们下载的war包传输到服务器内

启动我们的war包

java -jar jenkins.war                             #启动war包

Jenkins默认的端口是8080如果你需要指定端口的话可以使用--httpPort=选项 

java -jar jenkins.war --httpPort=8888      #启动war包并指定端口

如果启动时出现下面这种错误

解决办法

将jdk1.8升级到jdk11 错误显示最少需要jdk11

sudo apt install openjdk-11-jdk

将下图初始码复制下来

然后在网页访问本机的IP+8080端口 将上图保存的初始码粘贴到下图

创建你的管理员用户密码

3、在Jenkins服务器安装maven

sudo apt install maven                     

配置环境变量

vim .bashrc  (或 ~/.bash_profile~/.profile,取决于你使用的是哪个shell)

在文件尾部添加下行内容

export PATH=$PATH:/usr/local/maven/bin

source ~/.bashrc                       #使修改生效

mvn -v                                       #查看版本信息


2、测试服务器安装

apt install openjdk-8-jdk                   #安装java环境jdk1.8

sudo systemctl status ssh                       #查看ssh是否启动

sudo apt install -y openssh-server           #如果没安装用此命令安装

查看本机IP


3、使用Jenkins

进入Jenkins页面我们先去安装插件

安装maven

安装publish


4、Jenkins新建item

构建maven项目

源码管理设置

在gitlab上查看地址

将上图获得的地址填写在下图 

Branches to bulid 配置 根据项目分支情况进行填写

Build 配置

跳转到页面找到最下面的新建maven

maven按照配置

登陆我们gitlab的页面查看项目中我们pom.xml文件的路径

Build 配置

我们再次打开一个新的Jenkins页面

找到 Publish over SSH 选项 添加后端发布服务器信息

填写信息然后选择高级继续填写信息

然后返回我们的配置 添加后端服务器

注:如果上图的路径不知道可以按照下图查看

构建一下看是否能成功


如果你的出现下图报错

解决办法

sudo apt install -y default-jdk


在测试服查看是否有文件

我们构建的时候看输出的内容

解决办法

再次进行编译查看  通过下图我们可以看到我们的文件已经传输完成

我们在测试服务器进行查看

因为我的虚拟机是图形化的所以文件路径和你们的应该有所不同

你们的话可以直接在家目录下有root目录

如果你感觉路径太长 可以按照下图进行更改

然后我们将服务器的文件删除

再次跑一下任务

然后再次进入测试服务器进行查看 通过下图我们可以看出更简单了

接下来我们让它传输完成后自动将jar包启动起来

再次跑一下服务然后在服务器查看


5、Jenkins配置脚本

我们上面的配置可以实现文件传输后在后端服务器自动启动jar包(服务),但是有一个问题就是我们如果已经启动运行这一个jar包(一个服务),当我们在Jenkins跑服务的时候就无法启动新的jar包,端口会冲突,所以为了更加方便我们工作,我们可以写一个脚本来实现将老的jar包(服务)删除或者移动到指定文件夹,将老的服务停止,来释放端口,从而让我们新的jar包(服务)启动。

按照下图进行配置  为文件传输前的操作

这里我们先写好脚本的路径以及名字 下面我们在服务器创建脚本文件写脚本

注:脚本的服务器是我们发布服务器的路径,脚本也是在发布服务器上的

6、登陆到测试服务器写脚本

注:脚本的路径和上面我们写的路径必须要一样

vim /root/sy.sh

这是一个简单的shell脚本有需求可自己按照需求自己写

#!/bin/bash

# 删除历史数据
rm -rf /home/sy/data/my.*.jar

appname=$1

# 获取正在运行的jar包pid
pid=$(ps -ef | grep 'my' | grep 'java -jar' | awk '{print$2}')

# 如果pid为空,提示一下,否则,执行kill命令
if [ -z "$pid" ]
then
        echo "$appname 未启动"
else
        kill -9 $pid
        echo "$appname 正在停止...."
fi

# 等待一段时间,确保进程已经停止
sleep 5

# 再次检查进程是否已经停止
if ps -p $pid > /dev/null
then
        echo "$appname 停止失败"
else
        echo "$appname 已成功停止"
fi
 

7、回到Jenkins继续配置

保存后我们的配置也就完成了。

注:上面的配置可以提交代码后我们进行合并,就会自动部署更新代码也就是我们的jar包

就是说我们将新的代码提交到代码仓库,然后选择合并,在跑一下代码就可以自动将代码达成jar包自动传输到我们的服务器,脚本会自动将我们旧的jar包停止,将新的jar包启动。

但是需要我们手动的去合并和跑一下服务:下图就是跑服务  这是大多数公司常用的配置。




4、拓展(不建议配置使用)

如果你想提交代码后不用再手动去合并和跑服务可以继续按下面的操作进行配置

2、安装插件

3、打开插件的网址查看说明

Build Authorization Token Root | Jenkins pluginicon-default.png?t=N7T8https://plugins.jenkins.io/build-token-root/

4、打开gitlab进行配置

选择我们的项目

注意这一步路径别写错了

http://192.168.26.110:8080/buildByToken/build?job=first&token=112233

说明:

http://192.168.26.110:8080/                 #是你Jenkins的访问路径

buildByToken/build?job=first                #是你Jenkins上的Item项目名称

&token=112233                                    #是你项目设置的身份令牌

触发事件按你们自己需求来

5、报错解决办法

按照第5步操作完成后然后再按照第4步重新添加一下webhooks就可以了


以上配置完成了,但是不建议使用第四步扩展,这样会消耗更多的资源,而且每次提交代码都要构建一次服务 并不合理,同样也是需要手动合并才行。

;