pipeline开发笔记
- jenkins常用插件
- Build Authorization Token Root
- 配置GitLab的webhooks(钩子)
- 配置构建触发器--示例
- piblish over ssh
- Blue Ocean
- Workspace Cleanup Plugin
- Git插件
- Pipeline
- Localization: Chinese (Simplified) --中文显示
- Build Environment Plugin 显示构建过程中的变量
- Role-based Authorization Strategy
- Pipeline Stage View
- ThinBackup 备份插件
- vscode常用pipeline插件
- GroovyLint
- Jenkins Pipeline Linter Connector
- pipeline语法
- 多行shell锁定工作目录
- 改变工作目录
- Options
- post后置条件
- pipeline框架
- pipeline模块
- dockerfile模块
jenkins常用插件
Build Authorization Token Root
参考链接:https://blog.csdn.net/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 | 步骤 |
多行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 | 如果控制器重启,禁止流水线自动恢复。 |
newContainerPerStage | agent 为 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' //构建参数
}
}