“Jenkins shared library 共享库示例”的版本间的差异

来自linux中国网wiki
跳到导航 跳到搜索
第128行: 第128行:
 
[https://www.qikqiak.com/post/jenkins-shared-library-demo/ Jenkins 共享库示例]
 
[https://www.qikqiak.com/post/jenkins-shared-library-demo/ Jenkins 共享库示例]
  
 +
 +
[https://gitee.com/jackkangkang/test springboot 测试的源码项目]
 
[[category:ops]] [[category:devops]]
 
[[category:ops]] [[category:devops]]

2021年6月28日 (一) 07:30的版本

共享库是什么?

共享库(shared library)是一些独立的 Groovy 脚本的集合,我们可以在运行 Pipeline 的时候去获取这些共享库代码。使用共享库最好的方式同样是把代码使用 Git 仓库进行托管,这样我们就可以进行版本化管理了。当然我们也需要一些 Groovy 语言的基础,不过并不需要多深入,基本的语法概念掌握即可,可以查看前面我们的 Groovy 简明教程 。

使用共享库一般只需要3个步骤即可:

   首先创建 Groovy 脚本,添加到 Git 仓库中
   然后在 Jenkins 中配置将共享库添加到 Jenkins 中来
   最后,在我们的流水线中导入需要使用的共享库:@Library('your-shared-library'),这样就可以使用共享库中的代码了。

Jenkins Pipeline 流水线语法

Jenkins Pipeline 流水线语法

Groovy

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
│       └── qikqiak
│           └── 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

see also

Jenkins 共享库示例


springboot 测试的源码项目