避免代码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学习笔记-Promise对象(2)
1.Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的.它的作用是为Promise实例添加状态改变时的回调函数. 2.Promise.pr ...
- 【代码笔记】iOS-给密码进行加密
一,工程图. 二,代码. #import "ViewController.h" #import "Base64CodeByteFunc.h" @interfac ...
- (转)预处器的对比——Sass、LESS和Stylus
英文原文:http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less-vs-stylus-a-preprocessor-sho ...
- windows下安装composer方法
composer是一个新崛起的PHP的依赖管理工具.官方安装方法见: 此处假定: (1)php安装目录为C:/php5.4 (2)php 安装目录已经加入PATH环境变量(这样就可以在命令行直接输入“ ...
- JavaSE——打印流
打印流: 类PrintStream: PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式.它还提供其他两项功能.与其他输出流不同,PrintStream 永远不会抛 ...
- Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息 by:授客 QQ:1033553122 1. 查看内存信息 1)查看所有内存信息 命令: dumpsys mem ...
- 团队项目个人进展——Day08
一.昨天工作总结 冲刺第八天,昨天看了许多关于wx.request的知识,主要测试了OBJECT参数,同时也对https方面有了一定了解 二.遇到的问题 对文档中的内容只是熟悉,理解并运用起来还存在问 ...
- postgresql 获取所有表名、字段名、字段类型、注释
获取表名及注释: select relname as tabname,cast(obj_description(relfilenode,'pg_class') as varchar) as comme ...
- MySQL锁系列之锁的种类和概念
转自:http://keithlan.github.io/2017/06/05/innodb_locks_1/ 锁是MySQL里面最难理解的知识,但是又无处不在. 一开始接触锁的时候,感觉被各种锁类型 ...
- 【转】Redis学习---阿里云Redis多线程性能增强版详解
[原文]https://www.toutiao.com/i6594620107123589635/ 摘要 Redis做为高性能的K-V数据库,由于其高性能,丰富的数据结构支持,易用等特性,而得到广泛的 ...