Jenkins通过命令打包

文章介绍了如何利用curl命令和Python脚本来自动化Jenkins项目的打包过程。通过curl命令可以携带特定参数触发Jenkins构建,并提供了Python脚本示例,该脚本能获取Jenkins页面参数,进一步优化自动化流程。
摘要由CSDN通过智能技术生成

原因

Jenkins在集成整体包build时会有输入其他Jenkins项目版本号的操作,但有时候会拉取多个

项目的版本号,如果每次手动输入就很麻烦,此时可使用curl命令携带参数进行打包

curl方式打包

格式:curl -X POST JENKINS_URL/job/JOB_NAME/build  --user USER:TOKEN --data-urlencode json='{"parameter": [{"name":"id", "value":"123"}, {"name":"verbosity", "value":"high"}]}'

实例:curl --user admin:116359855d83223730b9a6badfe62fb4f7 -X POST http://localhost:8080/job/demo/build   --data json='{"parameter":[{"name":"BRANCH","value":"dev-2"},{"name":"BRANCH_NUMBER","value":""},{"name":"buildVersion","value":"1.6"},{"name":"releaseVersion","value":"166"},{"name":"DPServiceBuildID","value":"212"}]}'

注1:--user 可使用--cookie代替,如curl -X POST JENKINS_URL/job/JOB_NAME/build --cookie “...” --data-urlencode json='{"parameter": [{"name":"id", "value":"123"}, {"name":"verbosity", "value":"high"}]}'

注2:token来源于Jenkins用户设置中的token生成

扩展:python脚本

#!/usr/bin/python
#encoding=utf8

#Python 3.10.5

import os,sys
import json
import datetime,getopt,glob,time
import requests, subprocess
from bs4 import BeautifulSoup


def init():
  global FILE_NAME
  global IOT_VERSION
  global JENKINS_USER
  global JENKINS_HOST
  global JENKINS_TOKEN
  global PARAMETER_TYPE
  global PARAMETER_JSON
  FILE_NAME="Jenkins.html"
  JENKINS_USER="louys1"
  JENKINS_HOST="http://localhost:8080/jenkins/job/demo"
  JENKINS_TOKEN="116359855d83223730b9a6badfe62fb4f7"
  PARAMETER_TYPE="notype"
  PARAMETER_JSON='{"parameter":[{"name":"BRANCH","value":"master"},{"name":"buildVersion","value":"1.6.6"}]}' 
  getoptions()


def curl_jenknis():
  #cmd = ("curl --user %s:%s %s/%s/parameters/" % (JENKINS_USER,JENKINS_TOKEN,JENKINS_HOST,IOT_VERSION))
  #html = subprocess.check_output(cmd)
  #return html
  html = requests.get(("%s/%s/parameters/" % (JENKINS_HOST,IOT_VERSION)),auth=(JENKINS_USER,JENKINS_TOKEN))
  return html.text


def getParameters(soup):
  string="{\"parameter\": ["
  for aa in soup.html.body.find_all('div'):
    if aa.get('class') ==  None:
      continue
    if aa.get('class')[0] == "tr":
       for bb in aa.find_all('div'):
         if bb.get('class') == None:
           continue
         if bb.get('class')[0] == "setting-name":
             string+="{\n  \"name\": \"%s\",\n  \"value\": \"%s\"\n}," % (bb.contents[0],aa.input['value'])
  string = string[:-1]
  string += "]}"
  return string


def build():
  headers={"Content-Type":"application/x-www-form-urlencoded"}
  auth=(JENKINS_USER,JENKINS_TOKEN)
  #cmd = ("curl --user %s:%s -X POST %s/build --data json=%s" % (JENKINS_USER,JENKINS_TOKEN,JENKINS_HOST,PARAMETER_JSON))
  resault=requests.post(JENKINS_HOST+"/build",data=PARAMETER_JSON,auth=auth,headers=headers)
  print (resault.text)


def getoptions():
  global FILE_NAME
  global IOT_VERSION
  global JENKINS_USER
  global JENKINS_TOKEN
  global PARAMETER_TYPE
  global PARAMETER_JSON
  argv_parse = ["help","fileName=","token=","user=","parameter_json"]
  try:
    opts, args = getopt.getopt(sys.argv[1:], "v:t:",argv_parse)
    if len(opts) == 0:
      usage()
  except getopt.GetoptError:
    usage()
  for opt, arg in opts:
    if opt in ("-h", "--help"):
      usage()
    elif opt == '-v':
      IOT_VERSION = arg
    elif opt == '--fileName':
      FILE_NAME = arg
    elif opt == '--user':
      JENKINS_USER = arg
    elif opt == '--token':
      JENKINS_TOKEN = arg
    elif opt == '--parameter_json':
      PARAMETER_JSON = arg
    elif opt == '-t':
      PARAMETER_TYPE = arg
    else:
      pass

def usage():
    usage_str = '''
usage: %(script)s [选项 ...]
选项:
    -t <type>                               获取参数类型: local 本地文件读取  jenkins jenkins页面读取  build 传递参数在jenkins打包
      
      jenkins 必要参数:
      -v <version>                          指定版本,例: -v 674
      --user <user>                         指定jenkins用户,默认 louys1
      --token <token>                       指定jenkins使用token值,默认为louys1用户设置值
      
      local 必要参数:
      --fileName <string>                   从指定文件读取内容获取参数(默认Jenkins.html),例: --fileName=Jenkins.html

      build 可选参数:
      --parameter_json                      json类型的参数,例: --parameter_json='json={"parameter":[{"name":"BRANCH","value":"dev"},{"name":"VERSION","value":"166"}'
    使用示例:
      python -t local --fileName=Jenkins.html
      python -t jenkins -v 674
      python -t build
''' % {'script':sys.argv[0]}
    
    print(usage_str)
    sys.exit(254)

def start():
  init()
  if PARAMETER_TYPE == "local":
    soup = BeautifulSoup(open(FILE_NAME,encoding='UTF-8'),'html.parser')
  elif PARAMETER_TYPE == "jenkins":
    curl_string = curl_jenknis()
    soup = BeautifulSoup(curl_string,'html.parser')
  elif PARAMETER_TYPE == "build":
    build()
    sys.exit(254)
  else:
    usage()
  parameters = getParameters(soup)
  print (parameters)

if __name__ == '__main__':
   start()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值