Jenkins 多分支流水线(SVN)

jenkins,多分,支流,水线,svn · 浏览次数 : 890

小编点评

**实际应用中多分支流水线的 Jenkins Pipeline 的常见方式是使用 Jenkins Pipeline 的多个 stage 和 Jenkinsfile 文件来实现代码构建和部署的功能。** **1. 分支流水线结构** 多分支流水线通常包含以下几个阶段: - **CheckOut SVN 代码**:用于从 SVN 中获取代码并进行版本控制。 - **Maven Build**:构建项目的中间产品。 - **Docker Build、Push Repository**:构建和推送 Docker镜像。 - **K8S Deployment**:将构建的镜像部署到 K8S 虚拟机上。 **2. Jenkinsfile 文件** Jenkinsfile 文件用于定义流水线的执行步骤,包括: - **agent**:指定构建环境的 agent。 - **parameters**:设置构建环境的参数,例如编译版本号。 - **tools**:配置构建工具,例如 Maven 和 Docker。 - **stages**:定义流水线的各个阶段。 - **stage**:定义一个阶段的具体步骤。 **3. Jenkins Pipeline 的例子** ```groovy pipeline { agent { label 'JenkinsAgent' } parameters { string(defaultValue: '4.2', description: '编译版本号') name: 'BUILD_NUMBER' } tools { maven 'Maven36' } stages { stage('CheckOut SVN Code') { steps { checkout([ $class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'c3b4ef0e-b414-4376-8a21-2e08e1c84dfb', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'SVN地址']] ]) echo 'CheckOut SVN Success' } } stage('Maven Build') { steps { bat 'mvn clean package -Dmaven.test.skip=true' echo 'Maven Build Success' } } # Docker 在 3.88服务器 stage('Docker Build 、Push Repository') { 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 'Docker SUCCESS' } } # K8S 在 3.181服务器 stage('K8S Deployment') { steps { script { def remote = [:] remote.name = 'K8S Server' remote.host = '172.16.3.181' remote.allowAnyHosts = true withCredentials([usernamePassword(credentialsId: 'K8SMaster', passwordVariable: 'password', usernameVariable: 'username')]) { remote.user = \"${username}\" remote.password = \"${password}\" //把凭证中的用户名、密码拿出来给 remote参数 } sshCommand remote: remote, command: "kubectl set image deployment/javademo1 vipsoft=registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER}" echo 'K8S Deployment SUCCESS' } } } } } ``` **4. 注意事项** - 每个阶段的步骤可以根据项目的具体需求进行调整。 - 使用 Jenkinsfile 可以简化和管理流水线。

正文

实际应用过程中,一般多分支流水线的方式用得比较多一些,
master 对应 生成环境
develop 对应 测试环境,
将不同分支的代码构建到不同的环境中

添加 Jenkinsfile 文件

Jenkinsfile 内容见:Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本

DevOps/trunk 专门用来放运维脚本
image

提交 Jenkins 到 SVN
注意代码要放到 trunk,branches 等 分支中

创建多分支流任务

image
image
image
image

运行

image
多个 stage 使用不同代理,会在每一步都进行SVN 的切换
image
完整 pipeline 脚本

