栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Jenkins Pipelin扩展

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jenkins Pipelin扩展

目录

[TOC]

1、groovy语法

1.Groovy简介

和python有很多相似的地方;

dsl:领域特定语言;

学习下 groovy:数据处理和逻辑判断,条件,函数后,你的jenkinsfile会更加灵活。

 groovy官网

https://groovy.apache.org/

groovy语法参考:http://groovy-lang.org/syntax.html

2. 实战:《groovy配置开发环境》-泽阳-2022.4.23(测试成功)

 实际测试过程

  • 实验环境

    jdk版本:openjdk version "1.8.0_322"
    centos7.6虚机
  • 实验软件

    链接:https://pan.baidu.com/s/1GKaCvXyU0WF2rTrWffx37A?pwd=7r9p 提取码:7r9p

    2022.4.23-share-JenkinsPipelineAsCode实验代码

  • 前置条件

    jdk环境已安装;
  • 1️⃣ 下载groovy安装包

https://groovy.apache.org/

  • 2️⃣ 设置环境变量并配置

将安装包上传到服务器上

(1)上传
[root@devops ~]#ll -h apache-groovy-sdk-4.0.1.zip 
-rw-r--r-- 1 root root 57M Apr 21 08:57 apache-groovy-sdk-4.0.1.zip

(2)解压
[root@devops ~]#unzip apache-groovy-sdk-4.0.1.zip -d /usr/local/
[root@devops ~]#cd /usr/local/groovy-4.0.1/
[root@devops groovy-4.0.1]#ls
bin  conf  doc  grooid  lib  LICENSE  licenses  NOTICE  src
[root@devops groovy-4.0.1]#cd bin/
[root@devops bin]#ls
grape             groovy.bat          groovy_completion         groovydoc             groovysh             java2groovy.bat
grape.bat         groovyc             groovyConsole             groovydoc.bat         groovysh.bat         startGroovy
grape_completion  groovyc.bat         groovyConsole.bat         groovydoc_completion  groovysh_completion  startGroovy.bat
groovy            groovyc_completion  groovyConsole_completion  groovy.ico            java2groovy
[root@devops bin]#

(3)设置环境变量
[root@devops ~]#vim /etc/profile
……
export GROOVY_HOME=/usr/local/groovy-4.0.1
export PATH=$JAVA_HOME/bin:$GROOVY_HOME/bin:$PATH
[root@devops groovy-4.0.1]#source /etc/profile
  • 3️⃣ 验证
[root@devops ~]#groovysh
Apr 21, 2022 11:25:39 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
Groovy Shell (4.0.1, JVM: 1.8.0_322)
Type ':help' or ':h' for help.
groovy:000> println("hello world")
hello world
===> null
groovy:000> 

 注意:另一种方法,也是可以在jenkins的web终端里进行测试goorvy代码

1.可以在回放里进行测试(回放里写的代码都是groovy代码)

2.在系统管理-脚本命令行里打开写代码即可

或者直接在后面加个script即可打开:

http://172.29.9.101:8080/script

 自己本次如何测试groovy代码呢?

在本地winodws笔记本的vscode里编写代码,然后通过sftp插件会实时同步到linux服务器上,然后linux服务器上安装groovy环境,命令测试即可!

 groovy vscode插件

但是:这里的波浪线颜色代表什么意思呢?

3.注释

4.String字符串

1、字符串的定义与引用

groovy不是强类型的。

关于单引号和双引号的区别:

有变量的话,就必须要使用双引号; 没变量的话,任选其中一个方式就好;

 示例

String name = 'jenkins'
name = 'xyy'

fulllName = "i love you ${name}"
println(fulllName)

text = """
a=1,
b=2
c=3
${name}
"""

println(text)

后面在做流水线的时候,更多的做的事字符串的数据处理。

2、字符串分割操作

 示例

