避免代码merge后无法构建发布(GItlabCI + Jenkins)
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)的更多相关文章
- Gitlab源码库里代码提交后,如何触发jenkins自动构建?
版本库里代码提交后,如何触发jenkins自动构建?这是一个面试题,感觉自己回答的并不好,因为并没有用过这个功能,之前公司实际项目用的是svn版本管理,一般都用立刻构建,和定时任务构建(不管代码是否有 ...
- jenkins和svn搭建自动代码构建发布
jenkins安装和配置 .安装jenkins .yum install java wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins. ...
- WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 前言 GIS代码进行更新后,由于用户前端已有缓存,导致更新的功能不 ...
- git merge后如何撤销
merge后发现冲突太多,或者合并的分支代码并不是最新,那就直接撤销再合并好了. git reset --hard HEAD 用来撤销还没commit 的merge,其实原理就是放弃index和工作区 ...
- git merge后,后悔了如何回退
今天将feature分支的代码merge到develop分支后我后悔了,因为feature分支的功能还没有全部开发完成,我在feature分支上commit是可以的,但是这之后我又把它merge到了d ...
- [operator]jenkins+gitlab/Webhook自动构建发布
开发同事在提交代码到gitlab后,需要使用jenkins对代码进行构建,每次都需要手动操作会很繁琐,如果工程很大,那么也会浪费时间,gitlab的webhook功能,可以在代码提交后自动调用jenk ...
- 小伙伴想学Jenkins自动构建发布项目,我:安排上了!!
写在前面 趁着十一长假,很多小伙伴都在悄悄学习,有些是为了能够顺利通过面试,进入大厂升职加薪.有些则是为了进一步巩固和提高自己的专业技能,希望有朝一日能过成为互联网架构师乃至技术专家.这不,就有小伙伴 ...
- jenkins pipeline构建后返回构建结果给gitlab
jenkins pipeline构建后返回构建结果给gitlab 使用场景 gitlab 合并请求时要求管道任务必须成功,否则无法执行合并操作,又不想使用gitlab ci 工具. 实现方法 1.Ge ...
- ITF Demo代码(用VBScript构建的接口测试框架)
ITF Demo代码(用VBScript构建的接口测试框架) http://blog.csdn.net/testing_is_believing/article/details/20872629
随机推荐
- js-ES6学习笔记-module(1)
1.在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种.前者用于服务器,后者用于浏览器.ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可 ...
- JS 显示隐藏DIV
JS关闭DIV HTML <div id="bar1"> <p onclick="removeElement('bar1')">关闭&l ...
- phpstudy集成下Apache配置部署https安全证书
一..先申请到安全证书.(腾讯云或者阿里云申请免费1年的安全证书),怎么申请这里也说下(以腾讯云为例): 1.登录腾讯云QQ或微信登录都行,第一次登录要通过实名认证,点击[产品]---[ss证书l] ...
- 纯小白入手 vue3.0 CLI - 2.5 - 了解组件的三维
vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 我的 github 地址 - vue3.0St ...
- oracle 定义临时变量,并使用分支判断
declare tempCount int; tempID ); begin select count(*) into tempCount from CUSTOMER_PROFILE where id ...
- sql server 用户'sa'登录失败(错误18456)
转载于:http://thenear.blog.51cto.com/4686262/865544 用户'sa'登录失败(错误18456)解决方案图解 当我们在使用sql server 的时候可 ...
- 最近用到的 sql 统计操作
统计操作 1.分组统计group by select id,name,count(*) as '总数' from test1 group by id,name --group by 分组 ...
- [Synology] [群晖] 关闭被占用的文件
1. Control Panel: Control Panel > Terminal & SNMP Enable SSH service 2. SSH into Synology 3. ...
- November 07th, 2017 Week 45th Tuesday
Love is composed of a single soul inhabiting two bodies. 爱就是一个灵魂栖息在两个身体里. Love and family and childr ...
- .Net Core Api 跨域配置
.Net Core 和Asp.Net 不同,不需要再去引用其他的跨域组件.创建项目时,就有了. 让接口实现跨域,需要配置两个地方. 一.Startup.cs 这里需要配置两个地方 public voi ...