Jenkins + GitLab 搭建 CICD

环境介绍

采用三台服务器来 jenkins 自动部署功能,如果有需要可以自己查询对应的官方文档

gitlab官网

jenkins 官网

  • 这个是服务器说明

注:jenkins 服务器尽量给多一点内存,由于我三台服务器都是 4核4G,其他两个够用,但是 jenkins不够用,导致在构建的时候一直转圈,后面排查才发现原来啊是内存不够导致一致转圈等待
注:这里写错了 Project192.168.188.203
在这里插入图片描述

GitLab 环境搭建

GitLab是一个‌基于Git的DevOps全生命周期管理平台‌,它将版本控制、持续集成/交付(CI/CD)、安全合规、敏捷项目管理等功能整合到一个统一的系统中。

安装

按照官方文档安装 Omnibus 版 最少内存需要 4GB,原文中涉及的网址如下

参考架构文档安装所需资源的最低要求极狐GitLab 官方文档

在这里插入图片描述

由于 CentOS 7 和 8 都已经 EOF(end of life),因此极狐GitLab 官方不再支持在 CentOS 7 和 8 上进行安装。请您选择其他操作系统并根据对应的步骤进行安装

在这里插入图片描述

  • 安装依赖
## 安装 所需依赖
sudo yum install -y curl policycoreutils-python openssh-server perl
## sshd 设置为自定启动
sudo systemctl enable sshd
## 启动 sshd
sudo systemctl start sshd
## 查看 sshd 状态
sudo systemctl status sshd

在这里插入图片描述
在这里插入图片描述

  • 配置镜像
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

可能要等待一会儿,文件比较大,出现 successfully added gitlab-jh repo. 就代表成功了

在这里插入图片描述

  • 安装
# 查看本机ip地址
ip addr
# 将地址挂载到你本地
# sudo EXTERNAL_URL="http://你的ip地址" yum install -y gitlab-jh
sudo EXTERNAL_URL="http://192.168.188.202" yum install -y gitlab-jh

在这里插入图片描述
在这里插入图片描述

  • 出现这种情况,gitlab安装完毕,并已经启动成功

GitLab should be available at http://192.168.188.202,这个是 gitlab 的访问地址,默认启动端口是80端口

在这里插入图片描述

  • 测试 GitLab 是否启动成功

需要保证 80 端口已经开放,否则无法访问到对应的端口

在这里插入图片描述

  • GitLab的常用命令
gitlab-ctl start                  # 启动所有 gitlab 组件;
gitlab-ctl stop                   # 停止所有 gitlab 组件;
gitlab-ctl restart                # 重启所有 gitlab 组件;
gitlab-ctl status                 # 查看服务状态;
gitlab-ctl reconfigure            # 启动服务;
vi /etc/gitlab/gitlab.rb         # 修改默认的配置文件;
gitlab-ctl tail                   # 查看日志;
  • 启动GitLab
gitlab-ctl start
  • 进入登录界面,首次用户默认是root,进入目录下查看密码
## 密码位于 /etc/gitlab 下,可以使用以下命令实现打印密码
cat /etc/gitlab/initial_root_password

在这里插入图片描述

  • 开放80端口
开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone=public --query-port=80/tcp
删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent
  • 登录 GitLab

初始的账号 root
初始的密码就是刚才复制的那一串代码

在这里插入图片描述

登录成功后进入 GitLab 首页

在这里插入图片描述

其他配置

  • 修改初始密码

初始密码只有24小时内生效,所以需要改一下初始密码

在这里插入图片描述

  • 切换中文

修改后点击保存,然后刷新一下页面就能实现中文汉化

在这里插入图片描述
在这里插入图片描述

创建仓库

为了模拟真实的前后端项目构建,所以这里采用将 若依框架 进行学习,将代码拷贝到对应的仓库中

我们这里模拟企业开发的代码不开源状态,所以这里创建的是私密仓库,然后配置 凭证 拉取代码

在这里插入图片描述

Jenkins 环境搭建

Jenkins官网

Jenkins中文网

