穷人的Gitlab CE和Jenkins整合

时间:2016-02-21 20:50:00

标签: jenkins gitlab

更新 此脚本现在已过时,因为Gitlab plugin in Jenkins现在可以将构建状态报告给Jenkins。

我试图整合Gitlab CE 8.4和Jenkins。我已经读过Jenkins CI集成在Gitlab EE中可用,但目前它不是一个选项。

我已经设置了Jenkins gitlab插件和Web挂钩,并推送到我的repo触发器构建的Jenkins作业。 但是,这些版本没有显示在' Builds'相应的Gitlab页面中的选项卡。 如果我将.gitlab-ci.yml文件提交到存储库,Web挂钩仍可正常运行,Jenkins的作业会运行,但是' Builds'页面显示构建被卡住,因为没有定义任何跑步者。

事实上,我还没有设置任何Gitlab CI跑步者,因为据我所知,他们与Jenkins无关。

我希望保留Jenkins的工作,因为那里发布了一些有用的信息,我也希望在Gitlab页面上有自己的状态。 我在这方面考虑了一个Gitlab CI运行器的简单脚本,它将从Jenkins作业中捕获控制台输出并将其转换为Gitlab。像运行wget或curl之类的东西,因为Jenkins提供API来查看作业的输出。

然而,关于Gitlab CI和.gitlab-ci.yml的文档是有限的,以及示例。

我怎么能写那份工作档案? 我是否正确地认为Gitlab会收到工作的标准?

1 个答案:

答案 0 :(得分:4)

是的,Gitlab-CI打印出一份工作标准,并与退出代码有关。

我的解决方案包括已安装的Gitlab-CI运行程序和从.gitlab-ci.yml调用的python脚本,它从CI_BUILD_REF环境变量获取git提交ID,连接到Jenkins主机,找到相应的构建控制台,通过urllib2.urlopen(...).readlines()读取输出,并将其打印到stdout。

它使用Jenkins Git插件提供的bySHA1 url来查找构建控制台。

该脚本还会查找该行,从单词Finished:开始,然后使用退出代码退出,根据该单词后面的内容:如果是SUCCESS则为0,如果{{1}则为1 },或FAILURE

脚本文字:

UNSTABLE

另外,import urllib2 import os import sys import time TIMEOUT = 5 def get_build_console_for_sha1(url, sha1): return '{}/scm/bySHA1/{}/consoleText'.format(url, sha1) def parse_console(build_con): retcode = 0 if build_con: total_read_lines = 0 finished_line = None while not finished_line: current_read_lines = 0 try: for line in urllib2.urlopen(build_con, None, TIMEOUT).readlines(): current_read_lines += 1 if current_read_lines >= total_read_lines: print line, total_read_lines += 1 sys.stdout.flush() if line.startswith('Finished: '): finished_line = line except urllib2.HTTPError as e: if e.code == 404: time.sleep(2) pass if 'FAILURE' in finished_line or 'UNSTABLE' in finished_line: retcode = 1 print "retcode = ", retcode return retcode def main(): URL = 'JENKINS_JOB_URL' sha1 = os.getenv('CI_BUILD_REF') bc = get_build_console_for_sha1(URL, sha1) return parse_console(bc) if __name__ == '__main__' : sys.exit(main())

.gitlab-ci.yml

缺点很明显:按下取消按钮实际上取消了翻译,而不是Jenkins作业,没有可点击链接到Jenkins作业页面。

至少它会告知詹金斯的工作状态。

更新的。这个脚本没有授权Jenkins,它假设放宽的安全设置,当每个人都可以看到作业输出。

UPDATE2 。 Jenkins-Gitlab插件现在可以将构建状态报告给Gitlab,后者会废弃此脚本。