Jenkins安装与配置、构建作业、流水线、构建、测试和部署:Debian系统环境下的CI/CD自动化实现

Jenkins 是一个功能强大的开源自动化服务器,用于实现持续集成(CI)和持续交付(CD)。在现代软件开发流程中,Jenkins 能帮助团队自动构建、测试和部署应用程序,实现更高效的开发和运维。本文将详细介绍如何在 Debian 系统上安装和配置 Jenkins,并通过 Jenkins 管理构建作业、流水线、自动化构建、测试和部署流程,帮助专业开发者实现 CI/CD 自动化。

一、Jenkins 安装与配置

1.1 系统要求

在开始之前,确保你使用的是 Debian 10 或以上 版本,并已安装 Java 11 或以上版本。Jenkins 是基于 Java 的应用程序,因此必须安装 Java 环境。

安装 Java

sudo apt update
sudo apt install openjdk-11-jdk

安装完 Java 后,验证安装是否成功:

java -version

输出应类似于:

openjdk version "11.0.11" 2021-04-20

1.2 Jenkins 安装

Jenkins 官方提供了用于 Debian 系统的包管理工具支持。以下是安装步骤:

  1. 添加 Jenkins 官方仓库密钥
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null
  1. 添加 Jenkins 仓库源到系统
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null
  1. 更新系统包缓存并安装 Jenkins
sudo apt update
sudo apt install jenkins
  1. 启动 Jenkins 服务
sudo systemctl start jenkins
  1. 设置开机自动启动 Jenkins
sudo systemctl enable jenkins

1.3 Jenkins 初始设置

Jenkins 安装完成后,你可以通过 Web 界面访问 Jenkins:

在浏览器中输入 http://<your-server-ip>:8080

首次访问 Jenkins 时,会要求输入一个初始管理员密码。可以通过以下命令找到该密码:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

复制并粘贴密码到 Web 页面,随后你将看到 Jenkins 的设置向导。你可以选择安装推荐的插件或自定义安装插件。

最后,创建一个管理员用户完成初始配置。


二、构建作业与流水线

在 Jenkins 中,构建作业(Job) 是自动化任务的基本单位。Jenkins 提供了两种方式创建作业:传统的自由风格作业流水线(Pipeline) 作业。流水线允许你定义更复杂的自动化流程,包括代码构建、测试、部署等阶段。

2.1 创建自由风格作业

  1. 登录 Jenkins 后,点击左侧菜单的 “新建项目”。
  2. 输入项目名称并选择 “自由风格项目”。
  3. 在“源码管理”部分,可以选择 Git 或其他版本控制工具,并配置相应的代码仓库地址。
git@github.com:user/repo.git
  1. 配置 “构建触发器”。可以选择 定时构建基于 SCM 变更触发构建

例如,使用 cron 表达式设定定时构建:

H/15 * * * *

这将每 15 分钟触发一次构建。

  1. 在“构建”部分,选择需要执行的构建命令。例如,如果是基于 Maven 构建的 Java 项目,选择 Invoke top-level Maven targets 并指定构建目标。
clean install
  1. 保存并应用。

点击 “立即构建” 即可手动触发构建,查看 Jenkins 控制台输出了解构建过程。

2.2 创建 Jenkins 流水线作业

流水线作业允许你通过代码定义构建、测试和部署过程,常用的文件是 Jenkinsfile。Jenkinsfile 使用 Groovy 语言编写,具备高度灵活性。

步骤:

  1. 创建一个新的流水线项目:

    • 点击左侧的 “新建项目”。
    • 输入项目名称,选择 “流水线” 类型。
  2. 在 “流水线” 部分,可以选择定义在 SCM(如 Git)中的 Jenkinsfile,或者直接在 Jenkins 中配置流水线脚本。

示例 Jenkinsfile:

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/user/repo.git'
            }
        }
        stage('Build') {
            steps {
                sh './mvnw clean install'
            }
        }
        stage('Test') {
            steps {
                sh './mvnw test'
            }
        }
        stage('Deploy') {
            steps {
                sh './deploy.sh'
            }
        }
    }

    post {
        success {
            echo 'The build and deploy process was successful!'
        }
        failure {
            echo 'Something went wrong.'
        }
    }
}

此脚本定义了 4 个阶段:CheckoutBuildTestDeploy。每个阶段代表流水线中的一个步骤,可以根据需求进一步扩展。


三、自动化测试与部署

3.1 集成测试工具

Jenkins 可以轻松集成各种测试工具,如 JUnitSelenium 等,自动化执行测试并在构建页面上展示测试结果。

添加 JUnit 测试步骤:

在上面的 Jenkinsfile 示例中,mvnw test 会自动执行测试。为了在 Jenkins 中展示 JUnit 测试结果,你需要配置 Publish JUnit test result report

  1. 在流水线作业的配置页面,找到 “后置操作”。
  2. 选择 “Publish JUnit test result report”,并指定测试结果文件路径:
**/target/surefire-reports/*.xml

构建结束后,Jenkins 会自动收集并展示测试结果。

3.2 自动化部署

Jenkins 可以将构建产物部署到各种环境中。常见的部署目标包括:

  • 部署到 Web 服务器(如 Tomcat、Apache)。
  • 部署到容器平台(如 Docker、Kubernetes)。

示例:部署到远程服务器

通过 Jenkinsfile 中的 ssh 步骤,你可以将构建的应用程序部署到远程服务器。例如,使用 SSH 插件

stage('Deploy to Server') {
    steps {
        sshagent(['my-ssh-credentials-id']) {
            sh '''
                scp target/myapp.jar user@remote-server:/path/to/deploy/
                ssh user@remote-server "bash /path/to/deploy/deploy.sh"
            '''
        }
    }
}

该脚本通过 SSH 将构建产物 myapp.jar 复制到远程服务器,并执行部署脚本 deploy.sh

标签: Linux, 运维

相关文章

Linux下的SSH服务配置与安全使用指南

重要提示:本文只是我日常使用的参考,请你先在本地做好测试,以免修改后不能正常登录服务器。 尤其是密钥登录的情况,一定要先将公钥放到服务器对应目录中SSH(Secure Shell)是一种加密网络...

macOS下使用UTM安装Alpine Linux虚拟机

在macOS下使用UTM(Universal Turing Machine)安装Alpine Linux虚拟机是一个相对简单的过程,但需要一些基本的配置和步骤。以下是详细的指南,涵盖了从安装UT...

Linux下swap分区的使用及配置

在Linux系统中,Swap分区用于在物理内存(RAM)不足时,将部分内存数据转移到硬盘上,以释放内存空间。Swap分区对于系统的稳定运行至关重要,尤其是在内存资源有限的情况下。本文将详细介绍如...

如何实现让我们部署的Go应用在进程挂掉之后自动重启

在软件开发和部署过程中,确保应用的高可用性是至关重要的。对于使用Go语言开发的应用来说,实现在进程异常终止后自动重启是提高服务稳定性的有效策略之一。下面将围绕如何实现Go应用在挂掉之后自动重启进...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件