代码优化插件
在idea中安装阿里检查代码的插件:Alibaba Java Coding Guidelines(XenoAmess TPM),这个插件为 Java 开发者提供了编码标准和建议,旨在提高代码质量,提升可读性,可维护性,以及性能等

持续集成 CI/CD流程

实现流程:
- 开发人员持续将功能代码集成到公共功能集成分支,如: develop
- 当功能积攒到一定节点,需要进行线上项目升级,需要基于持续集成软件进行一键发布;
- 持续集成工具先对develop | master分支代码进行拉取更新,然后对最新功能代码进行清理、编译、测试、打包、打镜像、部署等动作;
- 如果构建失败,则发送邮件提醒代码提交人员或管理员; 要实现上面流程,咱们需要了解一款支持持续集成的软件:Jenkins
Jenkins介绍和安装
yml
version: '3'
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
ports:
- "8000:8080"
environment:
- JAVA_OPTS=-Duser.timezone=GMT+08 -Xms2g -Xmx2g
volumes:
- ./data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
user: root

自己本地访问,写本地即可,如果希望别人也可以访问,需要填写IP地址或者域名

什么是流水线
Jenkins 流水线配置是 Jenkins 中用于定义和执行自动化构建、测试和部署过程的一种方式

在声明式流水线中,整个流水线过程被定义在一个 pipeline 块中,该块包含了流水线执行所需的所有指令和阶段。
- 基本结构 声明式流水线的基本结构如下:
Groovy
pipeline {
agent any // 指定流水线运行的节点,any 表示任何可用的节点
stages {
stage('Stage Name1') { // 定义阶段
steps {
// 定义在该阶段执行的步骤
echo 'Hello, World!'
}
},
stage('Stage Name2') { // 定义阶段
steps {
// 定义在该阶段执行的步骤
echo 'Hello, World!'
}
}
}
}
- 主要指令和阶段
- agent:指定流水线或特定阶段在哪个节点上执行。
- stages:包含流水线中的所有阶段(stage),阶段是流水线的主要分组单元。
- stage:定义一个阶段,阶段内可以包含一个或多个步骤。
- steps:定义在某个阶段内执行的步骤,步骤是构建过程中的具体操作。
- post:定义在所有阶段完成后执行的操作,可以基于不同的条件(如成功、失败、总是)来执行。
- environment:定义流水线中的环境变量。
- options:定义全局选项和配置,如超时设置、并行执行等。
- parameters:定义流水线的参数,用于接收用户输入。
- triggers:定义触发流水线执行的条件或事件,如定时触发、代码推送触发等。
安装插件
- Active Choices 参数选择
- Blue Ocean 流水线可视化插件
- Adoptium JDK安装插件

在全局配置中安装

创建流水线

下方流水线


安装 JDK 17版本

完整脚本
groovy
pipeline {
agent any
parameters {
choice(name: 'services', choices: ['kzzyl-admin'], description: '请选择你的服务')
choice(name: 'GIT_TAG', choices: ['master', 'dev', 'test', 'prod'], description: '请选择你的分支')
string(name: 'GIT_URL', defaultValue: 'https://gitee.com/kun020126/zzyl.git', description: '请输入Git仓库地址')
}
environment {
DOCKER_TAG = "1.0"
}
// 工具配置
tools {
maven 'maven'
jdk 'jdk17'
}
stages {
stage('清除工作空间') {
steps {
cleanWs()
}
}
stage('拉取Git代码') {
steps {
echo '正在拉取Git代码'
// $class 指定使用插件
// GitSCM 拉取代码插件
checkout([
$class: 'GitSCM',
branches: [
// 分支
[name: "${params.GIT_TAG}"]
],
// 是否初始化git子模块
doGenerateSubmoduleConfigurations: false,
// 配置访问凭证
userRemoteConfigs: [[
credentialsId: 'github-pt1', url: "${params.GIT_URL}"
]]
])
// 输出当前工作目录
// sh "pwd"
}
}
stage('Maven打包') {
steps {
script {
echo '正在执行maven打包....'
sh 'mvn clean install -DskipTests'
}
}
}
stage('构建镜像') {
steps {
echo "进入target目录执行镜像打包......"
sh "docker build -t ${params.services} ${params.services}/."
}
}
stage('启动程序') {
steps {
sh 'docker run ${params.services}'
}
}
}
post {
success {
echo '构建成功'
}
failure {
echo '构建失败'
}
}
}
DIND 模式
- 构建可以连接远程DIND的Jenkins
- 创建dind docker 容器
构建可以连接远程DIND的Jenkins
dockerfile
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean docker-workflow json-path-api"
docker-compose 文件
yml
version: '3.9'
services:
jenkins-dind:
user: root
image: docker:dind
container_name: jenkins-docker-dind
privileged: true
networks:
jenkins:
aliases:
- docker
environment:
- DOCKER_TLS_CERTDIR=/certs
volumes:
- ./docker-certs:/certs/client
- jenkins-data:/var/jenkins_home
ports:
- "2376:2376"
jenkins-docker:
user: root
image: jenkins-docker
container_name: jenkins-docker
networks:
jenkins:
aliases:
- jenkins
ports:
- "8080:8080"
- "50000:50000"
environment:
- DOCKER_HOST=tcp://docker:2376
- DOCKER_CERT_PATH=/certs/client
- DOCKER_TLS_VERIFY=1
volumes:
- jenkins-data:/var/jenkins_home
- ./docker-certs:/certs/client:ro
networks:
jenkins:
driver: bridge
volumes:
jenkins-data:
driver: local
driver_opts:
type: none
o: bind
device: D:/docker_config/jenkins/data
ELK日志管理
ELK是一个开源的日志管理平台,由三个核心组件组成:Elasticsearch、Logstash 和 Kibana。这三个组件共同协作,提供了一个从日志收集、处理、存储到分析、可视化的完整解决方案。
- Elasticsearch:这是一个基于Lucene的搜索引擎,用于存储和搜索日志数据。它提供了强大的全文搜索功能,支持复杂的查询和聚合操作,并且能够处理大规模的日志数据。
- Logstash:这是一个日志收集和处理工具,用于从各种数据源(如文件、数据库、网络等)中收集日志,并将其转换为Elasticsearch可以理解的格式。Logstash还提供了丰富的过滤功能,可以对日志数据进行清洗、转换和增强。
- Kibana:这是一个Web界面,用于可视化Elasticsearch中的日志数据。它提供了直观的图形和工具,使用户能够轻松地搜索、分析和可视化日志数据,从而更好地理解系统的运行状态和性能。
