文章目录
环境介绍
采用三台服务器来 jenkins 自动部署功能,如果有需要可以自己查询对应的官方文档
- 这个是服务器说明
注:jenkins 服务器尽量给多一点内存,由于我三台服务器都是
4核4G
,其他两个够用,但是 jenkins不够用,导致在构建的时候一直转圈,后面排查才发现原来啊是内存不够导致一致转圈等待
注:这里写错了Project
是192.168.188.203
GitLab 环境搭建
GitLab是一个基于Git的DevOps全生命周期管理平台,它将版本控制、持续集成/交付(CI/CD)、安全合规、敏捷项目管理等功能整合到一个统一的系统中。
安装
按照官方文档安装 Omnibus 版 最少内存需要 4GB,原文中涉及的网址如下
由于 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的环境需求
-
机器要求:
- 256 MB 内存,建议大于 512 MB
- 10 GB 的硬盘空间(用于 Jenkins 和 Docker 镜像)
-
需要安装以下软件:
- Java 8 ( JRE 或者 JDK 都可以)
- Docker
-
并不是所有的 jenkins 版本都支持 java 8
按需选择自己所要安装的 jenkins 版本,以及对应的 jdk 版本
安装 JDK
以为 yum 没有jdk 17 的选项,所以采用离线方式安装 jdk17 如果服务器中存在其他java版本可以先卸载,卸载步骤这里不过多赘述
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 ./
构建后操作
- 构建后的任务就是将刚刚压缩好的dist.tar.gz发送到远程目录。
- 在目标主机上创建".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
- 配置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
下了
测试
访问一下网址,查看是页面是否正常渲染出来,出现下面这种情况就代表前构建成功了