以下所有虚拟机基于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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