// 字符串分割操作
// 业务名称-应用名称-类型_环境
jobName = "devops-t1-service_DEV"
buName = jobName.split("-")[0] //list ["devops", "t1", "service_DEV"]
println(jobName.split("-")[0])
println(jobName.split("-")[-1])

3、是否包含Release字符串

 示例

// // 分支名称
branchName = "release-1.1.1"
containsRelease = branchName.contains("release")
println(containsRelease)

4、字符串的长度

 示例

// // 字符串长度测试
branchName = "release-1.1.1"
strs = branchName.split("-")
println(strs.size())
println(strs[0].length())

// 注意:列表是没有length()方法的!

5、使用变量作为值

 示例

// 使用变量作为值
name = "xyy"
def message = "hello ${name}"
println(message)
println(message.toString())

6、获取字符串元素索引值:indexOf

 示例

// 获取字符串元素索引值:indexOf
str = "release-1.1.2"
println(str.indexOf("-"))

7、判断字符串以DEV结尾:endsWith

 示例

// 判断字符串以DEV结尾:endsWith
jobName = "app-service-dev"
println(jobName.endsWith("dev"))

8、字符串增添操作

 示例

// 字符串增添操作
log = "error:xxxxx aa"
println(log.minus("a"))
println(log - "a")
println(log.plus("aa"))
println(log + "aa")

9、字符串反转

 示例

// 字符串反转
nums = "1234567"
println(nums.reverse())

5.list 列表

1、列表的定义

 示例:列表的定义与引用

// 列表的定义与引用
mystatus = ["hg", "xyy", "happy"]
mystatus = mystatus + "sad"
println(mystatus)
mystatus = mystatus - "happy"
println(mystatus)
println(mystatus << "k8s")

2、判断列表是否为空

 示例

//判断列表是否为空
mystatus = ["hg", "xyy", "happy"]
println(mystatus.isEmpty())

3、列表去重

 示例

// 列表去重
myList = ["hg", "xyy", "happy", "hg"]
println(myList.unique())

4、列表反转

 示例

// 列表反转
myList = ["hg", "xyy", "happy", "hg"]
println(myList.reverse())

5、列表排序

 示例

// 列表排序
myList = ["hg", "xyy", "happy", "hg"]
println(myList.sort())

6、判断列表是否包含元素

 示例

// 判断列表是否包含元素
myList = ["hg", "xyy", "happy", "hg"]
println(myList.contains("xyy"))

7、列表的长度

 示例

// 列表的长度
myList = ["hg", "xyy", "happy", "sad"]
println(myList.size())

8、扩展列表定义方式

 示例

// 扩展列表定义方式
listName = ["hg", "xyy", "happy"]
newListName = [1, 2, 3, 4] as int[]
println(listName)
println(newListName)

9、通过索引获取列表元素

 示例

// 通过索引获取列表元素
listName = ["hg", "xyy", "happy"]
println(listName[1])

10、计算列表中元素出现的次数

 示例

// 计算列表中元素出现的次数
listName = ["hg", "xyy", "happy", "sad", "sad"]
println(listName.count("sad"))

6.map映射

1、定义map

 示例

// 定义map
mytools = [
"mvn": "/usr/local/maven",
"gradle": "/usr/local/gradle"
]
println(mytools)

2、根据key获取value

 示例1

// 根据key获取value
mytools = [
"mvn": "/usr/local/maven",
"gradle": "/usr/local/gradle"
]
println(mytools["mvn"])
println(mytools["gradle"])

 示例1:get()方法

3、根据key重新赋值

 示例

// 根据key重新赋值
mytools = [
"mvn": "/usr/local/maven",
"gradle": "/usr/local/gradle"
]
mytools["mvn"] = "/opt/local/maven"
println(mytools)
mytools["gradle"] = "/opt/local/gradle"
println(mytools)

4、判断map是否包含某个key或者value

 示例

