避免代码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
随机推荐
- 从零开始学习html(十一)CSS盒模型——下
六.盒模型--边框(一) <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type& ...
- Asp.net MVC检测到有潜在危险的 Request.Form 值
解决方法很简单,不像网上说的那么麻烦.只需一步: [ValidateInput(false)] public ActionResult Test(){ }
- 【Redis】Redis学习(一) Redis初步入门
一.Redis基础知识 1.1 Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符串.哈希表.列表.集合.有序集合,位图,h ...
- SQL Server客户端工具到底使用的是哪个provider呢?
SQL Server客户端工具到底使用的是哪个provider呢? 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2013/01/10/sql-server- ...
- Prometheus Node_exporter 之 Network Netstat
Network Netstat /proc/net/netstat 1. Netstat IP In / Out type: GraphUnit: shortLabel: Datagrams out ...
- 理解 Azure 平台中虚拟机的计算能力
虚拟化平台至今已经发展了十多年的时间.其中 Hyper-V 技术现在也已经是第三代版本.用户对于虚拟化计算也越来越接受,这也有了公有云发展的基础.然而在很多时候,用户在使用基于 Hyper-V 的 A ...
- MyISAM和InnoDB的主要区别和应用场景
主要区别: 1).MyISAM是非事务安全型的,而InnoDB是事务安全型的. 2).MyISAM锁的粒度是表级,而InnoDB支持行级锁定. 3).MyISAM支持全文类型索引,而InnoDB不支持 ...
- Python Socket传输文件
发送端可以不停的发送新文件,接收端可以不停的接收新文件. 例如:发送端输入:e:\visio.rar,接收端会默认保存为 e:\new_visio.rar,支持多并发,具体实现如下: 接收端: 方法一 ...
- 向磁盘写入数据提示:No spac left on device通过df -h查看磁盘空间,发现没满,解决方法
初步判断应该有两种情况:一种是block满了,另一种情况就是inode耗尽了. 首先df -i 查看一下是否耗尽inode/block数量. 虚拟一块磁盘并格式化: dd if=/dev/zero o ...
- ODS设计
1.数据调研 2.确定数据范围 需要把上端应用需求与ODS数据范围进行验证,以确保应用所需的数据都已经从业务系统中抽取出来,并且得到了很好的组织,以ER模型表示数据主题关系 3.根据数据范围进行进一步 ...