pipeline {
    agent { label 'JenkinsAgent' }
    parameters {
      string defaultValue: '4.2', description: '编译版本号', name: 'BUILD_NUMBER' 
    }

    tools {
        maven 'Maven36'  //添加 Maven 工具
    }   
    stages { 
       stage('CheckOut SVN Code') { 
           steps { 
                checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'c3b4ef0e-b414-4376-8a21-2e08e1c84dfb', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'SVN地址']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']])  //该脚本由流水线语法自动生成
                echo 'CheckOut SVN Success'         
           } 
       } 
       // Jenkinsfile 的 地址和代码不在同一个仓库下时,需要用这种嵌套的方式,否则,代码刚拉下来,执行第二个 stage 时就被删除了。
       stage('Maven Build') { 
           steps { 
                bat 'mvn clean package -Dmaven.test.skip=true'
                echo 'Maven Build Success'
           } 
       } 

       //Docker 在 3.88服务器
       stage('Docker Build 、Push Repository') {
            steps {
			   #sourceFiles windows下注意 用 \\ 否则可能上传时导致文件找不到。
               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 'Docker  SUCCESS'
            }
        }

        //K8S 在 3.181服务器
        stage('K8S Deployment') {
            steps {
                script {                 
                    def remote = [:]
                    remote.name = 'K8S Server'
                    remote.host = '172.16.3.181'
                    remote.allowAnyHosts = true
                    withCredentials([usernamePassword(credentialsId: 'K8SMaster', passwordVariable: 'password', usernameVariable: 'username')]) {
                        remote.user = "${username}"     // 变量要使用“”双引号
                        remote.password = "${password}" //把凭证中的用户名、密码拿出来给 remote参数 
                    }
                    sshCommand remote: remote, command: "kubectl set image deployment/javademo1 vipsoft=registry.cn-shanghai.aliyuncs.com/vipsoft/vipsoft:${BUILD_NUMBER}" 
                    echo 'K8S Deployment  SUCCESS'
                }
            }
        }
    } 
} 

image
image

与Jenkins 多分支流水线(SVN)相似的内容:

Jenkins 多分支流水线(SVN)

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

Jenkins Pipeline 多分支流水线 Input length = 1

Jenkins 多分支流水线 构建过程中报错。 [Pipeline] // node [Pipeline] End of Pipeline java.nio.charset.MalformedInputException: Input length = 1 at java.base/java.nio

Jenkins技术概述与开发实战

本文详细讲解了Jenkins的安装与配置、构建作业、流水线、构建、测试和部署的具体方法,涵盖关键概念、详细步骤及代码示例,旨在帮助专业从业者实现高效的CI/CD自动化流程。 关注作者,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕博,

vivo 自研Jenkins资源调度系统设计与实践

本文从目前业界实现Jenkins的高可用的实现方案,分析各方案的优缺点,引入vivo目前使用的Jenkins高可用方案,以及目前Jenkins资源的调度方案的设计实践和目前的落地运行效果。

[转帖]20191022-从Jenkins NativeOOM到Java8内存

我把老掉牙的Jenkins升级了,它跑了几天好好的;后来我有一个python脚本使用JenkinsAPI 0.3.9每隔2.5分钟发送约300余get请求,结果过了3天,它就挂了;当我开两个脚本时,40.5小时就挂了。(可以通过搜索Jenkins日志/var/log/jenkins/* 中字符Jen

【Jenkins系列】快速创建Jenkins Job

Jenkins Job 类型 1.Freestyle project 这个是jenkins的基础功能,可以用它来执行各种构建任务,他只能构建在一个电脑上,如果没有太多的需求,这个job基本够用了,它包含了所有基础功能. 2.Pipeline 真实的工作环境有很多job,比如先编译,然后执行静态代码检

Jenkins部署

目录Jenkins部署1. 创建sa2. 创建pvc3. 创建deployment4. 创建service5. 登录jenkins6. 简单配置jenkins6.1 安装插件6.2 配置用户6.3 配置插件下载地址6.3.1 页面操作6.3.2 容器操作6.3.3 重启jenkins6.3.4 安装

Jenkins 简述及其搭建

什么是持续集成? 持续集成(CI)是在软件开发过程中自动化和集成许多团队成员的代码更改和更新的过程。在 CI 中,自动化工具在集成之前确认软件代码是有效且无错误的,这有助于检测错误并加快新版本的发布。 什么是持续交付? 持续交付 (CD) 是指每天多次将新软件投入生产,自动将应用程序交付到基础设施环

Jenkins快速入门部署+实践

安装 方法一 Jenkins中文网下载jenkins.war 方法二 直接从http://mirrors.jenkins-ci.org/war/latest/jenkins.war 下载最新的war包,然后解压到某个固定目录就算安装完成了 启动方式 启动方法: java -jar jenkins.w

Jenkins 基础配置

博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 解决:Jenkins: signature verification failed in update site ‘default‘ (show details) jenkins 下一切皆文件 虚拟机基本配置 J