Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本

jenkins,pipeline,流水线,完整,构建,script,脚本 · 浏览次数 : 784

小编点评

``` docker-pipeline { agent any tools { maven 'Maven36' } parameters { string defaultValue: '2.0', description: '编译版本号', name: 'BUILD_NUMBER' } stages { stage('拉取SVN代码') { steps { checkout([ $class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: '凭证ID', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'SVN地址']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater'] ]) echo '拉取成功' } } stage('Maven 编译打包') { steps { bat 'mvn --version' bat 'mvn clean package -Dmaven.test.skip=true' echo 'Maven 编译打包完成' } } stage('上传文件到 Docker 服务器、编译、上传阿里仓库') { steps { sshPublisher( publishers: [sshPublisherDesc(configName: 'DockerPublishSSH', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'PipelineDemo', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'target/demojenkins.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: ''' cd /opt/jenkins/PipelineDemo docker build -t registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER} . docker login -u hi帐号ID@aliyun.com -p 密码 registry.cn-shanghai.aliyuncs.com docker push registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER} ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'PipelineDemo', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true } } stage('K8S 升级') { agent { label 'K8SAgent' } steps { sh 'kubectl set image deployment/javademo1 vipsoft=registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER}' echo 'K8S 升级成功' } } } } ```

正文

Docker Jenkins 安装配置
Windows 2016 安装 Jenkins

前置条件可参考

Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包
Jenkins Pipeline 流水线 - 添加节点 使用代理
Jenkins Pipeline 流水线 - withCredentials 使用
Jenkins Pipeline 流水线 - 上传文件 Publish over SSH 执行命令
Jenkins Pipeline 流水线 - 上传文件 Publish over SSH + Docker 编译 + 上传到阿里仓库
Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级
Jenkins Pipeline 流水线 - Parameters 参数化构建

完整的 Pipeline Script

pipeline {
    agent any

    tools {
        maven 'Maven36'  //添加 Maven 工具
    }

    parameters {
      string defaultValue: '2.0', description: '编译版本号', name: 'BUILD_NUMBER' 
    }

    stages {
        stage('拉取SVN代码') {
            steps {
                checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: '凭证ID', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'SVN地址']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']])  //该脚本由流水线语法自动生成
                echo '拉取成功'
            }
        }
 
        stage('Maven 编译打包') {
            steps {
                //bat 'mvn --version'
                bat 'mvn clean package -Dmaven.test.skip=true'
                echo 'Maven 编译打包 完成'
            }
        }

        stage('上传文件到 Docker 服务器、编译、上传阿里仓库') {
            steps {
               sshPublisher(publishers: [sshPublisherDesc(configName: 'DockerPublishSSH', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'PipelineDemo', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'target/demojenkins.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''
               cd /opt/jenkins/PipelineDemo
               docker build -t registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER} .
               docker login -u hi帐号ID@aliyun.com -p 密码 registry.cn-shanghai.aliyuncs.com
               docker push registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER}''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'PipelineDemo', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])

               echo '上传文件 SUCCESS'
            }
        }

        stage('K8S 升级') {
            agent { label 'K8SAgent' }  //代理节点的方式比远程 ssh 要简单些
            steps {
                sh 'kubectl set image deployment/javademo1 vipsoft=registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER}' 
                echo 'K8S 升级成功'
            }
        } 
    }
} 

可以嵌套

pipeline { 
    agent any 
    stages { 
        stage('Stage 1') {  
            steps { 
                echo "Hello world" 
            } 
        } 
        stage('Sequential') {  
            environment { 
                FOR_SEQUENTIAL = "some-value" 
            } 
            stages { 
               stage('Stage 1') { 
                   steps { 
                       echo "Step 1" 
                   } 
               } 
               stage('Stage 2') { 
                   steps { 
                       echo "Step 2" 
                   } 
               } 
            } 
        } 
    } 
} 

与Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本相似的内容:

Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本

Docker Jenkins 安装配置 Windows 2016 安装 Jenkins 前置条件可参考 Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包 Jenkins Pipeline 流水线 - 添加节点 使用代理 Jenkins Pipeline 流水线

Jenkins 多分支流水线(SVN)

实际应用过程中,一般多分支流水线的方式用得比较多一些, master 对应 生成环境 develop 对应 测试环境, 将不同分支的代码构建到不同的环境中 添加 Jenkinsfile 文件 Jenkinsfile 内容见:Jenkins Pipeline 流水线 - 完整构建 Pipeline S

Jenkins Pipeline 流水线 - 声明式 Demo

Jenkins Pipeline 流水线 流水线既能作为任务的本身,也能作为 Jenkinsfile 使用流水线可以让我们的任务从UI手动操作,转换为代码化,像dockerfile 一样。从shell 命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来, 完整语法 tools:添加工具

Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包

Jenkins Pipeline 流水线 步骤 拉取SVN代码 -> Maven 构建 -> Docker 编译 -> 发布至阿里云仓库 -> K8S 更新 Jenkins插件安装 Localization: Chinese (Simplified) Subversion 【2.16.0】 --从S

Jenkins Pipeline 流水线 - 添加节点 使用代理

Jenkins 安装在 Windows 上 Docker 在Linux 上 流程 将 Docker 在 Jenkins 节点中维护 Pipeline 中指定某些阶段使用哪个节点 添加节点 Checking Java version in the PATH openjdk version "1.8.0

Jenkins Pipeline 流水线 - withCredentials 使用

添加凭证 Pipeline script pipeline { agent any stages { stage('withCredentials 使用凭证') { steps { withCredentials([usernamePassword(credentialsId: 'DockerSer

Jenkins Pipeline 流水线 - 上传文件 Publish over SSH 执行命令

Jenkins Pipeline 流水线 - 上传文件 Publish over SSH 执行命令 Jenkins插件安装 Publish over SSH 系统配置 生成代码 sshPublisher: Send build artifacts over SSH 需要在 生成 sshPublish

Jenkins Pipeline 流水线 - 上传文件 Publish over SSH + Docker 编译 + 上传到阿里仓库

Jenkins Pipeline 流水线 Publish over SSH 将jar上传到远程 Docker 服务器、执行编译命令生成镜像、将镜像上传到阿里仓库 Publish over SSH Jar包上传、编译、上传 生成上传 jar 包脚本配置 生成上传 Dockerfile 脚本配置 注意在

Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级

Jenkins Pipeline 流水线 - K8S kubectl 升级 使用代理节点 Remote SSH 远程执行命令进行升级 Remote SSH 方式 安装插件 SSH Pipeline Steps Pipeline SSH 脚本 credentialsId: 'K8SMaster' pi

Jenkins Pipeline 流水线 - Parameters 参数化构建

可以通过参数的方式,指定构建的版本 有两种方式 界面添加 Pipeline Script 脚本配置 (需要Build 一次,然后生效,不知道有没有其它办法) General 界面添加 Pipeline Script Declarative Directive Generator pipeline {