Jenkins打包项目成Docker镜像(Pipeline形式)

本文介绍了如何使用JenkinsPipeline进行项目管理,包括从SVN拉取代码、Maven构建、清理目标服务器、发送jar包和启动容器等步骤。还提到了使用BlueOcean插件的可选项。
摘要由CSDN通过智能技术生成

 前置文档

本教材是在下述文档的基础上修改的,请先阅读下述文档

Jenkins打包项目成Docker镜像-CSDN博客文章浏览阅读82次,点赞3次,收藏5次。本文档是在下述文档的基础上修改的,请先阅读一下文档Jinkins打包项目成jar-CSDN博客文章浏览阅读63次。所需服务器:SVN服务器;Jenkins服务器;代码运行服务器;服务器环境要求:SVN服务器:无Jenkins服务器:jdk、maven运行服务器:jdk执行步骤:编写Java代码;代码上传SVN;Jenkins从SVN拉取代码,编译构建后,推送到运行服务器上并运行;https://blog.csdn.net/null_of_error/article/details/136042099

说明

        在Pipeline中,可以创建更灵活、更自由的配置。Pipeline就行dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队的其它成员同时参与进来,同时可以开发web-ui不能完成的复杂的构建逻辑,可读性也更好。

        Pipeline语法的五个必备的组成部分有:

  1. pipeline:整条流水线
  2. agent:执行器(如果配置了jenkins集群的话,可以指定使用某台机器)
  3. statges:所有阶段
  4. statge:某一阶段,可以有多个。
  5. steps:阶段内的每一步,可以用来执行命令。

示例:

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

 

步骤

1. 创建Pipeline项目

2. 定义流水线阶段

根据项目确定你的项目有哪些阶段,如:

  • 拉取代码
  • 执行构建
  • 清理目标服务器
  • 上传文件、构建镜像、运行容器

3. 定义每个阶段

点击流水线语法,可像web-ui一样填写信息,然后让它给你生成代码

 

3.1 从SVN拉取代码

选择【checkout】

checkout changelog: false, poll: false, scm: [$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'd0a3f5e1-b231-43d3-a89d-f0de3c767e7c', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'svn://192.168.3.129/p2/DemoApplication']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']]

 

3.2 maven构建

在stages前配置maven信息,这里的配的是【Global Tool Configuration】->【Maven】中的【Name】

3.3 清理目标服务器

3.4 发送jar包到目标服务器

3.5 总的pipeline文件

pipeline {
    agent any

    tools {
        maven "maven 3.9.6"
    }
    stages {
        stage('拉取代码') {
            steps {
			checkout changelog: false, poll: false, scm: [$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'd0a3f5e1-b231-43d3-a89d-f0de3c767e7c', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'svn://192.168.3.129/p2/DemoApplication']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']]
               echo '代码拉取完毕'
            }
        }
    


        stage('执行构建') {
            steps {
                sh """
				pwd
				mvn clean package
			 """
			 echo 'mvn打包完成'
            }
        }

        stage('清理目标服务器') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'docker-server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''rm -rf /opt/test3/*
docker stop DemoApp3
docker rm DemoApp3
docker rmi demo-app-image3''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo 'clean target success'
            }
        }


        stage('发送jar包到服务器') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'docker-server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'test3', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''docker build -t demo-app-image3 /opt/test3
docker run -d -p 8070:8080 --name DemoApp3 demo-app-image3''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'test3', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo 'send file and start container'
            }
        }


   }

}

4. 安装Blue Ocen插件(可选)

安装Blue Ocen 1.25.5版本

  • 31
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值