【CI/CD】CI/CD环境搭建流程和持续集成环境配置

文章目录

  • CI/CD环境搭建流程
    • 一、GitLab 安装与配置
      • 1. 环境准备
      • 2. 安装依赖
      • 3. 下载安装GitLab
      • 4. 修改配置
      • 5. 应用配置并启动
      • 6. 初始化设置
    • 二、GitLab 项目管理
      • 1. 创建群组与项目
      • 2. 用户管理
      • 3. 上传代码
    • 三、Jenkins 安装与配置
      • 1. 安装JDK17
      • 2. 安装Jenkins
      • 3. 修改配置
      • 4. 启动服务
      • 5. 插件管理
      • 6. 初始设置
    • 四、Maven 安装与配置
      • 1. 安装Maven
      • 2. 配置镜像源
      • 3. Jenkins全局配置
    • 五、Tomcat 安装与配置
      • 1. 安装JDK8
      • 2. 安装Tomcat
      • 3. 配置管理用户
      • 4. 允许远程访问
    • 六、Jenkins流水线配置
      • 1. 创建自由风格项目
      • 2. 验证部署
      • 常见问题~
  • Pipeline 流水线项目构建
    • Pipeline
    • 安装 Pipeline 插件
    • Scripted Pipeline 示例
      • 示例脚本:
    • Declarative Pipeline 示例
      • 示例脚本:
    • 使用代码生成器生成流水线脚本
      • 示例:
  • Git Hook 自动触发构建
    • 原理
    • 安装插件
    • Jenkins 配置
    • GitLab 配置 Webhook
    • 解决 Webhook 测试报错
    • 测试自动触发
    • 代码推送触发构建

CI/CD环境搭建流程

一、GitLab 安装与配置

1. 环境准备

systemctl disable --now firewalld
setenforce 0

2. 安装依赖

yum install -y curl policycoreutils-python openssh-server perl postfix
systemctl enable --now sshd postfix

3. 下载安装GitLab

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.4.8-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-12.4.8-ce.0.el7.x86_64.rpm

4. 修改配置

vim /etc/gitlab/gitlab.rb
# 修改以下配置
external_url 'http://<IP>:82'
nginx['listen_port'] = 82

5. 应用配置并启动

gitlab-ctl reconfigure
gitlab-ctl restart

6. 初始化设置

  • 访问 http://<IP>:82 设置root密码(如:root@123)
  • 修改语言为中文:用户设置 → Preferences → Localization → 简体中文

二、GitLab 项目管理

1. 创建群组与项目

  • 群组:devops_group(私有)
  • 项目:web_demo(私有)

2. 用户管理

  • 创建用户 zhangsan,设置密码 zhangsan@123
  • 将用户添加到组,角色为 Owner

3. 上传代码

git config --global user.name "zhangsan"
git config --global user.email "zhangsan@xy101.com"
git clone http://<GitLab_IP>:82/devops_group/web_demo.git
# 上传代码后提交
git add .
git commit -m "init web_demo"
git push -u origin master

三、Jenkins 安装与配置

1. 安装JDK17

tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
vim /etc/profile
# 添加环境变量
export JAVA_HOME=/usr/local/jdk-17.0.9
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile

2. 安装Jenkins

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
yum install jenkins -y

3. 修改配置

vim /usr/lib/systemd/system/jenkins.service
# 修改以下参数
User=root
Group=root
Environment="JAVA_HOME=/usr/local/jdk-17.0.9"
Environment="JENKINS_PORT=8080"

4. 启动服务

systemctl daemon-reload
systemctl start jenkins
systemctl enable jenkins

5. 插件管理

  • 替换插件源为清华镜像:
sed -i 's#https://updates.jenkins.io/#https://mirrors.tuna.tsinghua.edu.cn/jenkins/#g' /var/lib/jenkins/hudson.model.UpdateCenter.xml
systemctl restart jenkins
  • 安装插件:Localization: Chinese, Git, Deploy to container

6. 初始设置

  • 访问 http://<Jenkins_IP>:8080 解锁并创建管理员账户
  • 添加GitLab凭据:用户名密码(zhangsan/zhangsan@123)

四、Maven 安装与配置

1. 安装Maven

tar -zxvf apache-maven-3.6.2-bin.tar.gz -C /usr/local/
mv apache-maven-3.6.2 /usr/local/maven
vim /etc/profile
# 添加环境变量
export MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH
source /etc/profile

2. 配置镜像源

mkdir /usr/local/maven/repo
vim /usr/local/maven/conf/settings.xml
# 修改本地仓库路径和阿里云镜像
<localRepository>/usr/local/maven/repo</localRepository>
<mirror><id>alimaven</id><url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