jenkins官网

安装Jenkins的环境需求

  • 机器要求:

    • 256 MB 内存,建议大于 512 MB
    • 10 GB 的硬盘空间(用于 Jenkins 和 Docker 镜像)
  • 需要安装以下软件:

    • Java 8 ( JRE 或者 JDK 都可以)
    • Docker
  • 并不是所有的 jenkins 版本都支持 java 8

按需选择自己所要安装的 jenkins 版本,以及对应的 jdk 版本

在这里插入图片描述

java 和 jenkins的对应关系

在这里插入图片描述

安装 JDK

以为 yum 没有jdk 17 的选项,所以采用离线方式安装 jdk17 如果服务器中存在其他java版本可以先卸载,卸载步骤这里不过多赘述

centos7 安装 java 17

yum install wget
## 下载  Alibaba_Dragonwell_Standard_17.0.14.0.15.7_x64_linux.tar.gz 到 /usr/local
sudo wget -P /usr/local https://dragonwell.oss-cn-shanghai.aliyuncs.com/17.0.14.0.15%2B7/Alibaba_Dragonwell_Standard_17.0.14.0.15.7_x64_linux.tar.gz
## 进入文件夹中
cd /usr/local/
## 解压 Alibaba_Dragonwell_Standard_17.0.14.0.15.7_x64_linux.tar.gz
sudo tar -zxvf Alibaba_Dragonwell_Standard_17.0.14.0.15.7_x64_linux.tar.gz
## 进入解压后的文件夹
cd /usr/local/dragonwell-17.0.14.0.15+7-GA
## 配置 JAVA_HOME
echo "export JAVA_HOME=/usr/local/dragonwell-17.0.14.0.15+7-GA" | sudo tee -a /etc/profile
## 配置 Path
echo "export PATH=\$PATH:\$JAVA_HOME/bin" | sudo tee -a /etc/profile
## 重载变量
source /etc/profile
## 查看java版本号
java -version

在这里插入图片描述

在这里插入图片描述

安装Maven

下载这个是用于构建项目使用的,如果项目采用的的是 gradle,则需要安装 gradle

  • 下载 maven 压缩包
# 下载 maven 的依赖
wget -P /usr/local https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz --no-check-certificate

在这里插入图片描述

  • 解压压缩包
## 键入目录下 
cd /usr/local/
# 解压 maven 文件
tar -zxvf apache-maven-3.8.8-bin.tar.gz

在这里插入图片描述

  • 配置阿里镜像
vim /usr/local/apache-maven-3.8.8/conf/settings.xml

注释掉原先的仓库,使用阿里仓库,然后退出保存

切记不要注释错了,注释错位置那就拉取不到代码了

<mirror>  
    <id>alimaven</id>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>        
</mirror>

在这里插入图片描述

  • 查看 maven 版本
/usr/local/apache-maven-3.8.8/bin/mvn -v

在这里插入图片描述

安装 Git

用于拉取 git 仓库代码

  • 安装所需要环境
yum -y install libcurl-devel expat-devel curl-devel  gettext-devel openssl-devel zlib-devel
yum -y install  gcc perl-ExtUtils-MakeMaker
  • 安装 git
yum install -y git

在这里插入图片描述

  • 查看版本
git  --version
  • 查看git位置
which git
  • 创建密钥

下面参数根据个人喜好配置即可

# 设置名称
git config --global user.name "jenkins"
# 设置邮箱
git config --global user.emial "jenkins@gitlab.com"
# 生成密钥
ssh-keygen -t rsa -b 4096 -C "jenkins@gitlab.com"

在这里插入图片描述

将公钥 id_rsa.pub 里面的内容拷贝到 GitLab 的 sshKey 里面

在这里插入图片描述

点击添加新密钥

在这里插入图片描述

填入刚获取的公钥

在这里插入图片描述

保存后会出现出现刚添加的密钥

在这里插入图片描述

安装 jenkins

下载网址

在这里插入图片描述

这个你们要放在哪个文件夹都可以,个人习惯放在 /home

