Jenkins pipeline配置示例

前提条件:已经安装Jenkins并能正常启动

如果Jenkins安装启动遇到问题可以参考:

1.创建pipeline

  1. 点击新建项目:
  1. 输入名称,选择pipeline
  1. 进入配置页面,如果要配置GitHub Webhook要勾选:<font style="color:rgb(20, 20, 31);">GitHub hook trigger for GITScm polling</font>
  1. 进行pipeline配置:
  • Definition选择Pipeline script from SCM

作用是让Jenkins从源代码管理(SCM)系统拉去Jenkins的脚本文件

  • SCM选择Git
  • Repository URL填写GitHub仓库的url
  • 如果仓库是public的话无需填写Credentials
  • Branch Specifier填写要进行pipeline操作的仓库分支
  • Script Path默认是Jenkinsfile即可

其余选项无需配置,保持默认即可

2.配置maven

运行maven指令的时候一直出现command not found的问题,但是服务器上已经配置过了maven,于是在Jenkins中进行配置:

DashBoard------Manage Jenkins------Tools------Maven Configuration

配置settings文件的路径即可

3.编写Jenkinsfile

在项目的根目录下创建Jenkins脚本文件,文件名为Jenkinsfile

groovy 复制代码
pipeline {
    agent any

    environment {
        // 定义环境变量
        SERVER_IP = your-server-ip        					// 服务器IP地址
        SERVER_USER = your-username    					// 服务器用户名
        TARGET_DIR = you-jarFileDir                  // 服务器上的目标目录
        JAR_FILE = your-jarFileName                // 打包后的文件名
    }

    stages {
        stage('Clone Source Code') {
            steps {
                // 拉取项目源码
                //注意: 这里根据自己的需求选择合适的分支以及仓库地址(ssh或https)
                git branch: 'master', url: 'your-repository-url'
            }
        }
        stage('Build Project') {
            steps {
                // 使用 Maven 构建项目
                sh 'mvn clean package -DskipTests'
            }
        }
        stage('Verify Build Output') {
            // 验证构建结果
            steps {
                sh 'ls -l target/'
            }
        }
        stage('Test') {
            steps {
                // 运行测试
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            // 部署到远程服务器
            steps {
                script {
                    // StrictHostKeyChecking=no 表示不检查远程主机的公钥 建议配置好ssh的免密登录
                    // Step 1: 传输文件到远程服务器 scp -v 可以查看文件传输的进度
                    sh """
                        scp -v -o StrictHostKeyChecking=no target/${JAR_FILE} ${SERVER_USER}@${SERVER_IP}:${TARGET_DIR}
                    """

                    // Step 2: 杀死已存在的进程
                    def killStatus = sh(script: """
                        ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} 'pgrep -f ${JAR_FILE} | xargs kill -9 || true'
                    """, returnStatus: true)

                    echo "Kill process exit status: ${killStatus}"

                    // Step 3: 启动新的进程
                    sh """
                        ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} 'nohup java -jar ${TARGET_DIR}/${JAR_FILE} > /dev/null 2>&1 &'
                    """
                }
            }
        }
    }

    post {
        always {
            // 每次构建结束后清理工作目录
            cleanWs()
        }
        success {
            echo 'Deployment finished successfully'
        }
        failure {
            echo 'Deployment failed'
        }
    }
}

具体流程:

  1. 拉取代码(注意ssh方式和https方式的不同)
  2. 构建项目
  3. 进行测试
  4. 部署到远程服务器
    ①文件传输(jar)
    ②停止之前的进程
    ③重新启动进程
相关推荐
johnny2337 小时前
运维管理面板:AcePanel、OpenOcta、DeepSentry
运维
青梅橘子皮8 小时前
Linux---基本指令
linux·运维·服务器
REDcker8 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
cui_ruicheng9 小时前
Linux进程间通信(三):System V IPC与共享内存
linux·运维·服务器
ACP广源盛1392462567311 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
峥无12 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
码云数智-大飞12 小时前
本地部署大模型:隐私安全与多元优势一站式解读
运维·网络·人工智能
Harvy_没救了13 小时前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
春风有信13 小时前
【2026.05.01】Windows10安装Docker Desktop 4.71.0.0步骤及问题解决
运维·docker·容器
2401_8734794014 小时前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络