<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Jenkins_shared_library_%E5%85%B1%E4%BA%AB%E5%BA%93%E7%A4%BA%E4%BE%8B</id>
	<title>Jenkins shared library 共享库示例 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Jenkins_shared_library_%E5%85%B1%E4%BA%AB%E5%BA%93%E7%A4%BA%E4%BE%8B"/>
	<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Jenkins_shared_library_%E5%85%B1%E4%BA%AB%E5%BA%93%E7%A4%BA%E4%BE%8B&amp;action=history"/>
	<updated>2026-04-17T10:23:34Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.linuxsa.org/index.php?title=Jenkins_shared_library_%E5%85%B1%E4%BA%AB%E5%BA%93%E7%A4%BA%E4%BE%8B&amp;diff=506&amp;oldid=prev</id>
		<title>Evan：​/* 2024 */</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Jenkins_shared_library_%E5%85%B1%E4%BA%AB%E5%BA%93%E7%A4%BA%E4%BE%8B&amp;diff=506&amp;oldid=prev"/>
		<updated>2024-12-23T14:54:10Z</updated>

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