欢迎访问我的博客,你的支持,是我最大的动力!

Jenkins2权威指南4-流水线转换

Linux 小马奔腾 65℃ 评论
目录:
[显示]

Blue Ocean

管理已有流水线

在变更视图,点击提交码可以跳转到对应的源码控制系统

测试 junit '**/build/reports/**/*.xml'
制品 archive 'build/libs/**/*.jar'

流水线转换

插件兼容性
https://jenkins.io/doc/pipeline/steps/
Plugin Compatibility with Pipeline https://github.com/jenkinsci/pipeline-plugin/blob/master/COMPATIBILITY.md

构建流水线 Build Pipeline plugin (公司现用)

自由风格流水线 -> 脚本式流水线

代码片段生成器

gradle
clean 清除构建输出
compileJava 编译java源码
test 运行测试用例
artifactoryPublish 归档构建物
-x 关闭某功能 如 gradle clean compileJava -x test

tool步骤会返回相应工具的HOME路径,如 tool 'gradle43' 返回 /usr/share/gradle

def gradHome=tool 'gradle32'
sh "${gradHome}/bin/gradle clean compileJava -x test"

单元测试
使用传统DSL步骤,用map作为参数,键标识不同分支时的标签,值包含可执行的实际代码块

跨节点分发内容

stash和unstash步骤,可以将资源在不同节点间使用
stash name:"<name>" [includes:"<pattern>" excludes:"<pattern>"]
unstash "<name>"

清理工作空间

Workspace Cleanup 插件,提供 cleanWs 步骤来清理工作空间
旧语法: step([$class:'WsCleanup'])
推荐语法:cleanWs()

集成测试(凭证的使用)

提供凭证的方式:
- 硬编码用户名和密码
- 设置环境变量
- 通过参数提供
- 从外部文件读取
- 使用插件注入 如,Credentials Binding 插件 (Web界面上会有一个Bindings步骤)

在流水线中使用 withCredentials 步骤

withEnv withDockerContainer

源码分析
SonarQube,要与jenkins集成,需要设置SonarQube服务器,在jenkins中安装SonarQube插件,并安装和配置一个名为 scanner 或 runner 的独立程序
可以在SonarQube中定义一个webhook,在分析完成后通知jenkins,同时让jenkins知道代码是否通过质量检查

制品仓库

解析程序库和分发仓库,如 maven/lvy/gradle

使用封装在远程git仓库中的shell步骤

Pipeline Remote Loader 插件,从远程位置加载脚本,提供 fromGit方法加载存储在Git仓库中的内容
如加载函数,然后在流水线中对它调用

也可以使用共享库实现相同的功能

流水线中使用容器

自由风格类型项目中与docker集成有两种方式:
- Docker Cloud 插件用作代理
- shell命令直接调用

流水线中与docker集成有四种方式:
- 配置为云,运行docker插件提供的独立jenkis代理
- 通过声明式流水线提供的结构运行一个代理
- 使用docker全局变量(由docker pipeline插件提供)
- shell命令直接调用

jenkins流水线 -> Jenkinsfile

Pipeline Linter工具可通过命令行调用来验证以声明式语法编写的Jenkinsfile,找到语法问题
它是jenkins内置命令,可通过ssh/cli/http post api 调用,也可作为流水线步骤运行

- 通过ssh运行
使能jenkins的ssh访问
ssh [-l <username>] -p <ssh port> <hostname or ip> declarative-linter < Jenkinsfile

- 通过CLI运行(不推荐)
启用CLI Remoting模式,并可以访问 jenkins-cli.jar文件
java -jar [<path to jar>/]jenkins-cli.jar -s <hostname or ip>:<port> -auth <username>:<password or token> declarative-linter < Jenkinsfile

- REST API方式
若启用了CSRF保护,需要先获取crumb值
curl --user <username>:<password> -XPOST -H <crumb> -F "jenkinsfile = <Jenkinsfile" <jenkins url>/pipeline-model-conerter/validate

- 作为流水线步骤运行
node{
def valid = validateDeclarativePipeline("<path to file>")
echo "result = ${valid}"
}

转换的方法:
- Jenkinsfile首行 #!groovy
- 将git步骤替换为 checkout scm
注意,checkout scm在回放时的表现,它会拉取指定任务原始关联的代码版本,类似似于 git checkout <hash>
- 处理自定义参数 使用代码片段生成器
- 将Jenkinsfile文件推送到代码仓库 然后通过多分支流水线项目添加新项目
或者在原生Jenkins项目中包含一个Jenkinsfile

可以通过"回放"功能从Jenkinsfile中复制和粘贴代码,然后在新的流水线中测试

脚本式流水线 -> 声明式流水线

转换:
- 引入pipeline结构
- 替换node定义,使用agent
- 添加库指令 libraries
- 处理阶段 stages stage steps

通用指南
使用echo占位符,先搭建框架,并跑通所有步骤
为流水线无限期暂停的参数添加超时机制

 

转载请注明:轻风博客 » Jenkins2权威指南4-流水线转换

喜欢 (0)or分享 (0)