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

相关文章

整理一些Docker运维中常用的命令

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。以下是一些在 Docker 运维中常...

linux下时区设置问题 遵循IANA标准

在Linux下设置时区遵循IANA标准,可以通过以下步骤进行:查看当前系统时区:timedatectl列出所有可用的时区:timedatectl list-timezones选择一个合适的时区,...

debian系统下自带防火墙管理、使用教程

在 Debian 12 系统中,UFW(Uncomplicated Firewall)是一款轻量级的防火墙工具,可以帮助我们管理网络连接和阻止未经授权的访问。本教程将向您介绍如何在 Debian...

使用Systemd开机启动管理jar包

平日里测试jar包都直接java -jar xxx.jar 这样启动,如果要让其后台运行,也是使用nohup来跑今天给介绍一个用centos服务的方式启动假设我们的服务名称就叫lvtao,要启动...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件