当前位置: 首页 > news >正文

CI/CD流水线搭建流程

实验环境

部署好GitLab和Jenkins

一、CI/CD简介

CI (Continuous Integration,持续集成):开发人员频繁地将代码变更合并到共享主干(通常每天多次)的实践。

CD (Continuous Delivery/Deployment,持续交付/持续部署):

持续交付:确保代码变更可以随时安全地部署到生产环境

持续部署:自动将通过测试的变更部署到生产环境

CI/CD 工作流程

1.开发人员提交代码到版本控制系统

2.CI 服务器检测到变更并触发构建

3.运行自动化测试

4.如果测试通过,构建可部署的软件包

5.(持续交付)准备部署到生产环境

6.(持续部署)自动部署到生产环境

CI/CD 的优势

更快的发布周期:可以频繁、小批量地发布变更

更高的代码质量:通过自动化测试及早发现问题

降低风险:小变更比大变更更容易调试和回滚

提高开发效率:自动化重复性任务

更好的协作:团队成员频繁集成代码

二、配置GitLab

1、在GitLab创建一个普通用户

使用管理员root用户登录

2、创建项目

(1)使用tom用户登录

(2)创建群组

(3)创建项目

3、推送Java源代码到GitLab(GitLab)

(1)设置密钥验证

生成密钥对

ssh-keygen

查看生成的公钥

cat /root/.ssh/id_rsa.pub

上传公钥到GitLab

(2)上传myproject.tar.gz Java源代码包到/root目录并推送到GitLab

tar xf myproject.tar.gzcd myproject/git remote -v

删除origin仓库

git remote remove origin

添加GitLab仓库

git remote add origin git@192.168.10.40:dev/myproject.gitgit push --set-upstream origin master

(3)查看代码

二、配置Jenkins

1、安装Maven(Jenkins)

下载地址:阿里云镜像站

(1)下载maven二进制包,解压并移动到指定目录

wget https://mirrors.aliyun.com/apache/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gztar xf apache-maven-3.9.11-bin.tar.gzmv apache-maven-3.9.11 /usr/local/maven

(2)设置环境变量

vim /etc/profile

添加:

export MAVEN_HOME=/usr/local/mavenexport PATH=$JAVA_HOME/bin:$TOMCAT_HOME/bin:$MAVEN_HOME/bin:$PATH

加载环境变量

source /etc/profile

(3)查看maven版本

mvn -version

(4)配置maven

vim /usr/local/maven/conf/settings.xml

添加修改:

   <localRepository>/usr/local/maven/repo</localRepository>

    <mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central</url></mirror>

  <profiles><profile><id>java17</id><activation><activeByDefault>true</activeByDefault></activation><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><maven.compiler.release>17</maven.compiler.release></properties></profile>

(5)查看系统环境信息和 Java 系统属性

mvn help:system

显示下载地址为阿里源即为正确

2、安装maven插件

3、设置Java和Maven环境

查看Git安装路径(Jenkins)

whereis git

4、新建maven任务并配置

(1)新建任务

(2)查看Git仓库的HTTP协议克隆地址

(3)配置myproject任务

(4)构建测试

查看构建拉取到Jenkins的代码

ls /root/.jenkins/workspace/myproject

查看由maven打包的文件

ls /root/.jenkins/workspace/myproject/target/

三、配置WEB(web)

1、安装JDK17

(1)卸载自带Java1.8.0

rpm -qa | grep java

dnf -y remove java-1.8.0-openjdk-headless-1.8.0.452.b09-2.el9.x86_64

(2)上传jdk-17_linux-x64_bin.tar.gz包到/root目录,解压并移动到指定位置

tar xf jdk-17_linux-x64_bin.tar.gzmv jdk-17.0.12/ /usr/local/java

(3)设置环境变量

echo 'export JAVA_HOME=/usr/local/java' >> /etc/profileecho 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile

加载环境变量

source /etc/profile

(4)查看Java版本

java -version

2、运行由maven打包好的Spring Boot 可执行 JAR 文件

(1)拷贝Spring Boot 可执行JAR 文件到WEB服务器(Jenkins)

scp /root/.jenkins/workspace/myproject/target/myproject02-0.0.1-SNAPSHOT.jar root@192.168.10.42:/root

(2)通过系统的 Java 环境运行打包好的 Spring Boot 可执行 JAR 文件(web)

java -jar myproject02-0.0.1-SNAPSHOT.jar

(3)使用浏览器访问

192.168.10.42:8080

3、手动构建,自动运行打包好的 Spring Boot 可执行 JAR 文件

(1)安装SSH插件

(2)配置SSH

(3)配置myproject任务

nohup /usr/local/java/bin/java -jar /root/dev/myproject*.jar > myproject.out 2>&1 &

(4)构建

(5)访问验证(web)

查看进程

jps

ss -anplt | grep java

使用浏览器访问192.168.10.42:8080

关闭web服务

pkill -9 java

四、流水线

1、新建流水线任务并配置

(1)新建流水线任务

中文在线文档:https://www.jenkins.io/zh/doc/book/pipeline/

(2)配置任务

生成一个输出Hello World的模板

(3)构建

2、配置测试流水线

(1)配置任务(拉取代码)

使用生成器生成代码