3. Jenkins全局配置

  • Manage Jenkins → Global Tool Configuration
    • JDK17路径:/usr/local/jdk-17.0.9
    • Maven路径:/usr/local/maven
  • 添加全局环境变量:
    • JAVA_HOME=/usr/local/jdk1.8.0_391
    • MAVEN_HOME=/usr/local/maven

五、Tomcat 安装与配置

1. 安装JDK8

tar -zxvf jdk-8u391-linux-x64.tar.gz -C /usr/local/
vim /etc/profile
# 添加环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_391
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile

2. 安装Tomcat

tar -zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh

3. 配置管理用户

<!-- 修改 /usr/local/tomcat/conf/tomcat-users.xml -->
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script"/>

4. 允许远程访问

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" /> -->

六、Jenkins流水线配置

1. 创建自由风格项目

  • 源码管理:Git仓库地址 http://<GitLab_IP>:82/devops_group/web_demo.git
  • 构建步骤
    mvn clean package
    
  • 构建后操作
    • Deploy war/ear to a container
    • WAR文件路径:target/*.war
    • Tomcat URL:http://<Tomcat_IP>:8080
    • 凭据:tomcat/tomcat

2. 验证部署

  • 访问 http://<Tomcat_IP>:8080/web_demo 确认应用已部署

常见问题~

  1. GitLab 502错误

    • 检查内存是否充足(至少4GB)
    • 查看日志:gitlab-ctl tail
  2. Jenkins构建失败

    • 检查控制台输出,确认Maven依赖是否下载成功
    • 验证JDK版本是否与项目兼容
  3. Tomcat部署失败

    • 确认manager-script角色已添加
    • 检查Tomcat服务端口(8080)是否开放

Pipeline 流水线项目构建

Pipeline

  • Pipeline 是 Jenkins 的核心功能,支持通过代码定义构建流程。
  • 两种语法
    • Scripted Pipeline:基于 Groovy 的脚本式语法,灵活性高。
    • Declarative Pipeline:声明式语法,结构清晰,易于维护。

安装 Pipeline 插件

  • 默认已安装 PipelinePipeline Stage View 插件。
  • 如需手动安装:
    • Manage Jenkins → Manage Plugins → 可选插件,搜索并安装 PipelinePipeline Stage View

Scripted Pipeline 示例

示例脚本:

node {def mvnHomestage('拉取代码') {echo '拉取代码'}stage('编译构建') {echo '编译构建'}stage('项目部署') {echo '项目部署'}
}

说明:

  • node:定义运行环境(Master 或 Agent)。
  • stage:定义构建阶段(如拉取代码、编译构建、项目部署)。
  • steps:每个阶段的具体操作。

Declarative Pipeline 示例

示例脚本:

pipeline {agent anystages {stage('拉取代码') {steps {echo '拉取代码'}}stage('编译构建') {steps {echo '编译构建'}}stage('项目部署') {steps {echo '项目部署'}}}
}

说明:

  • pipeline:声明式 Pipeline 的固定语法。
  • agent:指定运行环境(any 表示任意可用节点)。
  • stages:包含多个阶段(stage)。
  • steps:每个阶段的具体操作。

使用代码生成器生成流水线脚本

  • 步骤
    1. 进入项目配置页面,点击 流水线语法
    2. 使用 片段生成器 生成各阶段脚本。
      • 拉取代码
        • 选择 checkout: Check out from version control
        • 配置 Git 仓库地址和凭据。
      • 编译构建
        • 选择 sh: Shell Script,输入 mvn clean package
      • 项目部署
        • 选择 deploy: Deploy war/ear to a container,配置 WAR 文件路径和 Tomcat 地址。

示例:

pipeline {agent anystages {stage('拉取代码') {steps {checkout([$class: 'GitSCM', branches: [[name: '*/master']], userRemoteConfigs: [[url: 'git@192.168.80.10:devops_group/web_demo.git', credentialsId: 'gitlab-auth-ssh']])}}stage('编译构建') {steps {sh 'mvn clean package'}}stage('项目部署') {steps {deploy adapters: [tomcat9(credentialsId: 'tomcat-auth', path: '', url: 'http://192.168.80.12:8080')], war: 'target/*.war'}}}
}

Git Hook 自动触发构建

原理

  • GitLab Webhook:当代码推送到 GitLab 仓库时,自动触发 Jenkins 构建。

安装插件

  • GitLabGeneric Webhook Trigger 插件:
    • Manage Jenkins → Manage Plugins → 可选插件,搜索并安装。

