Jenkins通过Pipeline流水线方式编译Java项目

发布于:2025-06-20 ⋅ 阅读:(18) ⋅ 点赞:(0)

记录一下本人流水线配置,前提使用的jenkins:lts镜像然后自己通过dockerfile添加了JDK1.8和mvn插件,因为Jenkins镜像中的java版本过高编译我的项目会有问题所以新加一个1.8的。

docker-compose启动Jenkins

services:
  jenkins:
    image: jenkins-mvn:lts  
    container_name: jenkins
    restart: on-failure:3
    user: root

    network_mode: host

    environment:
      TZ: Asia/Shanghai
      LANG: zh_CN.UTF-8
      LANGUAGE: zh_CN:zh
      LC_ALL: zh_CN.UTF-8

    volumes:
      - /data/jenkins/jenkins-data:/var/jenkins_home   # Jenkins数据目录持久化
      - /usr/bin/docker:/usr/bin/docker   # 宿主机docker命令
      - /var/run/docker.sock:/var/run/docker.sock  # docker.sock用于执行宿主机容器命令
      - /etc/localtime:/etc/localtime:ro           # 时区同步
      - ./settings.xml:/opt/maven/conf/settings.xml  #私服配置

启动之后安装Jenkins推荐插件,然后再一下插件

Publish over SSH
Git Push
Maven Integration
Pipeline Maven Integration
Deploy to container
SSH
SSH Agent
SSH2 Easy
SSH Pipeline Steps
AnsiColor
Docker Pipeline

Jenkinsfile

pipeline {
    agent any

    environment {
        VERSION = 'uat'
        MVN_SETTINGS = '/opt/maven/conf/settings.xml'
        JAVA_HOME = '/opt/java'
        PATH = "/opt/java/bin:${env.PATH}"
    }

    stages {
        stage('拉取代码') {
            steps {
                echo "\033[32m****** 开始拉取代码 ******\033[0m"
                git(
                    url: 'http://192.168.1.10/test.git',  #项目地址
                    credentialsId: '3d9048d1-e712-4cf1-b4cd',   #git密钥
                    branch: "${VERSION}"
                )
                echo "\033[32m****** 拉取代码完成 ******\033[0m"
            }
        }

        stage('构建项目') {
            steps {
                echo "\033[32m****** 开始构建项目(使用JDK1.8) ******\033[0m"
                        sh '''
                             export JAVA_HOME=/opt/java
                             export PATH=$JAVA_HOME/bin:$PATH
                             export MAVEN_OPTS="-Xmx512m -Xms256m"
                             ulimit -n 4096
                             java -version
                             mvn -s /opt/maven/conf/settings.xml clean package -U -Dmaven.test.skip=true
                        '''

            }
        }

        stage('部署到192.168.1.12') {
            steps {
                echo "\033[32m****** 开始部署到目标环境 ******\033[0m"
                sshPublisher(
                    publishers: [
                        sshPublisherDesc(
                            configName: '192.168.1.12',
                            transfers: [
                                // 备份旧版本
                                sshTransfer(
                                    execCommand: '''
                                        if [ -f /data/test/test/test.jar ]; then
                                            mkdir -p /data/test/test/backup
                                            cp /data/test/test/test.jar /data/test/test/backup/test-$(date +%Y%m%d_%H%M).jar
                                            echo "旧版本已备份"
                                        fi
                                    '''
                                ),
                                // 上传新版本并重启
                                sshTransfer(
                                    sourceFiles: 'target/test.jar',
                                    removePrefix: 'target',
                                    remoteDirectory: 'test',
                                    cleanRemote: false,
                                    makeEmptyDirs: true,
                                    execCommand: '''
                                        cd /data/test/test
                                        /bin/bash constart.sh
                                        '''
                                )
                            ],
                            verbose: true
                        )
                    ]
                )
                echo "\033[32m****** 部署完成 ******\033[0m"
            }
        }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到