如何将自由风格任务转换成流水线任务

Jenkins 2.x版本开始,提供了全新的Pipeline任务类型。使用Pipeline,可以通过纯编码的方式实现传统自由风格任务所实现的功能,并且支持共享库实现脚本的复用。形式的转变也使得使用版本控制工具对Pipeline脚本进行管理成为可能,由此将持续集成&持续交付工作推向了一个更广阔的阶段。

如果你对Jenkins有一定的配置、维护经验,但对Pipeline类型任务了解很少、无从下手,那你就是本次分享的目标人群!由于时间限制,本次分享偏重理论,引导Pipeline入门,会有一些简单的实践用来配合理论讲解。

本次分享交流大纲:

一、理论篇

  • Jenkins的基本架构和基本概念(清楚每个功能是由谁提供的)

  • 分析传统自由风格任务的结构(对任务做结构化拆解并固化,使心中有数)

  • 流水线任务的主要结构

二、实战篇
* 将一个使用Maven的Java项目从自由风格任务转换成流水线任务

4赞

很是期待精彩的分享,板凳抢好座等精彩大片。

同样期待,分享主可以标注下大概的分享时间

期待,什么时候分享,拿好板凳坐等 :laughing::laughing::laughing::laughing::laughing::laughing:

在分享之前,想提前请教一个问题,当我想把传统思路的项目转成流水线的过程中,我发现针对于多层判断的这种情况,在Jenkinsfile当中语法支持的不是特别给力,或者是我没有找到比较优雅的方式。
先说下场景,我的项目配置有三个参数,branch,mode,version_id,branch参数可以忽略,现在mode是一个选项参数,version_id是一个字符参数
mode有两个选项,分别是部署与回滚,version_id会有一个默认为0的值,正常构建则可以忽略这个参数
当场景来到回滚的时候,问题来了,在freestyle当中,两个if判断嵌套当然是非常简单的,现在配置流水线,难道也要沿用原来的if判断吗,这样感觉不很优雅的样子
我尝试使用when来进行构建,却发现when的嵌套是相当费事儿的,那么问题来了,不知道您这边有没有比较好的思路针对这种场景?

我的想法是,先把传统的项目转成流水线的过程中,先简化复杂的嵌套语句,用传统方式先能够实现工程的转换,操作成功了再进行脚本参数的优化调整,个人建议。

是的,目前我遇到的问题大概就是这里了,现在用的方案如下,伪代码:

pipeline{
    agent any
    parameters {
        string(name: 'branch', defaultValue: 'master', description: '请输入将要构建的代码分支')
        choice(name: 'mode', choices: ['deploy','rollback'], description: '请选择发布或者回滚?')
        string(name: 'version_id', defaultValue: '0', description: '回滚时用,默认回滚到上一次构建,如需要回滚到更早构建,请输入对应构建ID,只支持最近五次构建的回滚,部署请忽略此参数')
    }
    stages{
        stage("A"){
            
            when {
                environment name: 'mode',value: 'deploy'
            }
            steps{
                ansiColor('xterm') {
                    echo "执行部署。"
                }
            }
        }
        stage("B"){            
            when {
                environment name: 'mode',value: 'rollback'
            }
            steps{
                ansiColor('xterm') {
                script{
                    if (params.version_id == '0'){
                        echo "回滚到默认"
                    }else{
                        echo "回滚到指定"
                    }
                }
            }
            }
        }
    }
}

另外想到的一个可交流的点是,流水线中的批量发布与回滚的集成,这个时候似乎通过ansible会更方便一些,不知各位是用的什么方案

这个方案已经比较清晰了,也没有看到你上面说的when嵌套的情况存在呢?

另外就是这两个动作是互斥的,不想干,串不成流水线,可以考虑分拆为两个独立任务。分拆也可以减少逻辑判断。

拆分的思路目前还没有使用过,后续尝试一下

希望可以听到一系列流程,拉取,构建,测试,部署,回滚,这样总体有个思路就挺好上手了 :laughing:

希望能讲一下mvn工程,一个工程多个项目的打包处理。