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

news/2025/2/23 4:22:40

文章目录

  • 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 mvnHome
    stage('拉取代码') {
        echo '拉取代码'
    }
    stage('编译构建') {
        echo '编译构建'
    }
    stage('项目部署') {
        echo '项目部署'
    }
}

说明:

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

Declarative Pipeline 示例

示例脚本:

pipeline {
    agent any
    stages {
        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 any
    stages {
        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.niftyadmin.cn/n/5862958.html

相关文章

Linux命令终极指南:从入门到精通掌握150+核心指令

一、文件与目录管理 1. 基础导航 pwd # 显示当前工作目录 (Print Working Directory) ls -lah # 列出所有文件包括隐藏文件&#xff0c;人性化大小显示# -l 长格式 -a 所有文件 -h 易读大小 cd ~ # 切换到用户家目录 (Change Directory) cd - # 返回上…

一周学会Flask3 Python Web开发-flask3模块化blueprint配置

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们在项目开发的时候&#xff0c;多多少少会划分几个或者几十个业务模块&#xff0c;如果把这些模块的视图方法都写在app.py…

C++ ——继承

体现的是代码复用的思想 1、子类继承父类&#xff0c;子类就拥有了父类的特性&#xff08;成员方法和成员属性&#xff09; 2、已存在的类被称为“基类”或者“父类”或者“超类”&#xff1b;新创建的类被称为“派生类”或者“子类” 注意&#xff1a; &#xff08;1&#…

数据结构之【顺序表简介】

1.顺序表的概念 顺序表 是 用一段物理地址连续的存储单元 依次 存储数据元素的线性结构 一般情况下采用数组存储 2.顺序表的结构 既然顺序表可以用来存储数据元素&#xff0c; 那就少不了 增删查改 的操作 此时&#xff0c;单一地只创建数组满足不了上述操作 创建相应的结构…

【git-hub项目:YOLOs-CPP】本地实现05:项目移植

ok&#xff0c;经过前3个博客&#xff0c;我们实现了项目的跑通。 但是&#xff0c;通常情况下&#xff0c;我们的项目都是需要在其他电脑上也跑通&#xff0c;才对。 然而&#xff0c;经过测试&#xff0c;目前出现了2 个bug。 项目一键下载【⬇️⬇️⬇️】&#xff1a; 精…

使用Odoo Shell卸载模块

使用Odoo Shell卸载模块 我们在Odoo使用过程中&#xff0c;因为模块安装错误或者前端错误等导致odoo 无法通过界面登录&#xff0c;这时候你可以使用Odoo Shell来卸载模块。Odoo Shell是一个交互式Python shell&#xff0c;允许你直接与Odoo数据库和模型进行交互。以下是使用O…

ubuntu22.04离线安装K8S

1. 准备离线安装包 参考教程离线包准备教程 2. 准备环境 2.1. 准备主机 主机名ip系统k8s-master192.168.38.128ubuntu22.04k8s-node192.168.38.131ubuntu22.04 2.2. 设置host 修改 /etc/hosts 文件&#xff0c;添加master和node节点&#xff0c;需要和主机名保持一致 2…

解放大脑!用DeepSeek自动生成PPT!

DeepSeek应用&#xff08;PPT篇&#xff09; DeepSeek作为当前最好的AI大模型之一&#xff0c;其强大的文本生成能力被广泛的应用于各个领域&#xff0c;本文我们来聊聊用DeepSeek来自动生成PPT。 一、DeepSeek & PPT DeepSeek本身没有直接生成PPT的能力&#xff0c;换个…