避免代码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)

效果

原文地址:https://www.cnblogs.com/mascot1/p/9963984.html

时间: 2024-11-05 17:28:01

避免代码merge后无法构建发布问题解决方案(GItlabCI + Jenkins)的相关文章

通过jenkins构建发布普通网站(jenkins+nginx+svn)

本次实验介绍:nginx:web网站svn:代码存储仓库jenkins:自动化运维工具 开发人员通过将代码提交到svn上,运维人员通过配置jenkins自动发布到nginx目录上. 实验环境:192.168.0.188 Jenkins192.168.0.189 nginx192.168.0.19 svn Jenkins.nginx.svn环境都已经准备完成,这里不进行再次搭建 步骤:1.Jenkins安装ssh插件,并配置远程服务器2.建立项目(job)配置Jenkins3.将代码上传svn4.

运维技巧:简单4步完成自动化构建发布

各位看官,这不是一个揭发单身有为青年因同事们天天秀恩爱而受到一万点暴击伤害的故事.这里指的狗粮,不是真正的"狗粮"--当然,也不是你们认为的狗粮. 事实上,现在很多涉足产品开发的互联网公司,都会提到"吃狗粮"这一概念(出自"Eating yourown dog food -- 吃你自家的狗粮"),它的意思是公司内部员工使用自己生产的产品进行日常工作.这么做有什么好处呢,比方说一家公司做美颜APP的,结果他们自己员工却用某图秀秀P图,这产品对外怎么

【转】Jenkins配置Git push后自动构建

[实战]Jenkins配置Git push后自动构建 # 前言   Jenkins 持续构建集成是软件版本迭代的一大利器,对于前端攻城狮来说,本身对服务器的接触就少,也并不愿意去做这个事.Jenkins持续构建省去了繁琐的服务器替换包的过程,同时有历史构建记录和每次构建的变更记录,这为我们回退和检查构建情况提供了便利.   本文假设你已经搭建了一些基础环境,如Git环境,Node环境等.如未处理请自行百度 # Jenkins配置步骤 1. 在Jenkins中进入你要配置自动构建的项目 要设置自动

python构建发布自定义模块

如何在python中构建发布自己的模块呢? 首先新建一个文件夹,如x99,里面放入__init__.py,setup.py,x99.py三个模块, 其中init空着,setup.py里面写入: from distutils.core import setup setup( name='nineXnine', version='1.1.1', py_modules =['x99'], #这个要跟发布的模块名一致 author='wangyi', author_email='[email prote

windows下构建发布python模块(转载)

转自:http://blog.sciencenet.cn/blog-800737-649292.html 1. 首先将你要发布的模块(函数)写在一个Python文件里,即以*.py的文件,如nester.py文件(该文件内容即为你要发布的函数) 2. 创建一个文件夹如nester,将nester.py文件复制到该文件夹里 3. 在该文件夹里创建一个名为setup.py文件其内容为: from distutils.core import setup setup(  #下面都是setup函数的参数名

git merge后,后悔了如何回退

今天将feature分支的代码merge到develop分支后我后悔了,因为feature分支的功能还没有全部开发完成,我在feature分支上commit是可以的,但是这之后我又把它merge到了develop分支这就不合适了. 言归正传,那如何解决呢,总共分三步: 第一步:git checkout到你要恢复的那个分支上 1.git checkout develop 第二步:git reflog查出要回退到merge前的版本号 1. git reflog 第三步:git reset --har

一步一步用jenkins,ansible,supervisor打造一个web构建发布系统

新blog地址:http://hengyunabc.github.io/deploy-system-build-with-jenkins-ansible-supervisor/ 一步一步用jenkins,ansible,supervisor打造一个web构建发布系统. 本来应该还有gitlab这一环节的,但是感觉加上,内容会增加很多.所以直接用github上的spring-mvc-showcase项目来做演示. https://github.com/spring-projects/spring-

dropbox 死掉后 IOS 7.1 应用发布替代解决方案

由于大家都知道的原因Dropbox 挂掉了,免费的 https文件分享链接没有了,广大通过 dropbox https 分享链接来发布ios应用的童鞋悲剧了 .今天就给大家支个招儿. 分析  ios 7.1 安装链接 格式  itms-services://?action=download-manifest&url=https://xxx.plist 1.必须是 https 的安全链接. 2.链接是以 .plist 结尾 3.最重要的一点 这个 https://xxx.plist 必须要能够直接

Head Frist Python 读书笔记 构建发布

构建发布 p41 Windows系统需要使用“c:\pythonX\python.exe”执行, 或者,通过配置环境变量来简化输入 1. 首先需要在系统中注册python环境变量:假设python的安装路径为c:\python2.6,则修改我的电脑->属性->高级->环境变量->系统变量中的PATH为: (为了在命令行模式下运行Python命令,需要将python.exe所在的目录附加到PATH这个环境变量中.) PATH=PATH;c:\python26 上述环境变量设置成功之后