一、部署环境
系统环境 | 主机 IP | 主机名 | 软件版本 |
Rocky8.7 | 192.168.15.101 | JK1 | Java-17 Jenkins-2.414.2 git-2.39.3-1 maven-3.9.6 PostgreSQL-16 SonarQube-10.3.0 |
Rocky8.7 | 192.168.15.102 | GIT | gitlab-ce-12.10.14 git-2.39.3 |
Rocky8.7 | 192.168.15.103 | Tom | Java-17 tomcat-9.0.22 |
Rocky8.7 | 192.168.15.104 | JIRA | Java-17 Jira-7.2.2 MySQL-5.7.18 |
Rocky8.7 | 192.168.15.11 | k8s-master01 | Kubernetes v1.28.2 |
Rocky8.7 | 192.168.15.13 | k8s-node01 | Kubernetes v1.28.2 |
Rocky8.7 | 192.168.15.14 | k8s-node02 | Kubernetes v1.28.2 |
二、安装 Jenkins
JK1 主机安装 Jenkins
1. 安装 JDK
[root@JK1 ~]# yum install -y java-17*
[root@JK1 ~]# java -version
openjdk version "17.0.10" 2024-01-16 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.10.0.7-1) (build 17.0.10+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.10.0.7-1) (build 17.0.10+7-LTS, mixed mode, sharing)
2. 安装 Jenkins 的 yum 源
[root@JK1 ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# wget下载Jenkins的yum源,使其保存到/etc/yum.repos.d/下
[root@JK1 ~]# cd /etc/yum.repos.d/
[root@JK1 ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
# 使用rpm导入Jenkins 软件包的GPG密钥,以确保安装的软件包是经过验证的,并且没有被篡改过
[root@JK1 yum.repos.d]# yum install -y epel-release
# 安装EPEL的发行包,通过安装EPEL发行包,可以访问一些常用的第三方软件包
[root@JK1 yum.repos.d]# yum install jenkins-2.414.2
# 安装2.414.2版本的Jenkins
[root@JK1 ~]# systemctl start jenkins.service
# 安装完成后启动Jenkins
[root@JK1 ~]# netstat -anpt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 35146/java
3. 初始化 Jenkins
使用 IP+Port 登录 Jenkins
找到解决 Jenkins 的密码,复制到网页上进行 Jenkins 初始化
[root@JK1 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword # war包安装的在root目录下的.jenkins/secrets/initialAdminPassword
34d4c9c8478546429a79991121a3f7c1
配置国内插件源地址
[root@JK1 ~]# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
[root@JK1 ~]# systemctl restart jenkins.service
选择“安装推荐的插件”,等待系统自行安装即可,后续注册自行注册,也可以直接选择 admin 身份登录
三、安装 Gitlab
1. 安装 Gitlab
GIT 主机安装 Gitlab
安装前确保主机内存 ≥ 2G,等待 Gitlab 初始化完成即可
[root@GIT ~]# yum -y install git
[root@GIT ~]# yum -y install curl openssh-server postfix cronie policycoreutils-python
[root@GIT ~]# wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/8/gitlab-ce-12.10.14-ce.0.el8.x86_64.rpm/download.rpm
[root@GIT ~]# rpm -ivh gitlab-ce-12.10.14-ce.0.el8.x86_64.rpm
[root@GIT ~]# gitlab-ctl reconfigure
[root@GIT ~]# cd /var/opt/gitlab/gitlab-rails/etc
[root@GIT etc]# vim gitlab.yml # 修改gitlab配置
# This file is managed by gitlab-ctl. Manual changes will be
# erased! To change the contents below, edit /etc/gitlab/gitlab.rb
# and run `sudo gitlab-ctl reconfigure`.
production: &base
#
# 1. GitLab app settings
# ==========================
## GitLab settings
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: 192.168.15.102 # 修改IP
port: 82 # 修改端口
https: false
[root@GIT etc]# vim /etc/gitlab/gitlab.rb
1197 nginx['listen_port'] = 82 # 取消注释,修改端口
[root@GIT ~]# vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
34 server {
35 listen *:82; # 修改端口
[root@GIT etc]# gitlab-ctl restart
[root@GIT ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:bgXRB7i7FuKjxWUeVPf9L9sKB3aSDPqWFGOaACCCrw4 root@GIT
The keys randomart image is:
+---[RSA 3072]----+
|+ ... .oo.. |
|o. . .o.... . |
| . . o.=. . .|
| . o.* = . .|
| . S.o * . .|
|E ..=o= o + .|
|o .o.+o+ . o .|
| . .o.o. o + |
| .. o o..|
+----[SHA256]-----+
[root@GIT ~]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtGCxLECJavppDQAOAHA65GQzpJAipy73qDo7Eh1h8X99wG9bZn/NnQ+jn0W8j/ABWkUkWGQ48PFp0S//94mnUHAC2O/Po4MAGANkFHAqSiv3prPbtBDrwXRJjdN7DwEVCHOhdqSQp6C0v3+0RJ6VmvXCF6isi6pDGGLHgLKHl0yLrG7Off0nTmfKx3reH1x5M9/tQITzQqItzpiOgdPsrs7rT2NFzBoKEIFqhxwIT5K7lQYUlgUDIMEI24wfVny7L5VMKDs0I1aY22YE+zLp8RqfNhSpM92odK0TOLxQ3cQ0QF3JwF20tRjQ0gEfzjcEOsVr37bsDxdP1R/8RXdAO9KR9elIbsbk+njq9M4EO0cwRZFYf3dMK7e9dvSHaZJQM7dPHRY9o/E78+6QjkcDR0Q8TJaYSjV9EWpbHzoa6K9Eiiv+WVPNjjxylpCiU2OuheguylFNpZQ8r/2kkMttYZs2ZG1Bx9CFAir2Ob2Zw0JKlecpSL2CRGvrXcnPW4xk= root@GIT
# 将上行公钥复制下来
输入 IP+端口,192.168.15.102:82 进入 gitlab 页面,首次登录请设置密码,然后按照如下步骤点击
2. 安装 Git
JK1 主机安装
[root@JK1 ~]# yum -y install git
安装 git 后,在 Jenkins 页面上安装 git 插件,已安装可忽略
3. Jenkins 配置凭证
3.1. 创建 Gitlab 的凭证
按照红线提示找到 Global credentials (unrestricted),点击进去
3.2. 创建凭证用户
类型:Username with password(密码凭证)
范围:Global(全局凭证)
用户名:root(gitlab 的用户名,如果有子项目用户也可以写)
密码:(该用户登录 gitlab 的密码)
描述:(随意)
4. 测试项目
4.1. Gitlab 创建项目
登录 Gitlab 页面:192.168.15.102
4.2. 创建测试文件
4.3. Jenkins 创建项目
4.4. Jenkins 项目配置
回到 Gitlab 页面,将 clone 地址复制下来,密码凭证复制 HTTP 的,密钥对凭证复制 SSH 的
回到 jenkins 页面选择源码管理——>Git,Credentials 选择之前创建的 root 凭证,点击保存
4.5. 测试拉取代码
点击 Build Now,等待代码拉取完成
点击#1 进入项目构建记录,点击控制台输出
测试成功,Jenkins 可以通过凭证正常拉取 Gitlab 代码!
四、项目打包
1. 安装 maven
JK1 主机安装 maven
1.1. 下载解压 maven
maven 官方网站:Maven – Welcome to Apache Maven
自行下载(看不懂英文找翻译)
本次使用 maven-3.9.6 版本,下载后导入到终端
[root@JK1 ~]# ls
公共 视频 文档 音乐 anaconda-ks.cfg hostname.sh ip.sh
模板 图片 下载 桌面 apache-maven-3.9.6-bin.tar.gz initial-setup-ks.cfg overlay
[root@JK1 ~]# tar xf apache-maven-3.9.6-bin.tar.gz
[root@JK1 ~]# mv apache-maven-3.9.6 /opt/maven
1.2. 配置环境变量
[root@JK1 ~]# vim /etc/profile
......最后一行追加如下内容:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
1.3. 编辑 maven 配置文件
使用 vim 搜索功能找到<localRepository>模块和<mirrors>模块,分别修改为如下内容
[root@JK1 ~]# vim /opt/maven/conf/settings.xml
--> # 该行添加这个符号
<localRepository>/opt/maven/repo</localRepository>
# 删除该行-->符号
......
<mirrors>
......
<mirror> # 如下是阿里云maven源
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>*</mirrorOf>
</mirror>
[root@JK1 ~]# mkdir /opt/maven/repo
[root@JK1 ~]# chmod 777 /opt/maven/repo
2. Jenkins 集成 maven
2.1. 配置 maven
Dashboard ——> Manage Jenkins ——> Tools,下滑找到 JDK 安装模块,按下图配置即可
再下滑找到 maven 安装模块,按照下图配置
2.2. 配置 Jenkins 全局变量
Dashboard ——> Manage Jenkins ——> System,下滑找到全局属性,按照下图配置,保存
2.3. 下载 maven 插件
Dashboard ——> Manage Jenkins ——> Plugins ——> Available plugins,搜索 maven,选择 maven intergration 插件下载安装(已下载可忽略该步)
3. 下载项目模板
Project:Maven
Language:Java
SpringBoot:只选 3.2.2,SNAPSHOT(快照类型的不要选,会报错)
Project Metadata:无需修改
Packaging:War
Java:17(按照自己安装的 Java 版本选择)
右侧 Dependencies:添加依赖,添加 Spring Web 依赖,使 demo 项目拥有可定制的 web 功能。
最后点击下方的 GENERATE 把前端项目下载出来!
4. 推送项目到 Gitlab
4.1. 解压项目
将下载的项目压缩包导入到 GIT 主机
[root@GIT ~]# ls
公共 文档 anaconda-ks.cfg initial-setup-ks.cfg
模板 下载 'demo_(1).zip' ip.sh
视频 音乐 gitlab-ce-12.10.14-ce.0.el8.x86_64.rpm
图片 桌面 hostname.sh
[root@GIT ~]# unzip 'demo_(1).zip'
Archive: demo_(1).zip
creating: demo/
inflating: demo/HELP.md
inflating: demo/.gitignore
creating: demo/src/
creating: demo/src/main/
creating: demo/src/main/java/
creating: demo/src/main/java/com/
creating: demo/src/main/java/com/example/
creating: demo/src/main/java/com/example/demo/
inflating: demo/src/main/java/com/example/demo/DemoApplication.java
creating: demo/src/main/resources/
inflating: demo/src/main/resources/application.properties
creating: demo/src/test/
creating: demo/src/test/java/
creating: demo/src/test/java/com/
creating: demo/src/test/java/com/example/
creating: demo/src/test/java/com/example/demo/
inflating: demo/src/test/java/com/example/demo/DemoApplicationTests.java
inflating: demo/pom.xml
inflating: demo/mvnw
inflating: demo/mvnw.cmd
creating: demo/.mvn/
creating: demo/.mvn/wrapper/
inflating: demo/.mvn/wrapper/maven-wrapper.properties
inflating: demo/.mvn/wrapper/maven-wrapper.jar
4.2. 创建 Gitlab 项目
Gitlab 首页点击 New Project,创建名为“maven-demo”的项目
4.3. 推送项目到 Gitlab 新建的项目
[root@GIT ~]# cd demo/
[root@GIT demo]# ls
HELP.md mvnw mvnw.cmd pom.xml src
[root@GIT demo]# cd src/main/java/com/example/demo/
[root@GIT demo]# ls
DemoApplication.java ServletInitializer.java
[root@GIT demo]# cp DemoApplication.java HelloController.java
[root@GIT demo]# vim HelloController.java # 修改代码
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/")
public String hello() {
return "Hello World!";
}
}
[root@GIT resources]# cd /root/demo/src/main/resources
[root@GIT resources]# vim application.properties
server.port=9090
[root@GIT demo]# cd /root/demo/
[root@GIT demo]# git init
提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
提示:配置使用初始分支名,并消除这条警告,请执行:
提示:
提示: git config --global init.defaultBranch <名称>
提示:
提示:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
提示:可以通过以下命令重命名刚创建的分支:
提示:
提示: git branch -m <name>
已初始化空的 Git 仓库于 /root/demo/.git/
[root@GIT demo]# git add .
[root@GIT demo]# git remote add origin "git@192.168.15.102:root/maven-demo.git" # 这个地址是Gitlab项目的clone地址
[root@GIT demo]# git commit -m "maven"
[master(根提交) e02c5a4] maven
9 files changed, 616 insertions(+)
create mode 100644 .gitignore
create mode 100644 .mvn/wrapper/maven-wrapper.jar
create mode 100644 .mvn/wrapper/maven-wrapper.properties
create mode 100755 mvnw
create mode 100644 mvnw.cmd
create mode 100644 pom.xml
create mode 100644 src/main/java/com/example/demo/DemoApplication.java
create mode 100644 src/main/resources/application.properties
create mode 100644 src/test/java/com/example/demo/DemoApplicationTests.java
[root@GIT demo]# git push -u origin master
枚举对象中: 25, 完成.
对象计数中: 100% (25/25), 完成.
使用 2 个线程进行压缩
压缩对象中: 100% (15/15), 完成.
写入对象中: 100% (25/25), 62.83 KiB | 15.71 MiB/s, 完成.
总共 25(差异 0),复用 0(差异 0),包复用 0
To 192.168.15.102:root/maven-demo.git
* [new branch] master -> master
分支 'master' 设置为跟踪 'origin/master'。
5. Jenkins 创建 maven 项目
回到 Jenkins 首页,新建 Item,构建一个 maven 项目
6. maven 项目配置
6.1. 复制 Gitlab 项目地址
先回到 Gitlab 页面点击刚才创建的 maven-demo 项目,将 clone 地址复制,因为之前创建的密码凭证,所以需要复制 HTTP 的地址
6.2. 源码管理
回到 Jenkins 页面,找到刚才创建的 maven 项目的 configure 中的源码管理,选择 Git
Repository URL:Gitlab 的项目地址
Credentials:为 Gitlab 用户新建的 Jenkins 凭证
6.3. Build
下滑找到 Build 模块,按如下内容填写即可,最后保存
7. 构建测试
7.1. 开始构建
点击 Build Now,等待项目构建完成
7.2. 查看输出结果
点击 #1 ——> 控制台输出
7.3. maven 打包成功
回到终端验证 jar 包是否打包完成
[root@JK1 ~]# cd /var/lib/jenkins/workspace/mvn-project
[root@JK1 mvn-project]# ls
mvnw mvnw.cmd pom.xml src target
[root@JK1 mvn-project]# cd target/
[root@JK1 target]# ls
classes generated-sources maven-status
demo-0.0.1-SNAPSHOT.war generated-test-sources surefire-reports
demo-0.0.1-SNAPSHOT.war.original maven-archiver test-classes
[root@JK1 target]# java -jar demo-0.0.1-SNAPSHOT.war # 测试jar包是否可执行
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.2)
2024-02-06T10:01:21.299Z INFO 1 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication v0.0.1-SNAPSHOT using Java 17-ea with PID 1 (/app.war started by root in /)
2024-02-06T10:01:21.302Z INFO 1 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to 1 default profile: "default"
2024-02-06T10:01:22.411Z INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2024-02-06T10:01:22.424Z INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2024-02-06T10:01:22.424Z INFO 1 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.18]
2024-02-06T10:01:22.501Z INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2024-02-06T10:01:22.502Z INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1094 ms
2024-02-06T10:01:22.884Z INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 9090 (http) with context path ''
2024-02-06T10:01:22.904Z INFO 1 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 2.203 seconds (process running for 2.706)
7.4. 访问测试页面
五、SonarQube 代码审查
1. 安装 Postgre SQL
JK1 主机安装 Postgre SQL
sonarqube 在 7.9 版本后不再支持 MySQL 数据库,此时需要安装 Postgre SQL,下载过程稍微会有些慢
[root@JK1 ~]# dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 下载pgsql的yum源
[root@JK1 ~]# dnf -qy module disable postgresql # 密钥对验证
[root@JK1 ~]# dnf install -y postgresql16-server # 安装pgsql-16服务端
[root@JK1 ~]# /usr/pgsql-16/bin/postgresql-16-setup initdb # pgsql数据库初始化
[root@JK1 ~]# vim /var/lib/pgsql/16/data/pg_hba.conf
......下方修改为如下内容......
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication all peer
#host replication all 127.0.0.1/32 scram-sha-256
#host replication all ::1/128 scram-sha-256
[root@JK1 ~]# systemctl start postgresql-16.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
启动“postgresql-16.service”需要认证。
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ====
2. 配置数据库
[root@JK1 ~]# sudo passwd postgres
[root@JK1 ~]# su - postgres # 使用postgres用户身份登录
[postgres@JK1 ~]$ createuser sonar
[postgres@JK1 ~]$ psql # 进入pgsql命令行
psql (16.1)
输入 "help" 来获取帮助信息.
postgres=# alter user sonar with encrypted password 'sonar'; # 为sonar用户设置密码
ALTER ROLE
postgres=# create database sonar with encoding 'UTF8' owner sonar template=template0; # 创建数据库
CREATE DATABASE
3. 下载 SonarQube
官方网站:Download | SonarQube | Sonar
下载社区版即可,下载完成后导入到 JK1 主机内
[root@JK1 ~]# yum -y install unzip
[root@JK1 ~]# unzip sonarqube-10.3.0.82913.zip
[root@JK1 ~]# ls
公共 下载 apache-maven-3.9.6-bin.tar.gz sonarqube-10.3.0.82913
模板 音乐 hostname.sh sonarqube-10.3.0.82913.zip
视频 桌面 initial-setup-ks.cfg
图片 anaconda-ks.cfg ip.sh
文档 apache-maven-3.9.6 overlay
[root@JK1 ~]# mkdir /opt/sonar
[root@JK1 ~]# mv sonarqube-10.3.0.82913/* /opt/sonar/
[root@JK1 ~]# useradd sonar
[root@JK1 ~]# chown -R sonar. /opt/sonar/
[root@JK1 ~]# cat >> /etc/sysctl.conf << END
> vm.max_map_count=262144 # 开启最大虚拟内存为262144,否则sonarqube启动不了
> END
[root@JK1 ~]# sysctl -p
vm.max_map_count = 262144
[root@JK1 ~]# vim /opt/sonar/conf/sonar.properties
26 sonar.jdbc.username=sonar # pgsql数据库的账号
27 sonar.jdbc.password=sonar # pgsql数据库的密码
44 sonar.jdbc.url=jdbc:postgresql://localhost/sonar
[root@JK1 ~]# su sonar /opt/sonar/bin/linux-x86-64/sonar.sh start
/usr/bin/java
Starting SonarQube...
Started SonarQube.
4. 访问 SonarQube 页面
SonarQube 地址:http://192.168.15.101:9000,默认用户名为 admin,密码为 admin
5. 创建 Token 凭证
Sonar 页面,点击右上角头像,点击 My Account,按红线提示依次点击,输入完信息后点击 Generate 生成即可
token 凭证必须要复制!!!否则 Jenkins 无法登录到 Sonar
6. 安装 Jenkins 插件
回到 Jenkins 页面,搜索插件 SonarQube Scanner 插件,安装
7. 安装 SonarQube-Scanner
回到 Jenkins 管理,点击 Tools,找到 SonarQube-Scanner 安装,点击新增安装,写个名称,保存即可
8. 连接 SonarQube 服务
回到 Manage Jenkins,点击 System,下滑找到 SonarQube Servers,点击 Add SonarQube,先按照如下模板填写信息,再点击添加
弹出窗口,类型选择 Secret Text,然后在 Secret 框内粘贴之前生成的 Sonar 的 token 认证,描述写成该凭证名即可(随意)
添加完成后,选择刚才创建的凭证,点击保存
9. SonarQube 关闭 SCM
回到 Sonar 页面,依次按提示点击,关闭审查结果上传到 SCM 功能
10. 构建前操作
回到 Jenkins,点击之前创建的 maven 项目,点击 Configure,找到 Pre steps,点击 Add pre-build step,选择 Execute SonarQube Scanner,按下图内容填写:
Analysis properties 的模板:
# must be unique in a given SonarQube instance
sonar.projectKey=mvn-project # 可以写自己的项目名称
# this is the name and version displayed in the SonarQube UI. Was mandatoryprior to SonarQube 6.1.
sonar.projectName=mvn-project # 项目名
sonar.projectVersion=1.0 # 该项目的版本
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=. # 项目的目录
sonar.exclusions=**/test/**,**/target/**,**/java/** # 在项目目录下不检测的某些目录。注意:后缀有Java的文件要去除!
sonar.java.source=17 # 该项目使用的jdk版本
sonar.java.target=17
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
11. 开始构建
点击 Build Now,然后查看控制台输出
12. 查看代码检查结果
回到 Sonar 首页,找到生成的已检查的项目,点击 Code,自行翻译
六、项目部署到容器
1. 部署 Tomcat 服务器
1.1. 安装 Tomcat
Tomcat 官网下载软件包:Apache Tomcat® - Welcome!
[root@Tom tomcat]# yum -y install java-17*
[root@Tom ~]# java -version
openjdk version "17.0.10" 2024-01-16 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.10.0.7-1) (build 17.0.10+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.10.0.7-1) (build 17.0.10+7-LTS, mixed mode, sharing)
[root@Tom ~]# tar xf apache-tomcat-9.0.22.tar.gz
[root@Tom ~]# mv apache-tomcat-9.0.22 /usr/local/tomcat
[root@server ~]# cat >> /etc/profile << END
> JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.10.0.7-2.el8.x86_64 # Java的家目录
> CLASSPATH=$JAVA_HOME/lib/ # Java的lib库
> PATH=$PATH:$JAVA_HOME/bin # Java的命令变量
> export PATH JAVA_HOME CLASSPATH # 使Java环境变量生效
> END
[root@Tom ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk-17.0.10.0.7-2.el8.x86_64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
访问 http://192.168.15.103:8080
1.2. 配置 Tomcat 角色用户
[root@Tom ~]# vim /usr/local/tomcat/conf/tomcat-users.xml # tomcat存储角色和用户的配置文件
......省略部分内容......
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
# 添加以上内容,username和password是一会登录tomcat项目管理页面的凭证,需记住
</tomcat-users>
[root@Tom ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
# 将以上两行内容注释掉,使用<!--和-->将需要注释的内容扩起来即可
[root@Tom ~]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk-17.0.10.0.7-2.el8.x86_64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
[root@Tom ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk-17.0.10.0.7-2.el8.x86_64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
# 重启tomcat
1.3. 访问测试
访问页面,点击红线处
提示登录时,用户名为:tomcat,密码为:tomcat
最终登录页面展示
2. 项目部署
2.1. 下载插件
回到 Jenkins 页面,找到 Jenkins 的插件管理模块,搜索 deploy to container 插件,安装
2.2. 构建后操作
下载插件完成后,回到项目页面,进入项目配置,找到构建后操作,下拉选择框选中红线部分
WAR/EAR files:target/*.war(通用路径)
Containers:Tomcat 9.x Remote(选择您部署的对应版本 tomcat)
Credentials:点击添加,设置之前的 Tomcat 账户名和密码为凭证,设置后选用
Tomcat URL:您的 Tomcat 服务器地址
2.3. 开始构建
点击 Build Now,等待项目构建完毕查看控制台输出,查看提示信息,可以看到项目已成功打包并发布到 tomcat 服务器
回到 tomcat 服务器终端,也可以看到 tomcat 已由 Jenkins 自动化构建/部署/发布了项目
[root@Tom ~]# cd /usr/local/tomcat/webapps/
[root@Tom webapps]# ls
demo-0.0.1-SNAPSHOT docs host-manager ROOT
demo-0.0.1-SNAPSHOT.war examples manager
[root@Tom webapps]# cd demo-0.0.1-SNAPSHOT/
[root@Tom demo-0.0.1-SNAPSHOT]# ls
META-INF org WEB-INF
七、部署 Harbor 镜像仓库
1. 安装 Compose
链接:百度网盘 请输入提取码
提取码:4k71
2. 安装 Harbor
将下载好的 Docker-compose 文件导入到终端
[root@JK1 ~]# mv docker-compose /usr/local/bin/
[root@JK1 ~]# chmod +x /usr/local/bin/docker-compose
[root@JK1 ~]# wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz
......等待下载完成
[root@JK1 ~]# tar -xf harbor-offline-installer-v2.5.3.tgz -C /usr/local
[root@JK1 ~]# cd /usr/local/harbor/
[root@JK1 harbor]# ls
common.sh harbor.v2.5.3.tar.gz harbor.yml.tmpl install.sh LICENSE prepare
[root@JK1 harbor]# cp harbor.yml.tmpl harbor.yml
[root@JK1 harbor]# vim harbor.yml
1 # Configuration file of Harbor
2
3 # The IP address or hostname to access admin UI and registry service.
4 # DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external cl ients.
5 hostname: 192.168.15.101
6
7 # http related config
8 http:
9 # port for http, default is 80. If https enabled, this port will redirect to https po rt
10 port: 90 # 修改端口,以免端口冲突
11
12 # https related config
13 #https: # 此行注释,暂时不用tls安全
14 # https port for harbor, default is 443
15 #port: 443
16 # The path of cert and key files for nginx
17 #certificate: /usr/local/harbor/ssl/harbor.crt # 注释此行
18 #private_key: /usr/local/harbor/ssl/harbor.key # 注释此行
.....省略部分内容......
34 harbor_admin_password: Harbor12345 # harbor仓库的登录密码,用户名为admin
:wq
[root@JK1 harbor]# docker load --input harbor.v2.5.3.tar.gz
[root@JK1 harbor]# mkdir -p common/config
[root@JK1 harbor]# ./prepare
[root@JK1 harbor]# ./install.sh
[root@JK1 harbor]# vim /usr/lib/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor
[Service]
Type=simple
Restart=on-failure
RestartSec=5
#注意docker-compose和harbor的安装位置
ExecStart=/usr/local/bin/docker-compose -f /usr/local/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /usr/local/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
[root@JK1 harbor]# systemctl enable harbor.service
3. 登录 Harbor
3.1. 终端登录
[root@JK1 harbor]# vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.15.101:90"]
# 这里存放阿里云的镜像加速器地址
# 因为json文件不允许注释,所以镜像加速器要先复制保存好再替换成上面的地址
}
[root@JK1 harbor]# systemctl daemon-reload
[root@JK1 harbor]# systemctl restart docker.service
[root@JK1 harbor]# docker login 192.168.15.101:90 -uadmin
# 登录前需要在hosts文件内做好主机域名映射!!!
Password: # 密码是配置单里的密码
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
3.2. 登录 web 页面
访问 IP+修改后的端口,出现提示页面,点高级,点继续访问或信任访问
八、Dockerfile 构建镜像
1. Dockerfile 配置
[root@JK1 ~]# cd /var/lib/jenkins/workspace/mvn-project/target
[root@JK1 target]# vim Dockerfile
FROM openjdk:17-jdk-alpine
ARG WAR_FILE
COPY ${WAR_FILE} app.war
ENTRYPOINT ["java","-jar","/app.war"]
2. Jenkins 构建镜像
2.1. 安装 SSH 插件
去 Jenkins 插件商城找到 SSH 插件安装,已安装可忽略
2.2. 添加凭证
在 Manage Jenkins 内找到 Credentials,点击 System ——> Global credentials (unrestricted)
撰写凭证时记得添加凭证描述
2.3. 配置 SSH 主机
回到 Jenkins 首页,点 Manage Jenkins ——> System,下滑找到 SSH remote hosts,编辑完后保存即可
2.4. 配置项目
回到 Jenkins 首页找到自己的 maven 项目,进入配置页面,找到 Post Steps,按如下内容修改编写
cp /var/lib/jenkins/workspace/mvn-project/target/*.war /docker
docker build --build-arg WAR_FILE=demo-0.0.1-SNAPSHOT.war -t mvn-demo:v1 /docker
docker login -u admin -p Harbor12345 http://192.168.15.101:90
docker tag mvn-demo:v1 192.168.15.101:90/library/mvn-demo:latest
docker push 192.168.15.101:90/library/mvn-demo:latest
2.5. 开始构建
所有保存好后点击构建即可,然后再查看本次构建的控制台输出
3. 测试运行容器
[root@JK1 target]# docker run -id --name spring -p 8090:8080 192.168.15.101:90/library/mvn-demo:v1
1ea6e856e6277abb66200c6733b6735d8d7f2d6a712c4351ee62f83d8ccafdbf
[root@JK1 target]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1ea6e856e627 192.168.15.101:90/library/mvn-demo:v1 "java -jar /app.war" 3 seconds ago Up 2 seconds 0.0.0.0:8090->8080/tcp, :::8090->8080/tcp spring
4. 访问测试页面
访问容器映射的端口 8090,IP 地址为 192.168.15.101
九、K8S 集群部署容器集群
1. 修改 Containerd 配置
在 k8s-master 终端内操作
[root@k8s-master01 ~]# vim /etc/containerd/config.toml
......省略部分内容......
149 [plugins."io.containerd.grpc.v1.cri".registry.configs] # 添加如下内容,引号内地址为私有的harbor仓库地址
150 [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.15.101:90". tls] 151 insecure_skip_verify = true152 [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.15.101:90". auth]
153 username = "admin"
154 password = "Harbor12345"
155
156 [plugins."io.containerd.grpc.v1.cri".registry.headers]
157
158 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] # 添加如下内容
159 [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.15.101:90"]
160 endpoint = ["http://192.168.15.101:90"]
:wq # 保存并退出
[root@k8s-master01 ~]# systemctl daemon-reload
[root@k8s-master01 ~]# systemctl restart containerd.service
2. Containerd 配置导入到 Node
[root@k8s-master01 ~]# for i in k8s-node01 k8s-node02;do scp /etc/containerd/config.toml $i:/etc/containerd/;done
# 去node01和02重启containerd服务
[root@k8s-node01 ~]# systemctl restart containerd
[root@k8s-node02 ~]# systemctl restart containerd
3. 配置 K8S 凭证
回到 Jenkins 按照上面配置凭证步骤操作
找到 Dashboard > Manage Jenkins > Credentials > System > Global credentials (unrestricted) > Add Credentials
4. 添加 remote host
回到 Jenkins 首页,找到 Dashboard > Manage Jenkins > System > SSH remote hosts,点击新增
5. 部署 Deployment
[root@k8s-master01 ~]# vim /root/pod/spring-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-web
labels:
app: spring
spec:
replicas: 3
selector:
matchLabels:
app: spring
template:
metadata:
labels:
app: spring
spec:
containers:
- image: 192.168.15.101:90/library/mvn-demo:v1 # 使用harbor私有仓库的镜像
name: spring
ports:
- containerPort: 8080 # 容器的端口
imagePullSecrets: # secret资源,目的:身份认证
- name: harbor-auth # 引用harbor认证
---
apiVersion: v1
kind: Service
metadata:
name: spring-svc
spec:
selector:
app: spring
ports:
- name: http8080
protocol: TCP
port: 8080
targetPort: 8080
type: NodePort # 添加此行
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress # 这个不要改
spec:
ingressClassName: nginx # 这个不要改
rules:
- host: myapp.test.com
http:
paths:
- backend:
service:
name: spring-svc
port:
number: 8080
path: /
pathType: ImplementationSpecific
6. 安装 Ingress Controller
将 ingress.yaml 导入到 k8s 集群的 master 主机的 /root/pod 下
7. Jenkins 远程命令
进入 Jenkins 项目配置,找到构建环境,按下图部署
kubectl get ingressclass -n ingress-nginx &> /dev/null
if [ $? -eq 0 ];then echo "ingress controller已安装";else kubectl create -f /root/pod/ingress.yaml;fi
kubectl get pod | grep "spring" &> /dev/null
if [ $? -eq 0 ];then echo "k8s资源发布成功";else kubectl create -f /root/pod/spring-demo.yaml;fi
8. 修改 Hosts
修改域名映射文件:
C:\Windows\System32\drivers\etc
找到 hosts 文件,使用记事本打开,编辑最后的内容
9. 测试访问
访问 Ingress 定义的域名 myapp.test.com:30890
如果出现 Whitelabel Error Page 提示语不用管,那是负责管理代码编写工作部的事,与运维部署无关!
也可以使用 https 访问,使用之前定义的 https 的端口
十、Jira 整合
1. 安装 Jira
1.1. 安装 MySQL
导入 MySQL 安装包到终端内
[root@JIRA ~]# yum -y install ncurses-compat-libs
[root@JIRA ~]# tar -xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
[root@JIRA ~]# mv mysql-5.7.18-linux-glibc2.5-x86_64 /usr/local/mysql
[root@JIRA ~]# mkdir -p /usr/local/mysql/{data,logs}
[root@JIRA ~]# useradd -r -s /sbin/nologin mysql
[root@JIRA ~]# cat > /etc/my.cnf << END
> [mysql]
> auto-rehash
> [mysqld]
> datadir=/usr/local/mysql/data
> socket=/usr/local/mysql/mysql.sock
> symbolic-links=0
> character_set_server=utf8
> init_connect='SET NAMES utf8'
> [mysqld_safe]
> log-error=/usr/local/mysql/logs/error.log
> pid-file=/usr/local/mysql/mysql.pid
> [client]
> socket=/usr/local/mysql/mysql.sock
> END
[root@JIRA ~]# touch /usr/local/mysql/logs/error.log
[root@JIRA ~]# chown -R mysql.mysql /usr/local/mysql/
[root@JIRA ~]# chown -R mysql.mysql /etc/my.cnf
[root@JIRA ~]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
[root@JIRA ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@JIRA ~]# sed -i '46c basedir=/usr/local/mysql' /etc/init.d/mysqld
[root@JIRA ~]# sed -i '47c datadir=/usr/local/mysql/data' /etc/init.d/mysqld
[root@JIRA ~]# sed -i '63c mysqld_pid_file_path=/usr/local/mysql/data/mysqld.pid' /etc/init.d/mysqld
[root@JIRA ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@JIRA ~]# ln -s /usr/local/mysql/bin/* /usr/local/sbin/
[root@JIRA ~]# mysqladmin -uroot password 123456
[root@JIRA ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.18 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database jira default character set utf8 collate utf8_bin; # 创建jira数据库
Query OK, 1 row affected (0.01 sec)
mysql> grant all on `jira`.* to 'jira'@'%' identified by '123456'; # 创建jira账号
Query OK, 0 rows affected, 1 warning (0.01 sec)
1.2. 安装 JDK
[root@JIRA ~]# yum -y install java-17*
1.3. 安装 Jira
下载地址:https://downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-7.2.2-x64.bin
Jira 破解包下载:http://files.cnblogs.com/files/xugongyang/jira7.3破解包.rar
破解包需要先解压,然后将里面的三个破解包导入到终端
[root@JIRA ~]# ls
公共 音乐 initial-setup-ks.cfg
模板 桌面 ip.sh
视频 anaconda-ks.cfg JIRA_Core-7.2.1-language-pack-zh_CN.jar
图片 atlassian-extras-3.2.jar mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
文档 atlassian-jira-software-7.2.2-x64.bin mysql-connector-java-5.1.39-bin.jar
下载 hostname.sh
[root@JIRA ~]# chmod a+x atlassian-jira-software-7.2.2-x64.bin
[root@JIRA ~]# ./atlassian-jira-software-7.2.2-x64.bin
Unpacking JRE ...
Starting Installer ...
二月 26, 2024 9:22:10 上午 java.util.prefs.FileSystemPreferences$1 run
信息: Created user preferences directory.
This will install JIRA Software 7.2.2 on your computer.
OK [o, Enter], Cancel [c]
o # 输入字母o
Choose the appropriate installation or upgrade option.
Please choose one of the following:
Express Install (use default settings) [1], Custom Install (recommended for advanced users) [2, Enter], Upgrade an existing JIRA installation [3]
2 # 输入2,选择自定义安装
Where should JIRA Software be installed?
[/opt/atlassian/jira]
/usr/local/jira # 输入安装目录
Default location for JIRA Software data
[/var/atlassian/application-data/jira]
/var/atlassian/application-data/jira # 将上行括号内容复制粘贴到此
Configure which ports JIRA Software will use.
JIRA requires two TCP ports that are not being used by any other
applications on this machine. The HTTP port is where you will access JIRA
through your browser. The Control port is used to startup and shutdown JIRA.
Use default ports (HTTP: 8080, Control: 8005) - Recommended [1, Enter], Set custom value for HTTP and Control ports [2]
1 # 输入1,使用默认端口,避免被占用也可输入2修改为自定义端口
JIRA can be run in the background.
You may choose to run JIRA as a service, which means it will start
automatically whenever the computer restarts.
Install JIRA as Service?
Yes [y, Enter], No [n]
y # 输入y,安装Jira服务
Details on where JIRA Software will be installed and the settings that will be used.
Installation Directory: /usr/local/jira
Home Directory: /var/atlassian/application-data/jira
HTTP Port: 8080
RMI Port: 8005
Install as service: Yes
Install [i, Enter], Exit [e]
i # 输入i,开始安装
Extracting files ...
Please wait a few moments while JIRA Software starts up.
Launching JIRA Software ...
Installation of JIRA Software 7.2.2 is complete
Your installation of JIRA Software 7.2.2 is now ready and can be accessed
via your browser.
JIRA Software 7.2.2 can be accessed at http://localhost:8080
Finishing installation ... # 安装完成
[root@JIRA ~]# vim /usr/local/jira/conf/server.xml
......省略部分内容......
113 <Engine name="Catalina" defaultHost="JIRA"> # 修改主机名
114 <Host name="JIRA" appBase="webapps" unpackWARs="true" autoDeploy="true"> # 修改主机名
......省略部分内容......
[root@JIRA ~]# /usr/local/jira/bin/stop-jira.sh # 停止jira
[root@JIRA ~]# cp atlassian-extras-3.2.jar JIRA_Core-7.2.1-language-pack-zh_CN.jar mysql-connector-java-5.1.39-bin.jar /usr/local/jira/atlassian-jira/WEB-INF/lib/
[root@JIRA ~]# /usr/local/jira/bin/startup.sh
.....
.... .NMMMD. ...
.8MMM. $MMN,..~MMMO.
.?MMM. .MMM?.
OMMMMZ. .,NMMMN~
.IMMMMMM. .NMMMN. .MMMMMN,
,MMMMMM$..3MD..ZMMMMMM.
=NMMMMMM,. .,MMMMMMD.
.MMMMMMMM8MMMMMMM,
.ONMMMMMMMMMMZ.
,NMMMMMMM8.
.:,.$MMMMMMM
.IMMMM..NMMMMMD.
.8MMMMM: :NMMMMN.
.MMMMMM. .MMMMM~.
.MMMMMN .MMMMM?.
Atlassian JIRA
Version : 7.2.2
If you encounter issues starting or stopping JIRA, please see the Troubleshooting guide at http://confluence.atlassian.com/display/JIRA/Installation+Troubleshooting+Guide
Server startup logs are located in /usr/local/jira/logs/catalina.out
Using CATALINA_BASE: /usr/local/jira
Using CATALINA_HOME: /usr/local/jira
Using CATALINA_TMPDIR: /usr/local/jira/temp
Using JRE_HOME: /usr/local/jira/jre/
Using CLASSPATH: /usr/local/jira/bin/bootstrap.jar:/usr/local/jira/bin/tomcat-juli.jar
Using CATALINA_PID: /usr/local/jira/work/catalina.pid
Existing PID file found during start.
Removing/clearing stale PID file.
Tomcat started.
1.4. 访问 Jira
浏览器访问 IP+8080 端口
1.5. 配置 Jira
1.5.1. 连接数据库
方式一:选择内置,让其自动连接到已配置好的 MySQL 数据库
方式二:也可以选择其他数据库,手动连接现有的 MySQL 数据库
1.5.2. 绑定授权码
复制服务器 ID,点击 generate a JIRA trial license
转到 Atlassian 登录网站,选择创建账户,自行注册
转到新页面,选择 Jira Software (Data Center),新用户试用 30 天
复制框内授权码
回到 Jira 页面,粘贴到授权码
1.5.3. 设置管理员信息
点击完成,等待配置完成,后续步骤自行处理
2. 创建 Jira 项目
第一步:
第二步:
第三步:
第四步:
3. 安装插件
回到 Jenkins,在插件商店内找 jira,勾选第一个,然后再下滑勾选
等待安装即可
4. 配置 Jenkins 集成
回到 Jenkins 首页,点击 Dashboard > Manage Jenkins > System > JiraTestResultReporter
向下找到 JIRA Steps,按如下配置
5. 配置 Jira 连接 Jenkins
回到 Jira 页面,点击系统设置
点应用程序,再点 Application links
6. 设置网络钩子
按下图配置,最后下滑到底点击 Create
点击 URL
出现该页面表示通过测试