在这里插入图片描述

  • 启动脚本
## 可以指定端口
java -jar jenkins.war --httpPort=8080
## 后台运行 
nohup java -jar jenkins.war  &
## 实时更新日志
tail -f nohup.out

在这里插入图片描述

  • 登录页面

默认端口是 8080 ,初始化密码在日志中打印出来了,

## ip地址换成你的服务器ip地址
http://192.168.188.201:8080/

在这里插入图片描述

  • 安装插件

如果不知道怎么选,采用默认的方式实现安装插件

在这里插入图片描述

开始安装插件,如果出现某些插件安装失败,可以 重试 或 先跳过,后续再进行插件安装

在这里插入图片描述

  • 管理员添加

因为我使用的是最新版的,所以没有出现插件安装失败的情况,如果插件安装失败,会出现重试按钮

在这里插入图片描述

  • 配置网址

在这里插入图片描述

在这里插入图片描述

  • 登录成功

在这里插入图片描述

添加凭证

因为我们的仓库是私有的,需要有权限才能够访问

所以添加这个密钥是为了实现免登录拉取代码

在这里插入图片描述

这个是之前 git 生成的密钥对中的 私钥

在这里插入图片描述
在这里插入图片描述

安装相应插件并配置

安装 maven 插件并配置

在这里插入图片描述
在这里插入图片描述

  • 配置全局的 maven 信息

在这里插入图片描述

这个 maven 的配置信息地址在上面有,添加完毕后选择保存

在这里插入图片描述
在这里插入图片描述

安装完毕后创建项目的时候就会出现下面选项

在这里插入图片描述

配置 git

如果采用默认 yum 方式安装可不用配置 git

在这里插入图片描述

配置 java

在这里插入图片描述

Publish Over SSH插件

建立远程连接,然后将项目传递到需要部署的服务器上

在这里插入图片描述

  • 配置 ssh

需要填入 远程连接名称远程连接主机名登录用户远程路径

在这里插入图片描述

点击系统配置,找到Publish Over SSH进行配置

在这里指定过目标远程目录后,在配置项目的Post Steps的设置中就不需要再设置

在这里插入图片描述

  • 点击高级,设置远程服务器登录密码

在这里插入图片描述

测试连接远程主机成功

在这里插入图片描述

全部信息如下

在这里插入图片描述

配置 Node.js

用于构建前端项目[192.168.188.201]

  • 安装所需要的依赖项
sudo yum install epel-release
  • 安装
## 下载 node 压缩包
sudo yum install nodejs npm

在这里插入图片描述

  • 查看 node 版本
node -v
npm -v

在这里插入图片描述
在这里插入图片描述

  • 查看node在哪
which node

在这里插入图片描述

  • 安装 node 插件

由于我之前已经安装过,只是把它停用了,所以只要把它打开即可

如果没有安装过需要在 available plugins 里面安装

在这里插入图片描述

  • 配置 node 信息

node 的路径可以通过上面的 which node 获得

在这里插入图片描述

  • 提前安装好构建工具
# npm or cnpm or yarn
# 这里以 cnpm 为例
npm install -g cnpm --registry=https://registry.npmmirror.com

在这里插入图片描述

构建项目 [非容器方式]

构建后端

新建 item

在这里插入图片描述

选择仓库

源码管理 选择 Git 模式

填写仓库URL凭证分支

分支可以查看仓库的左上角

在这里插入图片描述

触发器配置

这边先采用手动触发,所以不勾选任何选项

Pre Steps

前置步骤:提前停止远程服务器中的服务器,避免出现端口被占用的情况,所以这个步骤通常是前置清理作用

  • 编写远程服务器脚本 [192.168.188.203]
#! /bin/bash

# 删除历史数据
rm -rf /home/ruoyi-admin.jar
rm -rf /home/nohup.out 

# 停止服务
pid=`ps -ef | grep demo | grep 'java -jar' | awk '{printf $2}'`
echo $pid >> a.txt
if [ -z $pid ];
        then
                echo "appname not started!" >> a.txt
        else
                kill -9 $pid
                echo "appname stop success!" >> a.txt
