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"
            }
        }
    }
}
相关推荐
NE_STOP6 小时前
Vide Coding--AI编程工具的选择
java
大树886 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
码云数智-园园6 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆7 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
霸道流氓气质7 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz7 小时前
Maven依赖冲突
java·服务器·maven
swordbob7 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
咖啡八杯7 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
十五喵源码网7 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记