基于 Rockylinux 9.4 搭建Jenkins+Gitlab,并且实现vue+springboot项目 CI/CD
以下所有虚拟机基于Rockylinux 9.4环境服务器IP配置1C+3G1C+2GGitlab2C+6G。
以下所有虚拟机基于Rockylinux 9.4环境
服务器 | IP | 配置 |
Jenkins+Maven+Nodejs | 192.168.200.201 | 1C+3G |
Nginx+MySQL+Redis+Java(Web) | 192.168.200.202 | 1C+2G |
Gitlab | 192.168.200.203 | 2C+6G |
Web服务器
初始化环境
hostnamectl set-hostname server
setenforce 0
sed -i.bak 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
安装MySQL
首先配置yum源和通过yum安装mysql
mkdir -p /home/packages && cd /home/packages
curl -O https://repo.mysql.com//mysql84-community-release-el9-1.noarch.rpm
rpm -ivh mysql84-community-release-el9-1.noarch.rpm
yum install mysql-community-server -y
tail -200 /var/log/mysqld.log # 查看临时密码
systemctl enable --now mysqld
开启远程登录,方便连接数据库工具。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Passw0rd!' WITH GRANT OPTION;
FLUSH PRIVILEGES;
使用连接工具连接到mysql,创建数据库person-management,并且导入sql。
# 或者使用mysql命令行直接导入
mysql -u root -p
create database person-management;
use person-management;
source /root/person-management.sql;
设置防火墙
firewall-cmd --list-ports
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
安装Redis
通过yum安装最新版redis
yum install redis -y
systemctl enable --now redis
修改配置文件
# 绑定连接的ip
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis/redis.conf
# 开启守护进程
sed -i 's/daemonize no/daemonize yes/g' /etc/redis/redis.conf
# 使用systemd守护进程
sed -i 's/# supervised auto/supervised systemd/g' /etc/redis/redis.conf
# 下方语句修改redis访问密码
sed -i 's/# requirepass foobared/requirepass Passw0rd!/g' /etc/redis/redis.conf
设置防火墙规则
firewall-cmd --list-ports
firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --reload
安装Nginx
通过yum源安装最新版nginx
yum install nginx -y
systemctl enable --now nginx
编写配置文件 /etc/nginx/conf.d/person-management.conf
server {
listen 80; # 监听80端口,也可以根据需要改为其他端口
root /opt/web-front/dist; # 你的dist目录的路径
index index.html; # 默认首页
location / {
try_files $uri $uri/ /index.html; # 用于支持Vue Router的history模式
}
location ^~ /api/ {
proxy_pass http://192.168.200.202:9090/; # 假设你的后端API在本地9090端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
设置防火墙
firewall-cmd --list-ports
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
安装Jdk8
把jdk放到对应的目录里
mv jdk-8u231-linux-x64.tar /opt/
cd /opt/
tar -xvf jdk-8u231-linux-x64.tar
ln -s jdk1.8.0_231 jdk
编写环境变量脚本
vim /etc/profile.d/jdk.sh
#!/bin/bash
# 设置JDK环境变量
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
使环境变量生效
sudo chmod +x /etc/profile.d/jdk.sh
source /etc/profile
查看版本
java -version
将jar包纳入systemd管理进程
cat << EOF > /usr/lib/systemd/system/person-management.service
[Unit]
Description=person-management
After=network.target
[Service]
Type=simple
ExecStart=/opt/jdk/bin/java -jar /opt/backend/person-management/person-management.jar -Dspring.config.location=application.yaml
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable person-management
Jenkins服务器
初始化环境
hostnamectl set-hostname Jenkins
setenforce 0
sed -i.bak 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
安装Jenkins
添加yum源,并且通过yum安装
sudo wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum upgrade
# Add required dependencies for the jenkins package
sudo yum install fontconfig java-17-openjdk
sudo yum install jenkins
sudo systemctl daemon-reload
sudo systemctl enable --now Jenkins
sudo systemctl status Jenkins
查看初始密码
cat /var/lib/jenkins/secrets/initialAdminPassword
安装完Jenkins,查看临时密码并且登录网页:192.168.200.201:8080,根据提示,选择自定义安装插件或者推荐插件即可,我这选择推荐安装插件,等待安装完成,重新登录Jenkins会显示以下画面。
安装gitlab插件
安装git
yum install git
安装maven
解压包,并且放到对应的目录
cd /opt
mv /root/apache-maven-3.8.6-bin.tar.gz .
tar -zxvf apache-maven-3.8.6-bin.tar.gz
ln -s apache-maven-3.8.6 maven
设置环境变量
vim /etc/profile.d/maven.sh
export MAVEN_HOME=/opt/maven
export PATH=$MAVEN_HOME/bin:$PATH
刷新环境变量,查看是否成功安装
source /etc/profile
mvn -v
设置国内源加速,请参考仓库服务 (aliyun.com)
安装nodejs
解压包,并且放到对应的目录
cd /opt
mv /root/node-v16.9.1-linux-x64.tar.xz .
tar -zxvf node-v16.9.1-linux-x64.tar.xz
ln -s node-v16.9.1-linux-x64 node
ln -s /opt/node/bin/node /usr/local/bin/node
ln -s /opt/node/bin/node /usr/local/bin/npm
设置环境变量
vim /etc/profile.d/node.sh
export NODEJS_HOME=/opt/node
export PATH=$NODEJS_HOME/bin:$PATH
刷新环境变量,查看是否成功安装
source /etc/profile
node -v
npm -v
设置国内源进行加速
npm config set registry https://registry.npm.taobao.org
npm config get registry
Gitlab服务器
初始化环境
hostnamectl set-hostname gitlab
setenforce 0
sed -i.bak 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
安装Gitlab
安装依赖
dnf upgrade -y
yum install -y curl policycoreutils openssh-server wget policycoreutils-python-utils postfix
yum -y groupinstall 'Development Tools'
下载rpm包并且安装
清华大学源:Index of /gitlab-ce/yum/el9/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
rpm -ivh gitlab-ce-17.2.1-ce.0.el9.x86_64.rpm --force --nodeps
修改配置文件
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.200.203' # 修改成本机的ip地址或者本机的域名
初始化Gitlab
执行初始化命令
gitlab-ctl reconfigure
安装完成根据提示找到初始密码
登录网页端
提示由于安全问题,建议关闭用户注册功能,根据提示关闭即可。
Jenkins+Gitlab整合CICD
Gitlab创建密钥对,将公钥添加到gitlab。
Jenkins创建密钥对,将公钥复制到gitlab,私钥复制到jenkins。
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub # 复制到gitlab
cat ~/.ssh/id_rsa # 复制到jenkins
Jenkins服务器里修改jenkins权限,实现执行命令功能。
修改/etc/passwd
首先我们修改Jenkins的登录权限,将/bin/false改为/bin/bash
vim /etc/passwd
切换到jenkins用户
su - jenkins
生成密钥对
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.200.202
前端vue项目
创建项目
把本地代码上传到linux的文件夹中,并通过git提交到gitlab
mkdir -p /opt/gitlab-project/
cd /opt/gitlab-project/
git clone git@192.168.200.203:root/person-management-front.git
git add .
git commit -m "init project"
git branch -M main
git push -uf origin main
在jenkins新建pipeline项目
pipeline {
agent any
stages {
stage('Checkout') {
steps {
// 检出代码
checkout([$class: 'GitSCM', branches: [[name: '*/main']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '1', url: 'git@192.168.200.203:root/person-management-front.git']]])
}
}
stage('Install Dependencies') {
steps {
// 安装依赖
sh 'npm install'
}
}
stage('Build') {
steps {
// 构建项目
sh 'npm run build'
}
}
stage('Deploy') {
steps {
// 构建项目
sh 'chmod +x ./deploy.sh'
sh './deploy.sh'
}
}
}
}
后端springboot项目
创建项目(重复上述vue项目类似步骤)
把本地代码上传到linux的文件夹中,并通过git提交到gitlab
cd /opt/gitlab-project/
git clone git@192.168.200.203:root/person-management.git
git add .
git commit -m "init project"
git branch -M main
git push -uf origin main
在jenkins新建pipeline项目
pipeline {
agent any
stages {
stage('Checkout') {
steps {
// 检出代码
checkout([$class: 'GitSCM', branches: [[name: '*/main']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '1', url: 'git@192.168.200.203:root/person-management.git']]])
}
}
stage('Build') {
steps {
// 构建项目
sh '/opt/maven/bin/mvn clean package'
}
}
stage('Deploy') {
steps {
// 构建项目
sh 'chmod +x ./deploy.sh'
sh './deploy.sh'
}
}
}
}
实现推送代码至gitlab,自动触发Jenkins的CICD
以前端项目为例:
设置对应项目,开启build when a change is ....该功能,并复制该URL。
创建token,并复制到gitlab
允许来自 webhooks 和集成对本地网络的请求
测试WebHook是否生效
我们修改一下代码,再推送到gitlab测试是否自动CICD
vim /opt/gitlab-project/person-management-front/src/views/HomeView.vue
git add .
git commit -m 'test auto cicd'
git push -uf origin main
更多推荐
所有评论(0)