在Jenkins pipeline中融入python和go语言编程

在Jenkins pipeline的groovy脚本中可以实现很多复杂灵活的功能,但是:
1 一来对java、groovy不是很熟,也不知道能不能引入一些三方库?比如搞个jdbc操作下mysql什么的。
2 二是自己对go和python比较熟悉,所以想能够更加灵活的实现更多的功能:
比如:

  • 操作数据库,无需依赖构建宿主机必须有数据库client来靠shell操作数据库。
  • 操作gitlab,比如参数化构建,传递进来的各仓库的tag参数,需要先将tag在gitlab中对应起来一一先打tag,然后再拉取新打的tag的代码去构建。这需要调gitlab的rest API接口。
  • 还有一些比如发邮件,钉钉,企业微信 等告警通知时,虽然都有插件,但插件太多还是比较烦,特别如果需要依赖插件里面的各种自带的环境变量时,很乱,不好维护。而如果是维护一些编程语言写的代码,感觉会好维护很多。
  • 其他各种在pipeline中难以实现的功能,都可以轻松实现。。。

python:

  1. 那么,如果用python,想想挺简单的,直接把python脚本放在源代码仓库或者自己建一个专门放python脚本的仓库。因为一般的构建过程都会先checkout scm,而linux系统自带python,所以在pipeline中想用python脚本时,直接调用需要的python文件即可。
  2. 调用python脚本时如何传递参数?
    可以直接在调用python脚本时将参数传递进去;如果参数比较复杂,可以传json对象,先在groovy中序列化,然后在python中反序列化即可。

go:

  1. go语言可以编译成二进制文件直接执行,所以如果需要第三方库会很方便,在开发时就可以引入第三方库,而无需考虑环境。
  2. 最好是将所有的go语言脚本源码文件和其二进制文件单独放在另外一个代码库,在pipeline中需要时,直接checkout 该仓库,然后给go二进制脚本加权限执行。
  3. 参数传递还是可以传json,序列化和反序列化。

示例:用go执行发送邮件和操作数据库

