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"
            }
        }
    }
}
相关推荐
DATAO丶3 分钟前
ALB、NLB、CLB 负载均衡深度剖析
运维·计算机网络·负载均衡
喜欢敲代码的程序员5 分钟前
Spring Boot中请求参数读取方式
java·spring boot·后端·spring
唐不是营养物质23 分钟前
Apache POI 的 HSSFWorkbook、SXSSFWorkbook和XSSFWorkbook三者的区别
java
m0_6948455725 分钟前
服务器怎么跑Python项目?
linux·运维·服务器·python·云计算
人机与认知实验室37 分钟前
自动化与智能化
运维·人工智能·自动化
樽酒ﻬق1 小时前
Prometheus Operator:Kubernetes 监控自动化实践
java·算法·云原生·运维开发
有梦想的攻城狮1 小时前
快速搭建Maven仓库服务
java·maven·仓库·nexus
面朝大海,春不暖,花不开1 小时前
Java进程API详解
java·开发语言·python
Lyinj1 小时前
jdk1.8 nio相关。java对象和epoll三大函数怎么关联的?(有点乱有点跳)
java·python·nio
Linux运维技术栈1 小时前
CentOS 7 升级系统内核级库 glibc 2.40 完整教程
linux·运维·centos·glibc·系统内核