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)的更多相关文章

  1. Gitlab源码库里代码提交后,如何触发jenkins自动构建?

    版本库里代码提交后,如何触发jenkins自动构建?这是一个面试题,感觉自己回答的并不好,因为并没有用过这个功能,之前公司实际项目用的是svn版本管理,一般都用立刻构建,和定时任务构建(不管代码是否有 ...

  2. jenkins和svn搭建自动代码构建发布

    jenkins安装和配置 .安装jenkins .yum install java wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins. ...

  3. WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 前言 GIS代码进行更新后,由于用户前端已有缓存,导致更新的功能不 ...

  4. git merge后如何撤销

    merge后发现冲突太多,或者合并的分支代码并不是最新,那就直接撤销再合并好了. git reset --hard HEAD 用来撤销还没commit 的merge,其实原理就是放弃index和工作区 ...

  5. git merge后,后悔了如何回退

    今天将feature分支的代码merge到develop分支后我后悔了,因为feature分支的功能还没有全部开发完成,我在feature分支上commit是可以的,但是这之后我又把它merge到了d ...

  6. [operator]jenkins+gitlab/Webhook自动构建发布

    开发同事在提交代码到gitlab后,需要使用jenkins对代码进行构建,每次都需要手动操作会很繁琐,如果工程很大,那么也会浪费时间,gitlab的webhook功能,可以在代码提交后自动调用jenk ...

  7. 小伙伴想学Jenkins自动构建发布项目,我:安排上了!!

    写在前面 趁着十一长假,很多小伙伴都在悄悄学习,有些是为了能够顺利通过面试,进入大厂升职加薪.有些则是为了进一步巩固和提高自己的专业技能,希望有朝一日能过成为互联网架构师乃至技术专家.这不,就有小伙伴 ...

  8. jenkins pipeline构建后返回构建结果给gitlab

    jenkins pipeline构建后返回构建结果给gitlab 使用场景 gitlab 合并请求时要求管道任务必须成功,否则无法执行合并操作,又不想使用gitlab ci 工具. 实现方法 1.Ge ...

  9. ITF Demo代码(用VBScript构建的接口测试框架)

    ITF Demo代码(用VBScript构建的接口测试框架) http://blog.csdn.net/testing_is_believing/article/details/20872629

随机推荐

  1. css翻译名词术语

    原文 本书译法 其它译法(未采用) CSS - 层叠样式表.级联样式表.样式单 cascade 层叠(机制) 级联 fallback 回退(机制.措施.方案) 后备.回落.降级 selector 选择 ...

  2. vertical-align 详解

    vertical-align用来设置垂直对齐方式,所有垂直对齐的元素都会影响行高 值: baseline | sub | super | top | text-top | middle | botto ...

  3. 解读 --- 基于微软企业商务应用平台 (Microsoft Dynamics 365) 之上的人工智能 (AI) 解决方案

    9月25日微软今年一年一度的Ignite 2017在佛罗里达州奥兰多市还是如期开幕了.为啥这么说?因为9月初五级飓风厄玛(Hurricane Irma) 在佛罗里达州登陆,在当地造成了挺大的麻烦.在这 ...

  4. MySQL——索引优化实战

    上篇文章中介绍了索引的基本内容,这篇文章我们继续介绍索引优化实战.在介绍索引优化实战之前,首先要介绍两个与索引相关的重要概念,这两个概念对于索引优化至关重要. 本篇文章用于测试的user表结构: 索引 ...

  5. json_encode无返回结果

    今天写php curl模拟客户端访问测试一个抽奖post数据,拿回来的数据是json,使用json_decode函数就是没结果,百度谷歌好久.终于发现是BOM的文件头造成的, 微软为utf-8文件添加 ...

  6. 【Python】opencv显示图像

    import cv2 img = cv2.imread("lena.jpg") cv2.namedWindow("Image") cv2.imshow(&quo ...

  7. linux安装activemq

    ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多种语言 ...

  8. LeetCode题解之Copy List with Random Pointer

    1.题目描述 2.问题分析 首先要完成一个普通的单链表的深度复制,然后将一个旧的单链表和新的单链表的节点使用map对应起来,最后,做一次遍历即可. 3.代码 RandomListNode *copyR ...

  9. Sql Server与.Net(C#)中星期值对比

    最近发现Sql Server与.Net(C#)中星期值居然不匹配,倒不知道依哪一个了. 1.Sql Server declare @date datetime; set @date = '2017-0 ...

  10. SpringBoot_Mybatis_Maven_BootStrap

    ​​​ 需要eclipse 配置maven 未完,待续 链接:https://pan.baidu.com/s/1vej2zEdJmKeMUJD9S1B5MA 密码:y5j9