// 判断map是否包含某个key或者value
mytools = [
"mvn": "/usr/local/maven",
"gradle": "/usr/local/gradle"
]
println(mytools.containsKey("gradle"))
println(mytools.containsValue("/usr/local/gradle"))

5、返回map的key列表

 示例

// 返回map的key列表
mytools = [
"mvn": "/usr/local/maven",
"gradle": "/usr/local/gradle"
]
println(mytools.keySet())

6、根据key删除元素

 示例

// 根据key删除元素
mytools = [
"mvn": "/usr/local/maven",
"gradle": "/usr/local/gradle"
]
println(mytools.remove("mvn"))
println(mytools)

7.条件语句

1、if语句

 示例


branchName = "dev"
if (branchName == "dev"){
    println("dev……")
} else if (branchName == "test"){
    println("test……")
} else {
    println("skipdeploy……")
}

2、switch语句

 示例


branchName = "release"
switch(branchName) {
    case "develop":
        println("develop……")
        break
    case "release":
        println("releae……")
        break
    default: 
        println("error……")
}

8.for循环

1、遍历list

 方法1:

tools = ["jenkins", "gitlab", "maven", "sonarqube"]

for (tool in tools){
    println(tool)
}

 方法2:

tools = ["jenkins", "gitlab", "maven", "sonarqube"]
tools.size().times{ i ->
    println(i)
}
tools.size().times{ i ->
    println(tools[i])
}

2、循环几次

5.times{
    print("love")
}
5.times{
    println("love")
}

3、遍历0-9,打印

for (i=1; i<10; i++){
    println(i)
}

9.while循环

 代码测试

// while循环
name = "jenkins"
while (name == "jenkins"){
    println("true……")
    name = "lisi"
}

10.异常处理

 示例


try {
    println(a, b)
}
catch(Exception e){
    println(e)
}
finally{
    println("done")
}

 流水线示例

编写代码:

pipeline {
    agent { label "build" }
    stages{
        stage("try"){
            steps{
                script{
                    try {
                        sh "hello world"
                    }
                    catch(Exception e){
                        println(e)
                    }
                    finally{
                        println("catch error……")
                    }
                }
            }
        }
    }
}

构建:

 示例:agent的另一种写法

编写代码:

pipeline {
    agent {
        node {
            label "build"
            customWorkspace "/opt/love"
        }
    }
    stages{
        stage("demo"){
            steps{
                script{
                    try {
                        sh "hello world"
                    }
                    catch(Exception e){
                        println(e)
                    }
                    finally{
                        println("catch error……")
                    }
                }
            }
        }
    }
}

构建:

 示例:currentBuild.description全局变量使用

编写代码:

pipeline {
    agent {
        node {
            label "build"
            customWorkspace "/opt/love"
        }
    }
    stages{
        stage("demo"){
            steps{
                script{
                    try {
                        sh "mvn cleaner"
                    }
                    catch(Exception e){
                        println(e)
                        currentBuild.description = "mvn error"
                    }
                    finally{
                        println("catch error……")
                    }
                }
            }
        }
    }
}

验证:

11.函数

 示例

编写代码:

pipeline {
    agent {
        label "build"
    }
    stages {
        stage("demo") {
            steps {
                script {
                  PrintMsg("Jenkins")  
                }
            }
        }
    }
}

def PrintMsg(value){
    println(value)
}

构建:

2、Jenkins 共享库

1.什么是共享库

学习jenkins的核心,也就是想学习下jenkins共享库;

2.共享库目录结构

src:存放功能函数

vars:存放流水线模板

resorces:存放一些配置文件

3. 实战:《Jenkins共享库实践》-泽阳-2022.4.22

实验环境
Jenkins 2.332.2(已安装好jenkins环境)
win10笔记本

实验软件

链接:https://pan.baidu.com/s/1GKaCvXyU0WF2rTrWffx37A?pwd=7r9p 提取码:7r9p

