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, 运维

相关文章

在1Panel中解决Docker内PHP网络请求超时问题

在1Panel管理面板中,我们可能会遇到在使用Docker运行的PHP环境中发起网络请求时出现的超时问题。最近给博客写了一个远程请求插件,之前还是正常,这两天突然请求500错误了...问题分析当...

surge中配置wireguard客户端连接

surge还是挺好用的,不过最近研究内网穿透,想试试wireguard的设置,然后折腾了一下,虽然秒被封,但是至少这个配置是成功的,可以参考在surge中新建一个配置,内容按如下做调整即可[Pr...

macOS下安装与配置网络抓包工具Charles入门教程

charles抓包工具是基于HTTP请求中间人代理,通过和服务端、客户端建立通信将客户端的请求数据发送服务器,并将响应数据传输给客户端,实现抓包记录,最最最...我想推荐的原因是...它很简洁....

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件