checkout scmGit(branches: [[name: '*/master']], browser: gitLab(repoUrl: 'http://192.168.10.40/dev/myproject.git', version: '18.1'), extensions: [], userRemoteConfigs: [[credentialsId: 'db5ff906-1c27-4038-9741-8f9cf0cba48e', url: 'http://192.168.10.40/dev/myproject.git']])

(2)测试拉取代码

查看流水线概览

(3)配置任务(构建代码)

(4)测试构建代码

查看流水线概览

(5)配置任务(上传jar包)

使用生成器生成代码

sshPublisher(publishers: [sshPublisherDesc(configName: 'WEB-192.168.10.42', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup /usr/local/java/bin/java -jar /root/dev/myproject*.jar > myproject.out 2>&1 &', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/dev', remoteDirectorySDF: false, removePrefix: '/target', sourceFiles: '**/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

(6)测试上传jar包代码

查看流水线概览

(7)访问验证(web)

查看进程

jps

ss -anplt | grep java

使用浏览器访问192.168.10.42:8080

关闭web服务

pkill -9 java

3、配置真实情况的流水线

(1)复制流水线脚本

(2)在源代码中创建Jenkinsfile(流水线)文件(GitLab)

cd myproject/vim Jenkinsfile

添加:

pipeline {agent anystages {stage('拉取代码') {steps {checkout scmGit(branches: [[name: '*/master']], browser: gitLab(repoUrl: 'http://192.168.10.40/dev/myproject.git', version: '18.1'), extensions: [], userRemoteConfigs: [[credentialsId: 'db5ff906-1c27-4038-9741-8f9cf0cba48e', url: 'http://192.168.10.40/dev/myproject.git']])}}stage('构建代码') {steps {sh '/usr/local/maven/bin/mvn clean package'}   }stage('上传jar包') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'WEB-192.168.10.42', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup /usr/local/java/bin/java -jar /root/dev/myproject*.jar > myproject.out 2>&1 &', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/dev', remoteDirectorySDF: false, removePrefix: '/target', sourceFiles: '**/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}}

(3)配置任务

(4)提交并推送到GitLab(GitLab)

git add .git commit -m "add pipeline file"git push --set-upstream origin master

(3)查看项目文件

(4)构建

查看流水线概览

(5)访问验证

使用浏览器访问192.168.10.42:8080

关闭web服务

pkill -9 java

4、配置GitLab Webhook触发器

(1)安装GitLab插件

(2)开启 "允许来自 webhooks 和集成对本地网络的请求"

使用管理员root用户登录

(3)关闭 GitLab 认证

(4)配置mypipeline任务

http://192.168.10.41:8080/jenkins/project/mypipeline

65dbe341f6e283fc5046198744297734

(5)在GitLab 配置 Webhook

使用tom用户登录

(6)测试生成推送事件

关闭web服务(web)

pkill -9 java

(7)修改代码并提交触发构建(GitLab)

vim /root/myproject/src/main/resources/static/index.html

添加:

<h1>hello world!!!</h1>

git add .git commit -m "modify index.html file"git push --set-upstream origin master

(8)查看mypipeline任务状态

(9)访问验证

使用浏览器访问192.168.10.42:8080

http://www.dtcms.com/a/330753.html

相关文章:

  • 药房发药的“时间密码”:同步时钟用药安全?
  • 抗辐照CANFD通信芯片在高安全领域国产化替代的研究
  • CMake进阶: externalproject_add用于在构建阶段下载、配置、构建和安装外部项目
  • 常见的Jmeter压测问题
  • 飞算 JavaAI 云原生实践:基于 Docker 与 K8s 的自动化部署架构解析
  • 用架构建模工具Sparx EA绘制企业转型路线图
  • C++状态模式详解:从OpenBMC源码看架构、原理与应用
  • NineData云原生智能数据管理平台新功能发布|2025年7月版
  • 云原生俱乐部-k8s知识点归纳(2)
  • 生产环境中Debezium CDC与Kafka实时流处理实战指南
  • 3ds MAX文件/贴图名称乱码?6大根源及解决方案
  • .NET 在鸿蒙系统(HarmonyOS Next)上的适配探索与实践
  • 界面设计风格解析 | ABB 3D社交媒体视觉效果设计
  • 【力扣56】合并区间
  • 一种适用于 3D 低剂量和少视角心脏单光子发射计算机断层成像(SPECT)的可泛化扩散框架|文献速递-深度学习人工智能医疗图像
  • MTK平台Wi-Fi学习--wifi channel 通过国家码进行功率限制和wifi eFEM 基本配置和wifi Tx SEM问题
  • 【深度学习】深度学习的四个核心步骤:从房价预测看机器学习本质
  • Navicat 全量增量数据库迁移
  • 【经验分享】如何在Vscode的Jupyter Notebook中设置默认显示行号
  • OpenCv(三)——图像平滑处理
  • dockerfile示例
  • 【论文阅读-Part1】PIKE-RAG: sPecIalized KnowledgE and Rationale Augmented Generation
  • ACCESS SQL句子最长是多少个字符?
  • 机器学习-支持向量机器(SVM)
  • 如何查看SQL Server的当前端口
  • mysql 提示符及快捷执行
  • 苹果新专利曝光-或将实现六面玻璃外壳 iPhone
  • GO学习记录五——数据库表的增删改查
  • DataHub IoT Gateway:工业现场设备与云端平台安全互联的高效解决方案
  • DataHub OPC Gateway:实现OPC UA与OPC DA无缝集成的高性能网关