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)
    ②停止之前的进程
    ③重新启动进程
相关推荐
c语言中的小小白11 分钟前
Linux之进程概念
linux·运维·服务器
去往火星13 分钟前
ubuntu22.04取消开机输入密码(实测)
linux·运维·服务器
极客先躯17 分钟前
Hadoop-HDFS-core-site.xml,hdfs-site.xml,yarn-site.xml,krb5.conf 都是做什么的?
xml·运维·hadoop·hdfs
万界星空科技28 分钟前
MES系统实现制造业生产自动化、智能化与透明化
运维·经验分享·科技·5g·能源·制造·业界资讯
DuoRuaiMiFa31 分钟前
Replit Agent:AI驱动的全自动化软件开发革命
运维·人工智能·自动化
day3ZY1 小时前
怎么查看网站是否被谷歌收录,查看网站是否被搜索引擎收录5个方法与步骤
运维·前端·搜索引擎
Java追光着1 小时前
Linux防火墙配置绿色端口,解决无法访问java服务的问题
java·linux·运维
江南剑雨1 小时前
jenkinsfile实现镜像构建、发布
linux·运维·jenkins
不烦下雨c2 小时前
[网络]NAT、代理服务、内网穿透、内网打洞
运维·服务器·网络
陌殇殇殇2 小时前
Prometheus监控MySQL主从数据库
运维·数据库·mysql·prometheus