groovy脚本片段:
stage(‘send email to sendList and exec mysqlDB‘) {
                checkout([$class: ‘GitSCM‘, branches: [[name: ‘*/master‘]],
                doGenerateSubmoduleConfigurations: false,
                extensions: [],
                submoduleCfg: [],
                userRemoteConfigs: [[credentialsId: ‘gitlabAdmin‘,
                url: ‘http://gitlab-ip/group/go-script.git‘]]])

                def sendList = [
                    "[email protected]",
                    "[email protected]",
                    "[email protected]",
                    "[email protected]",
                    "[email protected]"
                    ]
                def goMail = [
                    user: "发送者邮箱地址",
                    secret: "发送者邮箱秘钥",
                    smtpHost: "smtp.qq.com",
                    sslPort: "465",
                    sendTo: sendList,
                    subject: "测试subject",
                    content: "测试content",      // 这里自定义html,或者将html模板放在代码库中替换,
                                          // 在go脚本中定义好相应的header就行了
                ]
                def goMysql = [
                    DSN: "root:[email protected](1.1.1.1:3306)/jenkins?charset=utf8",
                    sql: [
                        "update XXX set XX=XX where id=XX AND XX=XX",
                        "update XXX set XX=XX where id=XX AND XX=XX",
                        "update XXX set XX=XX where id=XX AND XX=XX",
                        "update XXX set XX=XX where id=XX AND XX=XX"
                     ]
                ]
                def scriptParams = [
                    GoMail: goMail,
                    GoMysql: goMysql
                ]

                def output = JsonOutput.toJson(scriptParams)

                try {
                    echo ‘执行go脚本,参数:‘
                    println(output);
                    sh "chmod +x ./run && ./run -scriptParams \‘${output}\‘"
                }
go语言脚本片段:
type GoMail struct {
    User     string   `json:"user"`
    Secret   string   `json:"secret"`
    SmtpHost string   `json:"smtpHost"`
    SslPort  string   `json:"sslPort"`
    SendTo   []string `json:"sendTo"`
    Subject  string   `json:"subject"`
    Content  string   `json:"content"`
}

type GoMysql struct {
    DSN        string `json:"DSN"`
    Sql []string `json:"sql"`
}

type ScriptParams struct {
    GoMail  GoMail  `json:"GoMail"`
    GoMysql GoMysql `json:"GoMysql"`
}

原文地址:https://blog.51cto.com/13645243/2375624

时间: 2024-10-08 20:49:33

在Jenkins pipeline中融入python和go语言编程的相关文章

jenkins pipeline中执行nohup java -jar ***.jar & 的时候会忽略执行jar之后的命令

搜索关键词:pipeline中执行nohup时忽略执行& 问题: 在做自动化部署的时候,脚本如下: sh "ssh [email protected]'$target_ip' nohup '$java_home' -jar '$app_home'/'$env.JOB_NAME'.jar >'$app_home'/ 2>&1 &" 总是执行到.jar这里后面的指定日志输出和后台运行命令(>'$app_home'/ 2>&1 &

用Jenkins Pipeline实现网元日志和配置的导出

整体架构: Jenkins > PC1 > RobotFramework > NEs_1 > PC2 > RobotFramework > NEs_2 > PC3 > RobotFramework > NEs_3 .... 通过Jenkins控制多台PC,再借助RobotFramework框架实现对网元的自动化测试,使用SSHLibrary等库. Jenkins Pipeline中的代码: node(pc) { stage('Export_Log_an

如何学习数据分析中的Python/R?

数据分析工作离不开很多的工具,如果我们要想搜集数据的话,有些工具是不能够做好这一项工作的.当然,数据在数据分析中是一个十分重要的内容,可以说,没有数据就不存在数据分析这一项工作,那么这就需要提出两种工具,那就是Python和R.一般来说,这两种编程语言对于数据分析师是十分有用的,一般来说,初级数据分析师和高级数据分析师的关键在于是否具备编程能力.而数据分析师里的数据挖掘.商业智能.爬虫.可视化报表都需要用到编程.如果掌握一门优秀的编程语言,那将会使得数据分析工作效率得到提高.下面我们就给大家介绍

Docker的Jenkins Pipeline工作流

原文地址:http://www.youruncloud.com/blog/127.html 分享主题 一个软件产品的开发周期中,尤其是敏捷开发,持续集成和持续部署是必不可少的环节,而随着产品的丰富,模块的增多.随即带来了更加多的问题,各模块间编译环境的准备,编译复杂,耗时增加,还需要专人去负责这个流程.而Jenkins则可以很好的解决这个单一而容易出错的CI(持续集成)工作. Jenkins也存在着编译环境不隔离的问题,虽然可以通过集群的方式解决,可是需要为每种环境甚至是一种语言的不同版本准备多

c#中调用python

1. 安装IronPython,到http://ironpython.codeplex.com/下载安装包 2. 创建项目 创建一个C#的控制台应用程序. 添加引用: 浏览到IronPython的安装目录中,添加对IronPython.dll,Microsoft.Scripting.dll 两个dll的引用. 3. 添加Python文件到当前的项目中 创建一个文本文件命名为:hello.py, 编辑如下 def welcome(name):    return "hello" + na

Jenkins pipeline:pipeline 使用之语法详解

一.引言 Jenkins 2.0的到来,pipline进入了视野,jenkins2.0的核心特性. 也是最适合持续交付的feature. 简单的来说,就是把Jenkins1.0版本中,Project中的相关配置信息,如SVN/Git的配置,Parameter的配置等都变成Code,即Pipeline as Code. 随着pipeline交付流水线在团队中的推广,使用pipeline脚本的job也迅速增加. 优势: 通过写代码的形式配置Project,且Jenkins中内置了常用的steps.

Jenkins pipeline shared library

Jenkinsfile https://jenkins.io/doc/book/pipeline/jenkinsfile/ Jenkins Pipeline is a suite of plugins that supports implementing and integrating continuous delivery pipelines into Jenkins. Pipeline provides an extensible set of tools for modeling simp

Jenkins pipeline概念理解

1.Jenkins Pipeline总体介绍 Pipeline,简而言之,就是一台运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化. Pipeline是Jenkins2.X最核心的特性,帮助Jenkins实现从CI到CD与DevOps的转变. 详细介绍可见https://jenkins.io/2.0 2.什么是Jenkins Pipeline Jenkins Pipeline是一组插件,让Jenkins可以实现持续交付

Jenkins Pipeline+Docker实现流水线自动化构建(上百个项目共用一个脚本方案)

Jenkins Pipeline是一套插件,支持将连续输送Pipeline实施和整合到Jenkins.Pipeline提供了一组可扩展的工具,用于通过PipelineDSL为代码创建简单到复杂的传送Pipeline. 对于单个项目来说,使用这样的Pipeline来构建能够满足绝大部分需求,但是这样做也有很多缺陷,包括: 多个项目的Pipeline打包脚本不能公用,导致一个项目写一份脚本,维护比较麻烦.Jenkins提供了一个更优雅的管理Pipeline脚本的方式,在配置项目Pipeline的时候