Jenkins 配置

  1. 进入项目配置页面,点击 构建触发器
  2. 勾选 Build when a change is pushed to GitLab
  3. 复制生成的 Webhook URL(如:http://192.168.80.11:8080/project/web_demo_pipeline)。

GitLab 配置 Webhook

  1. 开启 Webhook 功能
    • 使用 root 账户登录 GitLab。
    • 进入 管理中心 → 设置 → 网络
    • 勾选 Allow requests to the local network from web hooks and services
    • 点击 Save changes
  2. 添加 Webhook
    • 进入项目 → 设置 → 集成。
    • URL:输入 Jenkins 生成的 Webhook URL。
    • Trigger:勾选 Push events
    • 点击 Add webhook

解决 Webhook 测试报错

  • 在 Jenkins 中:
    • 进入 Manage Jenkins → Configure System → Gitlab
    • 取消勾选 Enable authentication for ‘/project’ end-point
    • 点击 保存

测试自动触发

  • 在 GitLab 中:
    • 进入 Webhook 页面,点击 Test → Push events
    • 返回 Hook executed successfully: HTTP 200 表示配置成功。
  • 在 Jenkins 中:
    • 查看构建记录,确认自动触发构建。

代码推送触发构建

  • 修改代码并推送:
    cd /root/web_demo
    vim src/main/webapp/index.jsp
    git add .
    git commit -m "更新代码"
    git push -u origin master
    
  • 推送成功后,Jenkins 会自动触发构建。

通过 Pipeline 流水线Git Hook 自动触发构建,可以实现从代码提交到自动化构建部署的完整流程:

  1. Pipeline 定义构建流程,支持灵活的阶段划分和操作。
  2. Git Hook 实现代码推送后自动触发构建,提升开发效率。
  3. Jenkins + GitLab 集成,构建稳定可靠的 CI/CD 环境。

后续可扩展:

  • 添加自动化测试阶段。
  • 集成代码质量扫描工具(如 SonarQube)。
  • 配置多环境部署(开发、测试、生产)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24432.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零样本学习 zero-shot

1 是什么 2 如何利用零样本学习进行跨模态迁移&#xff1f; demo代码 安装clip pip install ftfy regex tqdm pip install githttps://github.com/openai/CLIP.git import torch import clip from PIL import Image# 加载 CLIP 模型 device "cuda" if torch.cuda.i…

防火墙双机热备---VRRP,VGMP,HRP(超详细)

双机热备技术-----VRRP&#xff0c;VGMP&#xff0c;HRP三个组成 注&#xff1a;与路由器VRRP有所不同&#xff0c;路由器是通过控制开销值控制数据包流通方向 防火墙双机热备&#xff1a; 1.主备备份模式 双机热备最大的特点就是防火墙提供了一条专门的备份通道&#xff08;心…

面试八股文--数据库基础知识总结(1)

1、数据库的定义 数据库&#xff08;DataBase&#xff0c;DB&#xff09;简单来说就是数据的集合数据库管理系统&#xff08;Database Management System&#xff0c;DBMS&#xff09;是一种操纵和管理数据库的大型软件&#xff0c;通常用于建立、使用和维护数据库。数据库系统…

怎么在Github上readme文件里面怎么插入图片?

环境&#xff1a; Github 问题描述&#xff1a; 怎么在Github上readme文件里面怎么插入图片&#xff1f; https://github.com/latiaoge/AI-Sphere-Butler/tree/master 解决方案&#xff1a; 1.相对路径引用 上传图片到仓库 将图片文件&#xff08;如 .png/.jpg&#xff…

Unity自定义树(Tree)

一、创建自定义树 右键——3D Object——Tree 树的大致形态&#xff1a; 二、主干树的整体设置 Distribution Tree Seed&#xff1a;树种子&#xff0c;调节此参数就可获得不同形态的树桩 Area Spread&#xff1a;区域的大小 Ground Offset&#xff1a;树距离初始地面的偏移…

Debezium日常分享系列之:Debezium 3.1.0.Alpha2发布

Debezium日常分享系列之&#xff1a;Debezium 3.1.0.Alpha2发布 模式历史配置默认值的变更可能的 Vitess 数据丢失Oracle 的 ReselectColumnsPostProcessor 行为变更Reselect 列后处理器的错误处理模式TinyGo WASM 数据类型改进Debezium 平台转换 UI 中的谓词支持Debezium 平台…

STM32MP157A-FSMP1A单片机移植Linux系统I2C总线驱动

由于I2C总线驱动为Linux内核自带的总线驱动&#xff0c;在一个新的板子上可能由于不同的定义与芯片原厂定义的I2C管脚有所不同&#xff0c;这时就需要开发人员对设备树信息及内核驱动进行更新。 原理图可知&#xff0c;I2C的SCL对应PF14&#xff0c;SDA对应PF15 在Linux内核中…

My first Android application

界面元素组成&#xff1a; 功能代码&#xff1a; /*实现功能&#xff1a;当输入内容后&#xff0c;欢迎文本发生相应改变&#xff0c;并清除掉文本域内容当未输入任何内容时&#xff0c;弹出提示文本以警告用户*/val greetingText findViewById<TextView>(R.id.printer)…

深度学习基础--ResNet网络的讲解,ResNet50的复现(pytorch)以及用复现的ResNet50做鸟类图像分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 如果说最经典的神经网络&#xff0c;ResNet肯定是一个&#xff0c;这篇文章是本人学习ResNet的学习笔记&#xff0c;并且用pytorch复现了ResNet50&…

【DeepSeek】【GPT-Academic】:DeepSeek集成到GPT-Academic(官方+第三方)

目录 1 官方deepseek 1.1 拉取学术GPT项目 1.2 安装依赖 1.3 修改配置文件中的DEEPSEEK_API_KEY 2 第三方API 2.1 修改DEEPSEEK_API_KEY 2.2 修改CUSTOM_API_KEY_PATTERM 2.3 地址重定向 2.4 修改模型参数 2.5 成功调用 2.6 尝试添加一个deepseek-r1参数 3 使用千帆…

用Golang与WebAssembly构建高性能Web应用:详解`syscall/js`包

用Golang与WebAssembly构建高性能Web应用&#xff1a;详解syscall/js包 引言为什么选择syscall/js包&#xff1f;适用场景 syscall/js包概述syscall/js包的核心概念1. js.Global2. js.Value3. js.Func4. js.Null 和 js.Undefined syscall/js包在WebAssembly中的位置 环境配置与…

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程…

ChatGPT背后的理论基础:从预训练到微调的深度解析

友情提示&#xff1a;本文内容由银河易创&#xff08;https://ai.eaigx.com&#xff09;AI创作平台GPT-4o-mini模型生成&#xff0c;仅供参考。请根据具体情况和需求进行适当的调整和验证。 随着人工智能特别是自然语言处理技术的飞速发展&#xff0c;ChatGPT作为一种强大的对话…

2025面试Go真题第一场

前几天参加了一场面试&#xff0c;GoLang 后端工程师&#xff0c;他们直接给了我 10 道题&#xff0c;我留了一个截图。 在看答案之前&#xff0c;你可以先简单做一下&#xff0c;下面我会对每个题目做一个说明。 文章目录 1、golang map 是否并发安全?2、协程泄漏的原因可能是…

网络安全第三次练习

一、实验拓扑 二、实验要求 配置真实DNS服务信息&#xff0c;创建虚拟服务&#xff0c;配置DNS透明代理功能 三、需求分析 1.创建用户并配置认证策略 2.安全策略划分接口 3.ip与策略配置 四、实验步骤 1.划分安全策略接口 2.创建用户并进行策略认证 3.配置安全策略 4.NAT配…

FTP 实验(ENSP模拟器实现)

目录 FTP 概述 FTP实验 FTP的报文交互 FTP 概述 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是一种用于在网络上进行文件传输的标准协议。它允许用户在两台计算机之间上传和下载文件。 1、FTP采用客户端-服务器模型&#xff0c;客户端通过…

Elasticsearch:使用经过训练的 ML 模型理解稀疏向量嵌入

作者&#xff1a;来自 Elastic Dai Sugimori 了解稀疏向量嵌入&#xff0c;理解它们的作用/含义&#xff0c;以及如何使用它们实现语义搜索。 Elasticsearch 提供语义搜索功能&#xff0c;允许用户使用自然语言进行查询并检索相关信息。为此&#xff0c;目标文档和查询必须首先…

Java进阶(vue基础)

目录 1.vue简单入门 ?1.1.创建一个vue程序 1.2.使用Component模板(组件&#xff09; 1.3.引入AXOIS ?1.4.vue的Methods&#xff08;方法&#xff09; 和?compoted&#xff08;计算&#xff09; 1.5.插槽slot 1.6.创建自定义事件? 2.Vue脚手架安装? 3.Element-UI的…

密码学基础

第1节 密码学概述 密码是人类在信息活动中的一项伟大发明&#xff0c;是保护秘密信息的工具。它诞生于公元前两千余年的埃及&#xff0c;迄今已有四千多年的历史。在出现年代有可查证记录的科学技术中&#xff0c;密码是历史最为悠久的科学技术之一。 百度百科里对密码的解释&…

Java入门级小案例:网页版简易计算器

网页版简易计算器 目录 网页版简易计算器需求&#xff1a;代码实现&#xff1a;效果显示 需求&#xff1a; 用HTML、CSS、JS进行书写一个具备一定功能的简易计算器。 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta cha…