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"
            }
        }
    }
}
相关推荐
还是奇怪13 分钟前
Simon Willison 用 DSPy 优化 Datasette Agent 提示词:提示工程正在变成可测试的软件工程
java·开发语言·软件工程
D2aZXN3FhrDa7e21218 分钟前
佛山乐从低预算实体店如何选择?看美诚AI自动化获客方案
运维·人工智能·自动化·佛山美诚科技有限公司
zfoo-framework28 分钟前
1.ansible安装 2.虚拟机克隆
java
码上解惑38 分钟前
从 Dify 工作流说起:常用节点怎么选、怎样组合?
java·人工智能·ai·agent·dify·智能体·spring ai
无足鸟ICT41 分钟前
【RHCA+】查看变量
linux·运维·服务器
Kina_C1 小时前
Linux DNS 服务器-从高速缓存到辅助 DNS 部署指南
linux·运维·服务器·dns
suaizai_1 小时前
TypeScript 7 正式发布!Vue 暂被 “拒之门外“ !!!
linux·运维·ubuntu
青山木2 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
程序员-珍2 小时前
报错下载android sdk失败
android·java
糖果店的幽灵2 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph