pipeline开发笔记

jenkins常用插件


Build Authorization Token Root

参考链接:https://blog.youkuaiyun.com/weixin_45310323/article/details/130237311

使用拥有 读取权限匿名用户 访问,配置 钩子链接(webhook) 时需要用到, 如果不使用,每次访问链接都需要提供认证!

该插件的作用是即使匿名用户看不到Jenkins,也可以访问构建和相关的REST构建触发器。用法是在网络钩子链接中输入:

# JENKINS_SITE 为Jenkins站点地址
# JOB_NAME 为任务名称
# SECRET 为触发远程构建的身份验证令牌值
http://${JENKINS_SITE}/buildByToken/build?job=${JOB_NAME}&token=${SECRET}

配置GitLab的webhooks(钩子)

选择仓库 > 设置 > webhooks

OK! 完成了 当提交代码到gitlab后会自动构建任务


配置构建触发器–示例

针对 JAR-1任务添加token(令牌) 如下图:

添加完成后浏览器调用地址:http://${Jenkins_URL}/buildByToken/build?job=JAR-1&token=666666,调用成功后在Jenkins页面可以观察到是否自动构建此任务了


piblish over ssh

可以实现不同节点之间传递文件,比如A节点将代码编译打包好,然后通过ssh发送到目标节点上,配置相应的命令完成项目的部署,目标节点无需是是一个slave,只要A节点能够通过ssh连接到B节点即可。


Blue Ocean

简化Jenkins显示


Workspace Cleanup Plugin

清理工作空间


Git插件

当前版本:4.12.1

插件地址:https://plugins.jenkins.io/git/

作用:该插件为Jenkins项目提供了基本的git操作。它可以轮询、提取、签出、分支、列表、合并、标记和推送存储库。

我们其实安装该插件,就可以实现Git项目的代码拉取了。

这个是最基本核心的插件。后面Git client,Git server Plugin, GitHub plugin ,GitLab Plugin都是针对具体功能需求,减少操作步骤而封装的各种专用场景下的插件。


Pipeline

插件地址:https://plugins.jenkins.io/workflow-aggregator/

作用:该插件给Jenkins提供Pipeline功能。这个插件和它依赖的其他插件,整体组成了Jenkins 2.0的Pipeline功能。

例如:

Pipeline Graph Analysis Plugin : 提供 REST API的pipeline访问和管理功能。

Pipeline: API:定义管道API的插件。

Pipeline: Basic Steps:添加管道步骤“build”以触发其他作业的生成。

Pipeline: Declarative:一个顽固的声明性的管道。


Localization: Chinese (Simplified) --中文显示

插件地址:https://plugins.jenkins.io/localization-zh-cn/

作用:该插件为Jenkins 提供了简体中文语言包。

我们Jenkins中的各种配置项,有些是中文有些是英文,那就是这个插件包在生效。它对部分功能实现了翻译,部分功能没有翻译造成的。我们如果想使用纯英文版本可以关闭该插件。


Build Environment Plugin 显示构建过程中的变量

当前版本:1.7
插件地址:https://plugins.jenkins.io/build-environment

作用:这个插件显示了关于构建环境的信息,并提供了比较两个构建环境的选项。它可以将我们整个构建过程中的全局变量全部展示出来。相较于Environment Injector Plugin 插件,它能够显示更多的变量。

我们如果在使用Groovy脚本的时候,不知道有哪些全局属性。或者我们构造过程中用的很多插件,但是不知道那些插件有没有暴露一些全局参数。都可以用这个接口进行测试和清理。

同时它还能将参数数据进行一个记录。跟随每次构建的输出结果进行展示


Role-based Authorization Strategy

插件地址: https://plugins.jenkins.io/role-strategy

推荐理由:
Enables user authorization using a Role-Based strategy. Roles can be defined globally or for particular jobs or nodes selected by regular expressions.

使用基于角色的策略启用用户授权。可以全局定义角色,也可以为正则表达式选择的特定作业或节点定义角色。


Pipeline Stage View

插件地址:【https://plugins.jenkins.io/pipeline-stage-view/](https://plugins.jenkins.io/pipeline-stage-view/)

Pipeline 各阶段可视化插件。


ThinBackup 备份插件

插件官网: https://plugins.jenkins.io/thinBackup


vscode常用pipeline插件


GroovyLint

groovy语法检查工具

Jenkins Pipeline Linter Connector

pipeline语法检查工具


pipeline语法

5个必备的组成部分

关键字解释
pipeline定义一个流水线
agent指定执行器
stages阶段集
stage阶段
steps步骤

Parameters参数列表

Parameters 提供了一个用户在触发流水线时应该提供的参数列表,这些用户指定参数的值可以通过 params 对象提供给流水线的 step(步骤)。只能定义在 pipeline 顶层。

目前支持的参数类型如下:

  • string:字符串类型的参数。
  • text:文本型参数,一般用于定义多行文本内容的变量。
  • booleanParam:布尔型参数。
  • choice:选择型参数,一般用于给定几个可选的值,然后选择其中一个进行赋值。
  • password:密码型变量,一般用于定义敏感型变量,在 Jenkins 控制台会输出为*

插件 Parameters:

  • imageTag:镜像 tag,需要安装 Image Tag Parameter 插件后使用
  • gitParameter:获取 git 仓库分支,需要 Git Parameter 插件后使用

示例:

pipeline {
    agent any
    parameters {
        //执行构建时需要手动配置字符串类型参数,之后赋值给变量
        string(name: 'DEPLOY_ENV', defaultValue:  'staging', description: '1')
        //执行构建时需要提供文本参数,之后赋值给变量
        text(name:  'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '2')
        //布尔型参数
        booleanParam(name: 'DEBUG_BUILD',  defaultValue: true, description: '3')
        //选择形式列表参数
        choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '4')
        //密码类型参数,会进行加密
        password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A  secret password')
        //获取镜像名称与tag
        imageTag(name: 'DOCKER_IMAGE', description: '', image: 'kubernetes/kubectl', filter: '.*', defaultTag: '', registry: 'https://192.168.10.15', credentialId: 'harbor-account', tagOrder: 'NATURAL')
        //获取git仓库分支列表,必须有git引用
        gitParameter(branch: '', branchFilter: 'origin/(.*)', defaultValue: '', description: 'Branch for build and deploy', name: 'BRANCH', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE',  tagFilter: '*', type: 'PT_BRANCH')
    }
    stages {
        stage('env1') {
            steps {
                sh 'env'
            }
        }
        stage('git') {
            steps {
                //使用gitParameter,必须有这个
                git branch: "$BRANCH", credentialsId: 'gitlab-key', url: 'git@192.168.10.14:root/env.git'
            }
        }
    }
}

多行shell锁定工作目录

单行sh,cd到目录后,执行完这行shell会自动回到默认目录

用多行shell 解决,多行shell内,都在cd到的目录。

stage("执行构建") {
    steps {
    sh """
    cd  demo_dir
    mvn clean package
    """
    }
    echo "构建完成"
}

改变工作目录

pipeline的默认工作目录是${Workspace}, 可以通过dir()来改变这个步骤的工作目录

        // 拉取代码阶段
        stage('Checkout') {
            steps {
                dir("${CODE_DIR}") {
                    // 使用git插件从指定的仓库拉取代码,分支为params.BRANCH参数指定的值
                    git branch: params.BRANCH, url: 'https://github.com/your/repo.git'
                }
            }
        }

Options

参考:https://www.cnblogs.com/jingzh/p/16900430.html#12-%E5%A3%B0%E6%98%8E%E5%BC%8F%E6%B5%81%E6%B0%B4%E7%BA%BF%E7%AE%80%E4%BB%8B

Jenkins流水线支持很多内置指令,比如 retry 可以对失败的步骤进行重复执行 n 次,可以根据不同的指令实现不同的效果。

比较常用的指令如下:

参数解释
buildDiscarder保留多少个流水线的构建记录
disableConcurrentBuilds禁止流水线并行执行,防止并行流水线同时访问共享资源导致流水线失败。
disableResume如果控制器重启,禁止流水线自动恢复。
newContainerPerStageagent 为 docker 或 dockerfile 时,每个阶段将在同一个节点的新容器中运行,而不是所有的阶段都在同一个容器中运行。
quietPeriod流水线静默期,也就是触发流水线后等待一会在执行。
retry流水线失败后重试次数。
timeout设置流水线的超时时间,超过流水线时间,job 会自动终止。如果不加unit 参数默认为 1 分。
timestamps为控制台输出时间戳。
    options {
        //保留三个历史构建版本--效果如下图所示
        buildDiscarder(logRotator(numToKeepStr: '3'))
        //注意手动触发的构建不生效
        quietPeriod(10)
        //流水线失败后重试次数
        retry(3)
        //超时时间1小时,如果不加unit参数默认为1分
        timeout(time: 1, unit: 'HOURS')
        //所有输出每行都会打印时间戳
        timestamps()
    }

在这里插入图片描述


post后置条件

Post 一般用于流水线结束后的进一步处理,比如错误通知等。Post 可以针对流水线不同的结果做出不同的处理,就像开发程序的错误处理,比如 Python 语言的 try catch。

Post 可以定义在 Pipeline 或 stage 中,目前支持以下条件

参数解释
always无论 Pipeline 或 stage 的完成状态如何,都允许运行该 post 中定义的指令;
changed只有当前 Pipeline 或 stage 的完成状态与它之前的运行不同时,才允许在该 post 部分运行该步骤;
fixed当本次 Pipeline 或 stage 成功,且上一次构建是失败或不稳定时,允许运行该 post 中定义的指令;
regression当本次 Pipeline 或 stage 的状态为失败、不稳定或终止,且上一次构建的 状态为成功时,允许运行该 post 中定义的指令;
failure只有当前 Pipeline 或 stage 的完成状态为失败(failure),才允许在 post 部分运行该步骤,通常这时在 Web 界面中显示为红色
success当前状态为成功(success),执行 post 步骤,通常在 Web 界面中显示为蓝色 或绿色
unstable当前状态为不稳定(unstable),执行 post 步骤,通常由于测试失败或代码 违规等造成,在 Web 界面中显示为黄色
aborted当前状态为终止(aborted),执行该 post 步骤,通常由于流水线被手动终止触发,这时在 Web 界面中显示为灰色;
unsuccessful当前状态不是 success 时,执行该 post 步骤;
cleanup无论 pipeline 或 stage 的完成状态如何,都允许运行该 post 中定义的指令。和 always 的区别在于,cleanup 会在其它执行之后执行。

pipeline框架

/* groovylint-disable CompileStatic */
pipeline {
    // 指定构建代理,这里使用任意可用的节点
    /* groovylint-disable-next-line TrailingWhitespace */
    agent any
    // 定义了 Pipeline 的一些全局选项
    options {
        //超时时间1小时,如果不加unit参数默认为1分
        timeout(time: 1, unit: 'HOURS')
        //所有输出每行都会打印时间戳
        timestamps()
        //保留三个历史构建版本
        buildDiscarder(logRotator(numToKeepStr: '3'))
        //注意手动触发的构建不生效
        quietPeriod(10)
        //流水线失败后重试次数
        retry(3)
    }
    parameters {
        string(name: 'BRANCH', defaultValue: 'main', description: '分支名称') // 定义一个字符串类型的参数,用于指定要构建的分支,默认值为main
        booleanParam(name: 'BUILD_TYPE', defaultValue: false, description: '是否构建') // 定义一个布尔类型的参数,用于控制是否执行构建阶段,默认值为false
        /* groovylint-disable-next-line LineLength */
        choice(name: 'ENVIRONMENT', choices: ['dev', 'test', 'prod'], description: '部署环境') // 定义一个选择类型的参数,用于选择部署环境,选项包括dev、test、prod
    }

    environment {
        // 定义代码存放的目录
        CODE_DIR = '/tmp/code_local_dir'
    }

    stages {
        // 拉取代码阶段
        stage('Checkout') {
            steps {
                dir("${CODE_DIR}") {
                    // 使用git插件从指定的仓库拉取代码,分支为params.BRANCH参数指定的值
                    git branch: params.BRANCH, url: 'https://github.com/your/repo.git'
                }
            }
        }
        stage('Build') { // 定义一个名为Build的阶段
            when { // 设置阶段执行条件
                expression { params.BUILD_TYPE == 'true' } // 只有当BUILD_TYPE参数为true时才执行
            }
            steps {
            // 构建步骤,例如编译、打包等
            }
        }
        stage('Test') { // 定义一个名为Test的阶段
            steps {
            // 测试步骤,例如运行单元测试、集成测试等
            }
        }
        stage('Deploy') { // 定义一个名为Deploy的阶段
            when { // 设置阶段执行条件
                expression { params.ENVIRONMENT != '' } // 只有当ENVIRONMENT参数不为空时才执行
            }
            steps {
            // 部署步骤,例如部署到不同的环境
            }
        }
    }

    post { // 定义构建结束后执行的步骤
        always { // 无论构建成功、失败还是被中断,都会执行
        // 总是执行的步骤,例如清理工作、发送通知等
        }
        success { // 构建成功时执行
        // 成功时的步骤,例如发送成功通知
        }
        failure { // 构建失败时执行
        // 失败时的步骤,例如发送失败通知
        }
    }
}

pipeline模块


dockerfile模块

但是感觉很鸡肋。。。

agent {
    dockerfile {
        filename 'Dockerfile.build'  //dockerfile文件名称
        dir 'build'                  //执行构建镜像的工作目录
        label 'role-master'          //执行的node节点,标签选择
        additionalBuildArgs '--build-arg version=1.0.2' //构建参数
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值