在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 = [
                    "XXXXXXXX@qq.com",
                    "XXXXXXXX@qq.com",
                    "XXXXXXXX@qq.com",
                    "XXXXXXXX@qq.com",
                    "XXXXXXXX@qq.com"
                    ]
                def goMail = [
                    user: "发送者邮箱地址",
                    secret: "发送者邮箱秘钥",
                    smtpHost: "smtp.qq.com",
                    sslPort: "465",
                    sendTo: sendList,
                    subject: "测试subject",
                    content: "测试content",      // 这里自定义html,或者将html模板放在代码库中替换,  
                                          // 在go脚本中定义好相应的header就行了
                ]
                def goMysql = [
                    DSN: "root:passwd@tcp(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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins是一个开源的持续集成和交付工具,可以用于构建、测试和部署软件项目。Jenkins PipelineJenkins一种用于定义、管理和执行持续集成流水线的插件。在Jenkins Pipeline调用Python可以通过以下步骤实现。 首先,需要在Jenkins服务器上安装Python解释器。可以通过在终端或命令提示符运行“python --version”命令来检查Python是否已安装。如果未安装,需要按照Python官方网站提供的步骤进行安装。 其次,在Jenkins创建一个新的Pipeline项目。在项目配置,选择“Pipeline script”选项,并在编辑栏编写Pipeline脚本。 在Pipeline脚本,需要使用“node”关键字指定Jenkins节点来运行Python脚本。可以选择在master节点还是在其他节点上运行脚本。示例如下: ``` pipeline { agent any stages { stage('Run Python script') { steps { node('master') { // 在master节点上运行Python脚本 sh 'python path/to/your/python/script.py' } } } } } ``` 在这个例子Pipeline脚本的stage定义了一个阶段,步骤的node('master')表示Python脚本将在master节点上运行,sh 'python path/to/your/python/script.py'则是调用Python解释器执行具体的Python脚本。 最后,保存并触发Pipeline项目。当Jenkins检测到项目变化时,将自动执行Pipeline脚本,并调用Python解释器运行相应的Python脚本。 通过上述步骤,我们可以在Jenkins Pipeline成功调用Python,并实现我们的持续集成和交付需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值