1. 程式人生 > >避免代碼merge後無法構建發布問題解決方案(GItlabCI + Jenkins)

避免代碼merge後無法構建發布問題解決方案(GItlabCI + Jenkins)

pro 開發人員 pytho bubuko 解決 com bsp 發布 ner

1.準備工作

目標: 開發人員提交代碼後觸發GitlabCI ,如果有merge請求則觸發Jenkins對源分支在開發環境構建測試。

2.GItlab配置

開啟僅允許pipeline成功後才能merge選項

技術分享圖片

項目註冊runner

技術分享圖片

項目添加.gitlab-ci.yaml文件

tags: gitlab-runner 的標簽

scripts: 調用runner運行的腳本 這裏講腳本做了軟連接為gitlabci 後面兩個參數分別是 gitlab項目的id jenkins項目名稱

技術分享圖片

3.Python腳本

這個腳本需要軟連接到/usr/bin/gitlabci,主要采用gitlab庫和jenkins完成。

# _*_ coding: utf-8 _*_
import gitlab
import jenkins
import time
import sys
import datetime
import os

#獲取分支
def GetBranch(projectId):
    startTime = datetime.datetime.now().minute
    while True:
        project = gl.projects.get(projectId)
        lastMerge = project.mergerequests.list()[0]
        nowTime 
= datetime.datetime.now().minute useTime = nowTime - startTime #print(useTime) timeout = 5 if useTime > timeout : #raise Exception("獲取分支超時!") os.system("echo ‘獲取分支超時!‘") #print("獲取分支超時!") return ‘‘ time.sleep(
5) mergeStatus = lastMerge.changes()[state].encode(utf-8) if mergeStatus == opened: sourceBranch = lastMerge.changes()[source_branch].encode(utf-8) print("SourceBranch -->>>" + sourceBranch) os.system("echo ") return sourceBranch else: #raise Exception("No merge request is opened!") os.system("echo ‘No merge request is opened!‘") #print(‘No merge request is opened!‘) #觸發構建 def JenkinsBuild(projectName,branchName): nextBuildNumber = server.get_job_info(projectName)[nextBuildNumber] server.build_job(projectName,{gitlabCI : branchName}) os.system("echo ‘觸發成功!‘") print("觸發成功! " + "BuildNumber is " + "-->" + str(nextBuildNumber)) time.sleep(10) startTime = datetime.datetime.now().minute while True: nowTime = datetime.datetime.now().minute useTime = nowTime - startTime if useTime > timeout : raise Exception("構建超時!") #print("構建超時!") #exit() buildInfo = server.get_build_info(projectName, nextBuildNumber) if buildInfo[building] == True: print(projectName + "--> Building") time.sleep(30) elif buildInfo[building] == False: result = buildInfo[result].encode(utf-8) if result == SUCCESS: os.system("echo ‘構建成功!‘") print("構建成功!-->" + result) return True else: raise Exception("觸發成功 構建失敗!--> 請檢查項目參數") #print("觸發成功 構建失敗!--> 請檢查項目參數") #return False if __name__ == __main__: gitUrl=xxxxx gitToken=xxxxx jenkinsUrl=http://0.0.0.0:8080 jenkinsUser=xxxxxx jenkinsToken=xxxxxxxx timeout=5 projectId=sys.argv[1] projectName=sys.argv[2] #run gl = gitlab.Gitlab(gitUrl,gitToken) branchName = GetBranch(projectId) #branchName = ‘v1.11.0_release‘ if branchName != ‘‘: server = jenkins.Jenkins(jenkinsUrl,jenkinsUser,jenkinsToken) JenkinsBuild(projectName,branchName)

效果

避免代碼merge後無法構建發布問題解決方案(GItlabCI + Jenkins)