避免代碼merge後無法構建發布問題解決方案(GItlabCI + Jenkins)
阿新 • • 發佈:2018-11-15
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)