这篇文章上次修改于 1043 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

一、自由风格项目弊端

任务的完成需要在Jenkins端维护大量的配置
没法做版本控制
可读性、可移植性很差,不够优雅

二、流水线的作用

重要的功能插件,帮助Jenkins定义了一套工作流框架;
Pipeline 的实现方式是一套 Groovy DSL( 领域专用语言 ),所有的发布流程都可以表述为一段 Groovy 脚本;
将WebUI上需要定义的任务,以脚本代码的方式表述出来;
帮助jenkins实现持续集成CI(Continue Integration)和持续部署CD(Continue Deliver)的重要手段;

总结:
pipeline流水线操作不用过多关于自由风格项目的图形设置与步骤,只需将相关的操作,生成对应的DSL语言,并按自己的需求进行一步一步执行即可,同时该代码的移植性更强;并且在流水线语法中,可自动生成我们需要的代码,便于维护。

流水线入门官方文档:
https://www.jenkins.io/zh/doc/book/pipeline/getting-started/
流水线语法官方文档:
https://www.jenkins.io/zh/doc/book/pipeline/syntax/

三、创建一个简单的pipline流水线项目

1、实现目的

连接gitlab的myblog仓库代码
下载myblog仓库代码至本地(执行该任务的主机,如:k8s-slave2 /app/jenkins_jobs/)
推送到远端的服务器10.3.152.78的/tmp/myblog/目录下
执行相关sh命令sh /tmp/ops_start.sh
2、新建pipline项目

3、默认情况下,不需要填任何内容,只需要在"流水线"标签选项中写脚本

整个流水线作业,全部由该脚本完成,没有任何额外的操作

4、构建该流水线作业(成功)

四、通过Blue Ocean查看pipline作业

五、pipeline流水线脚本

pipeline {
    agent any
stages {
    stage('更新开始') {
        steps {
            echo '更新开始'
        }
    }
    stage('git代码仓库'){
        steps {
            git credentialsId: '6a8972e3-a817-4117-8018-2653e98548f9', url: 'https://gitlab.cedarhd.com/zhoumingkang/myblog.git'
        }
    }
    stage('推送&执行脚本'){
        steps {
            sshPublisher(publishers: [sshPublisherDesc(configName: '10.3.152.78', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'sh /tmp/ops_start.sh > /dev/null 2>&1', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/tmp/myblog/', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '**')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
        }
    }
}
}

六、脚本解释

agent:

指明使用哪个agent节点来执行任务,定义于pipeline顶层或者stage内部
any:

可以使用任意可用的agent来执行
label:

在提供了标签的 Jenkins 环境中可用的代理上执行流水线或阶段。 例如: agent { label ‘my-defined-label’ },最常见的使用方式
none:

当在 pipeline 块的顶部没有全局代理, 该参数将会被分配到整个流水线的运行中并且每个 stage 部分都需要包含他自己的 agent 部分。比如: agent none
stages:

包含一系列一个或多个 stage指令, stages 部分是流水线描述的大部分"work" 的位置。 建议 stages 至少包含一个 stage 指令用于连续交付过程的每个离散部分,比如构建, 测试, 和部署。

steps:

在给定的 stage 指令中执行的定义了一系列的一个或多个steps。

七、“git代码仓库”脚本编写方法

1、点击流水线语法(用以编写生成代码)

1649658031680.png

2、选择git

1649657901465.png

3、选择连接仓库与凭证(跟自由项目方法一致)

4、此时可以将生成的脚本,复制到pipeline脚本上。

1649658245803.png

八、“推送&执行脚本”编写方法

1、点击流水线语法(用以编写生成代码)选择sshPulisher功能,接下来与自由项目操作一致

2、生成相关的代码
932c87f8c05d85b4c739411e0b0c2e47.png