fi

在这里插入图片描述

调用停止服务的脚本

在这里插入图片描述

指定构建 pom.xml文件的位置

在这里插入图片描述

由于位于根目录下,所以直接写 pom.xml

在这里插入图片描述

post steps

我们要将打包后的文件发送过去,所以需要选择 Send files or execute commands over SSH

在这里插入图片描述

这次先 推送启动,这个有个小问题,jar 的路径最好是写全路径,便于定位

在这里插入图片描述

优化一下,编写快捷启动脚本

nohup java -jar /home/ruoyi-admin.jar &

在这里插入图片描述

修改构建命令

在这里插入图片描述

模拟测试

在这里插入图片描述

执行后点击 Name 就可以进入程序中,获取到最近项目的执行过程,都会在左侧看到情况

在这里插入图片描述

选择 #7 后进去查看,如果出现这种情况,代表构建没有出错

如果要查看详细信息,选择控制台输出,查看控制台输出了什么

在这里插入图片描述

查看 192.168.188.203 是否推送成功文件,出现这种情况代表文件推送成功

在这里插入图片描述

重新测试了一遍

在这里插入图片描述

构建前端

创建 item

在这里插入图片描述

在这里插入图片描述

选择仓库

因为这个项目前后端代码放在一起的,所以文件仓库地址都一样

在这里插入图片描述

在这里插入图片描述

触发器配置

这边先采用手动触发,所以不勾选任何选项

在这里插入图片描述

build steps

命令依次是:

  • 清除缓存
  • 以绝对路径的方式进入到从远程仓库拉取到的Vue项目的根目录下(Jenkins默认的拉取目录路径是/root/.jenkins/workspace
  • 安装package.json文件中的依赖包到并且生成node_modules文件夹
  • 打包成dist文件夹
  • 将dist文件夹压缩成prod.tar.gz文件
cd /root/.jenkins/workspace/ruoyi-front/ruoyi-ui/
npm cache clean -f
cnpm install --loglevel verbose
## 解决 core.js 报错
cnpm install core-js@3 --save
npm run build:prod --verbose
cd dist
tar -cvf prod.tar.gz ./

在这里插入图片描述

构建后操作
  1. 构建后的任务就是将刚刚压缩好的dist.tar.gz发送到远程目录。
  2. 在目标主机上创建".sh脚本文件",用于将刚刚发送到远程目录的压缩包进行解压

命令依次是:

  • 以绝对路径的方式进入到 /usr/local/nginx/html 目录下(此目录就是存放Vue打包成的dist文件夹压缩包的位置)

为了测试是否推送成功,重新配置了一个端口,文件路径在 /usr/local/nginx/html 下,现在是这样的,我们测试推送成后这个页面是否会改变

在这里插入图片描述

在这里插入图片描述

  • 解压安装包
  • 以绝对路径的方式删除压缩包
cd /home
cp /home/prod.tar.gz /usr/local/nginx/html
cd /usr/local/nginx/html
tar -xvf /usr/local/nginx/html/prod.tar.gz
rm -rf /usr/local/nginx/html/prod.tar.gz
  1. 配置SSH Server,选择发送到的目标主机,将压缩包发送到目标目录,
  • 注意

如果如果配置了全局远程地址,又在构建的远程地址添加路径,最终的结果不会是 构建地址全局地址,而是两个地址拼接起来的新地址

在这里插入图片描述

在这里插入图片描述

所以这里的解决方法采用将文件从/home 移动到 /usr/local/nginx/html 路径

在这里插入图片描述

在这里插入图片描述

cd /home
cp /home/prod.tar.gz /usr/local/nginx/html
cd /usr/local/nginx/html
tar -xvf /usr/local/nginx/html/prod.tar.gz
rm -rf /usr/local/nginx/html/prod.tar.gz

修改后这样就将代码到 /usr/local/nginx/html 下了

在这里插入图片描述

测试

访问一下网址,查看是页面是否正常渲染出来,出现下面这种情况就代表前构建成功了

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值