更新 此脚本现在已过时,因为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会收到工作的标准?
答案 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,后者会废弃此脚本。