“Jenkins shared library 共享库示例”的版本间的差异
(→进阶) |
|||
(未显示同一用户的19个中间版本) | |||
第1行: | 第1行: | ||
+ | =进阶= | ||
+ | [[Jenkins进行持续集成#进阶]] | ||
+ | |||
+ | intra_pipe的 有空要提取一下 | ||
+ | |||
+ | =2024= | ||
+ | https://github.com/evan886/mypipeline | ||
+ | |||
+ | =自己在用的例子有空再放出来= | ||
+ | |||
+ | ==Pre-requisites== | ||
+ | |||
+ | [https://blog.csdn.net/nklinsirui/article/details/88539576 Jenkins设置SSH免登录访问远程服务器] | ||
+ | |||
+ | [https://blog.csdn.net/qq_34556414/article/details/109355381 Jenkins 配置SSH免密钥] | ||
+ | |||
=共享库是什么?= | =共享库是什么?= | ||
+ | |||
+ | pre : | ||
+ | node为根节点的是脚本式语法 ,pipeline为根节点的为声明式语法,这个是推荐的 | ||
共享库(shared library)是一些独立的 Groovy 脚本的集合,我们可以在运行 Pipeline 的时候去获取这些共享库代码。使用共享库最好的方式同样是把代码使用 Git 仓库进行托管,这样我们就可以进行版本化管理了。当然我们也需要一些 Groovy 语言的基础,不过并不需要多深入,基本的语法概念掌握即可,可以查看前面我们的 Groovy 简明教程 。 | 共享库(shared library)是一些独立的 Groovy 脚本的集合,我们可以在运行 Pipeline 的时候去获取这些共享库代码。使用共享库最好的方式同样是把代码使用 Git 仓库进行托管,这样我们就可以进行版本化管理了。当然我们也需要一些 Groovy 语言的基础,不过并不需要多深入,基本的语法概念掌握即可,可以查看前面我们的 Groovy 简明教程 。 | ||
第8行: | 第27行: | ||
然后在 Jenkins 中配置将共享库添加到 Jenkins 中来 | 然后在 Jenkins 中配置将共享库添加到 Jenkins 中来 | ||
最后,在我们的流水线中导入需要使用的共享库:@Library('your-shared-library'),这样就可以使用共享库中的代码了。 | 最后,在我们的流水线中导入需要使用的共享库:@Library('your-shared-library'),这样就可以使用共享库中的代码了。 | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | 目录结构 | ||
+ | |||
+ | 共享库的目录结构如下: | ||
+ | |||
+ | (root) | ||
+ | +- src # Groovy source files | ||
+ | | +- org | ||
+ | | +- foo | ||
+ | | +- Bar.groovy # for org.foo.Bar class | ||
+ | +- vars | ||
+ | | +- foo.groovy # for global 'foo' variable | ||
+ | | +- foo.txt # help for 'foo' variable | ||
+ | +- resources # resource files (external libraries only) | ||
+ | | +- org | ||
+ | | +- foo | ||
+ | | +- bar.json # static helper data for org.foo.Bar | ||
+ | |||
+ | |||
+ | |||
+ | src 目录应该看起来像标准的 Java 源目录结构。当执行流水线时,该目录被添加到类路径下。 | ||
+ | vars 目录定义可从流水线访问的全局变量的脚本。 每个 *.groovy 文件的基名应该是一个 Groovy (~ Java) 标识符, 通常是 camelCased。 匹配 *.txt, 如果存在, 可以包含文档, 通过系统的配置标记格式化从处理 (所以可能是 HTML, Markdown 等,虽然 txt 扩展是必需的)。 | ||
+ | resources 目录允许从外部库中使用 libraryResource 步骤来加载有关的非 Groovy 文件。 目前,内部库不支持该特性。 | ||
+ | |||
+ | 注意:初次使用src、resources目录可以为空,我们可以在vars中定义脚本,使用call方法实现功能 | ||
+ | |||
+ | </pre> | ||
+ | |||
=Jenkins Pipeline 流水线语法= | =Jenkins Pipeline 流水线语法= | ||
[https://juejin.cn/post/6844904018624380936 Jenkins Pipeline 流水线语法] | [https://juejin.cn/post/6844904018624380936 Jenkins Pipeline 流水线语法] | ||
第13行: | 第62行: | ||
[[Groovy]] | [[Groovy]] | ||
− | =e.g. for example= | + | =e.g. for example 注意 代码学习从这开始 上面看一下就行= |
新建一个名为 pipeline-library-demo 的文件夹,将该项目加入到 Git 仓库中。首先创建一个名为 vars 的目录,自定义一个 step 就是在 vars 目录下面的一个 .groovy 文件,这些被称为全局变量,比如我们添加一个 sayHi.groovy 的文件,代码如下所示: | 新建一个名为 pipeline-library-demo 的文件夹,将该项目加入到 Git 仓库中。首先创建一个名为 vars 的目录,自定义一个 step 就是在 vars 目录下面的一个 .groovy 文件,这些被称为全局变量,比如我们添加一个 sayHi.groovy 的文件,代码如下所示: | ||
第44行: | 第93行: | ||
├── src | ├── src | ||
│ └── com | │ └── com | ||
− | │ └── | + | │ └── evan |
│ └── GlobalVars.groovy | │ └── GlobalVars.groovy | ||
└── vars | └── vars | ||
第124行: | 第173行: | ||
Finished: SUCCESS | Finished: SUCCESS | ||
</pre> | </pre> | ||
+ | |||
+ | =trouble = | ||
+ | ERROR: Library devops expected to contain at least one of src or vars directories | ||
+ | |||
+ | 至少一一个 src or vars 里面还要有groovy 文件 ,不然就报错 | ||
+ | |||
+ | https://www.cnblogs.com/afei654138148/p/15006155.html | ||
=see also= | =see also= | ||
+ | [https://gitbook.curiouser.top/origin/jenkins-SharedLibraries.html gitbook.curiouser.top Jenkins Pipeline共享库Shared Libraries] | ||
+ | |||
+ | [https://www.jenkins.io/zh/doc/book/pipeline/shared-libraries/ jenkins 扩展共享库] | ||
+ | |||
[https://www.qikqiak.com/post/jenkins-shared-library-demo/ Jenkins 共享库示例] | [https://www.qikqiak.com/post/jenkins-shared-library-demo/ Jenkins 共享库示例] | ||
+ | [https://blog.csdn.net/weixin_42832946/article/details/107672493 Jenkins Shared Library(解决多个项目使用同一jenkinsfile问题)] | ||
[https://gitee.com/jackkangkang/test springboot 测试的源码项目] | [https://gitee.com/jackkangkang/test springboot 测试的源码项目] | ||
− | [[category:ops]] [[category:devops]] | + | |
+ | [https://blog.csdn.net/yanggd1987/article/details/106248612/?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242 Jenkins流水线即代码之扩展共享库初体验] | ||
+ | [[category:ops]] [[category:devops]] [[category:devops]] [[category:jenkins]] |
2024年10月7日 (一) 03:04的最新版本
目录
进阶
intra_pipe的 有空要提取一下
2024
https://github.com/evan886/mypipeline
自己在用的例子有空再放出来
Pre-requisites
共享库是什么?
pre :
node为根节点的是脚本式语法 ,pipeline为根节点的为声明式语法,这个是推荐的
共享库(shared library)是一些独立的 Groovy 脚本的集合,我们可以在运行 Pipeline 的时候去获取这些共享库代码。使用共享库最好的方式同样是把代码使用 Git 仓库进行托管,这样我们就可以进行版本化管理了。当然我们也需要一些 Groovy 语言的基础,不过并不需要多深入,基本的语法概念掌握即可,可以查看前面我们的 Groovy 简明教程 。
使用共享库一般只需要3个步骤即可:
首先创建 Groovy 脚本,添加到 Git 仓库中 然后在 Jenkins 中配置将共享库添加到 Jenkins 中来 最后,在我们的流水线中导入需要使用的共享库:@Library('your-shared-library'),这样就可以使用共享库中的代码了。
目录结构 共享库的目录结构如下: (root) +- src # Groovy source files | +- org | +- foo | +- Bar.groovy # for org.foo.Bar class +- vars | +- foo.groovy # for global 'foo' variable | +- foo.txt # help for 'foo' variable +- resources # resource files (external libraries only) | +- org | +- foo | +- bar.json # static helper data for org.foo.Bar src 目录应该看起来像标准的 Java 源目录结构。当执行流水线时,该目录被添加到类路径下。 vars 目录定义可从流水线访问的全局变量的脚本。 每个 *.groovy 文件的基名应该是一个 Groovy (~ Java) 标识符, 通常是 camelCased。 匹配 *.txt, 如果存在, 可以包含文档, 通过系统的配置标记格式化从处理 (所以可能是 HTML, Markdown 等,虽然 txt 扩展是必需的)。 resources 目录允许从外部库中使用 libraryResource 步骤来加载有关的非 Groovy 文件。 目前,内部库不支持该特性。 注意:初次使用src、resources目录可以为空,我们可以在vars中定义脚本,使用call方法实现功能
Jenkins Pipeline 流水线语法
e.g. for example 注意 代码学习从这开始 上面看一下就行
新建一个名为 pipeline-library-demo 的文件夹,将该项目加入到 Git 仓库中。首先创建一个名为 vars 的目录,自定义一个 step 就是在 vars 目录下面的一个 .groovy 文件,这些被称为全局变量,比如我们添加一个 sayHi.groovy 的文件,代码如下所示:
#!/usr/bin/env groovy def call(String name='evan') { echo "Hello, ${name}." }
需要注意的是需要实现 call 方法,添加了一个名为 name 的参数,具有默认值 evan,可以用 ${name} 来进行访问。
然后创建一个名为 src/com/evan/GlobalVars.groovy 的文件,文件内容如下所示:
#!/usr/bin/env groovy package com.evan class GlobalVars { static String foo = "bar" // 在 Pipeline 中可以引用这里的静态变量: // // import com.evan.GlobalVars // println GlobalVars.foo } evan@myxps:~/data/devops/jenkins/pipeline-library-demo$ tree . . ├── src │ └── com │ └── evan │ └── GlobalVars.groovy └── vars └── sayHi.groovy 4 directories, 2 files
完整的代码上传到了 GitHub 仓库 or 自己的gitlab http://mygitlab.com/root/pipeline-library-demo 中。
共享库创建完成后,我们需要让 Jenkins 知道这个共享库,我们可以从 Jenkins 的 Web 页面进行添加。在 Jenkins 首页 -> 系统管理 -> 系统配置,在 Global Pipeline Libraries 区域配置共享库:
Name pipeline-library-demo Default version main Allow default version to be overridden and Include @Library changes in job recent changes 打勾 Retrieval method->Modern SCM -> Git Project Repository http://mygitlab.com/root/pipeline-library-demo.git ; Credentials 你在gitlab的用户和密码
保存后即可使用配置共享库。接下来新建一个名为 share-lib-demo 的流水线项目,在 Pipeline script 区域添加如下代码
My-pipeline-job01/configure ->Pipeline -> Defination Pipeline script
@Library('pipeline-library-demo')_ import com.evan.GlobalVars stage('Demo') { echo 'Hello world' sayHi '子华' println GlobalVars.foo }
需要注意的是 @Library('pipeline-library-demo')_ 最后有一个下划线 _,这个下划线并不是写错了,如果 @Libray 后面紧接的一行不是 import 语句的话,就需要这个下划线,我们这里后面就是一条 import 语句,所以这里可以省略这个下划线。
执行结果
Console Output Started by user admin Running in Durability level: MAX_SURVIVABILITY Loading library pipeline-library-demo@main Attempting to resolve main from remote references... > git --version # timeout=10 > git --version # 'git version 2.30.2' using GIT_ASKPASS to set credentials newroot > git ls-remote -h -- http://mygitlab.com/root/pipeline-library-demo.git # timeout=10 Found match: refs/heads/main revision 3938b86d02ebad41a19c254b8b2f1c70b4ede838 The recommended git tool is: NONE using credential 54098e5a-68d7-495f-8b09-2e39b2188b3d > git rev-parse --resolve-git-dir /var/lib/jenkins/workspace/My-pipeline-job01@libs/pipeline-library-demo/.git # timeout=10 Fetching changes from the remote Git repository > git config remote.origin.url http://mygitlab.com/root/pipeline-library-demo.git # timeout=10 Fetching without tags Fetching upstream changes from http://mygitlab.com/root/pipeline-library-demo.git > git --version # timeout=10 > git --version # 'git version 2.30.2' using GIT_ASKPASS to set credentials newroot > git fetch --no-tags --force --progress -- http://mygitlab.com/root/pipeline-library-demo.git +refs/heads/*:refs/remotes/origin/* # timeout=10 Checking out Revision 3938b86d02ebad41a19c254b8b2f1c70b4ede838 (main) > git config core.sparsecheckout # timeout=10 > git checkout -f 3938b86d02ebad41a19c254b8b2f1c70b4ede838 # timeout=10 Commit message: "globalvar" > git rev-list --no-walk 3938b86d02ebad41a19c254b8b2f1c70b4ede838 # timeout=10 [Pipeline] Start of Pipeline [Pipeline] stage [Pipeline] { (Deo) [Pipeline] echo Hey world [Pipeline] echo Hello, 子华. [Pipeline] echo bar [Pipeline] } [Pipeline] // stage [Pipeline] End of Pipeline Finished: SUCCESS
trouble
ERROR: Library devops expected to contain at least one of src or vars directories
至少一一个 src or vars 里面还要有groovy 文件 ,不然就报错
https://www.cnblogs.com/afei654138148/p/15006155.html
see also
gitbook.curiouser.top Jenkins Pipeline共享库Shared Libraries