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

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

docker-compose启动Jenkins

bash 复制代码
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推荐插件,然后再一下插件

bash 复制代码
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

bash 复制代码
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"
            }
        }
    }
}
相关推荐
lang201509281 分钟前
深入掌握 Maven Settings:从配置到实战
java·maven
scx_link4 分钟前
修改JetBrains产品(IntelliJ IDEA 、PyCharm等软件)的默认插件和日志的存储位置
java·pycharm·intellij-idea
BUG?不,是彩蛋!4 分钟前
Maven-Java 项目到底解决了什么痛点?
java·servlet·maven
小池先生5 分钟前
idea配置代码注释模板
java·ide·intellij-idea
inferno6 分钟前
Maven基础(一)
java·开发语言·maven
摇滚侠11 分钟前
Spring Boot3零基础教程,Reactive-Stream 规范核心接口,笔记103
java·spring boot·笔记
程序猿小蒜1 小时前
基于springboot的校园社团信息管理系统开发与设计
java·前端·spring boot·后端·spring
兔兔爱学习兔兔爱学习1 小时前
Spring Al学习9:模型上下文协议(MCP)
java·学习·spring
m0_748248021 小时前
Spring MVC中@RequestMapping注解的全面解析
java·spring·mvc
Mos_x1 小时前
28.<Spring博客系统⑤(部署的整个过程
java·后端