2022.4.23-share-JenkinsPipelineAsCode实验代码

老师文档

1.创建共享库

登录自己github账号,创建一个公有仓库:devops04-library

2.添加Groovy类文件

:warning: 注意:老师当时测试是直接在github上创建相应目录及文件:Devops04-library/src/org/devops/utils.groovy,然后直接提交的。

因本人这里win10笔记本已经有了git环境,因此这里在本地将刚才创建的仓库clone到本地,然后创建相应目录及文件,过程如下

(1)克隆仓库到本地
hg@LAPTOP-G8TUFE0T MINGW64 ~/Desktop
$ git clone git@github.com:OnlyOnexl/devops04-library.git
Cloning into 'devops04-library'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
Receiving objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0

hg@LAPTOP-G8TUFE0T MINGW64 ~/Desktop
$ cd devops04-library/

(2)创建相应目录及文件
hg@LAPTOP-G8TUFE0T MINGW64 ~/Desktop/devops04-library (main)
$ mkdir -p src/org/devops

hg@LAPTOP-G8TUFE0T MINGW64 ~/Desktop/devops04-library (main)
$ vim src/org/devops/utils.groovy
package org.devops

def PrintMsg(value){
    println(value)
}

(3)提交
hg@LAPTOP-G8TUFE0T MINGW64 ~/Desktop/devops04-library (main)
$ git add -A
warning: LF will be replaced by CRLF in src/org/devops/utils.groovy.
The file will have its original line endings in your working directory.

hg@LAPTOP-G8TUFE0T MINGW64 ~/Desktop/devops04-library (main)
$ git commit -m"create src/org/devops/utils.groovy"
[main f594076] create src/org/devops/utils.groovy
 1 file changed, 5 insertions(+)
 create mode 100644 src/org/devops/utils.groovy

hg@LAPTOP-G8TUFE0T MINGW64 ~/Desktop/devops04-library (main)
$ git push
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 466 bytes | 93.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To github.com:OnlyOnexl/devops04-library.git
   eb6b8b8..f594076  main -> main

此时,我们再到github仓库界面看下现象:

可以看到文件被正常推送上来了。

3.使用共享库

点击系统配置:

往下拉,找到Global Pipeline Libararies,点击新增,添加仓库信息:

:warning: 注意:

  • 这里的Name不一定和刚才创建的仓库名称一样,只是一个别名而已;
  • 这里的Default version填的是仓库的分支名称;

填写完成后,点击保存。

共享库是可以配置多个的!

接下来,我们编写下jenkinsfile文件:

编写jenkinsfile代码:

函数是可以写在pipeline里面,也是可以写在外面的;

_ 加载到当前jenkinsfile里所有的;

@Library("mylib") _

def myutil = new org.devops.utils()

pipeline {
    agent { label "build"}
    stages {
        stage("build") {
            steps {
                script {
                    myutil.PrintMsg("jenkins")
                }
            }

        }
    }
}

构建:

 gitee测试效果

编写jenkinsfile代码:

@Library("mylib") _

def myutil = new org.devops.utils()

pipeline {
    agent { label "build"}
    stages {
        stage("build") {
            steps {
                script {
                    myutil.PrintMsg("jenkins")
                }
            }

        }
    }
}

构建结果:

注意

关于我

我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!

各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:

  1. 个人微信二维码:x2675263825 (舍得), qq:2675263825。

  2. 个人微信公众号:云原生架构师实战

  3. 个人博客地址:www.onlyonexl.cn

  4. 个人csdn

    https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

  5. 个人已开源干货

    不服来怼:宇宙中最好用的云笔记 & 其他开源干货:https://www.yuque.com/go/doc/73723298?#

最后

好了,关于Jenkins Pipelin扩展就到这里了,感谢大家阅读,最后贴上我女神的photo,祝大家生活快乐,每天都过的有意义哦,我们下期见!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/829923.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号