更新 此脚本现已过时,因为Jenkins中的Gitlab插件现在可以将构建状态报告给Jenkins.
我正在尝试集成Gitlab CE 8.4和Jenkins.我已经读过Jenkins CI集成在Gitlab EE中可用,但目前它不是一个选项.
我已经设置了Jenkins gitlab插件和Web钩子,并推送到我的repo触发器构建的Jenkins作业.但是,这些构建不会显示在相应Gitlab页面的"构建"选项卡中.如果我将.gitlab-ci.yml文件提交到存储库,Web挂钩仍然有效,Jenkins作业会运行,但是"Builds"页面显示构建被卡住,因为没有定义任何跑步者.
实际上,据我所知,我没有设置任何Gitlab CI跑者,因为他们与Jenkins无关.
我想保留Jenkins的工作,因为那里发布了一些有用的信息,我也希望在Gitlab页面上有自己的状态.我正在考虑这个关于Gitlab CI runner的简单脚本,它将从Jenkins作业中捕获控制台输出并将其转换为Gitlab.像运行wget或curl之类的东西,因为Jenkins提供API来查看作业的输出.
但是,有关Gitlab CI和.gitlab-ci.yml的文档以及示例都是有限的.
我怎么能写那份工作档案?我是否正确地认为Gitlab会收到职业的标准?
是的,Gitlab-CI 打印作业的标准输出并与退出代码相关。
我的解决方案由已安装的 Gitlab-CI 运行程序和从 调用的 python 脚本组成,.gitlab-ci.yml该脚本从CI_BUILD_REF环境变量获取 git commit ID,连接到 Jenkins 主机,找到相应的构建控制台,通过 读取输出urllib2.urlopen(...).readlines(),并将其打印到 stdout。
它使用bySHA1Jenkins Git 插件提供的 url 来查找构建控制台。
该脚本还会查找以该单词开头的行Finished:,并根据该单词后面的内容以退出代码退出:如果是 则为 0 SUCCESS,如果FAILURE, or 则为1 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())
Run Code Online (Sandbox Code Playgroud)
此外,.gitlab-ci.yml:
jenkins-translate:
script:
- python jenkins-translate.py
Run Code Online (Sandbox Code Playgroud)
缺点很明显:按取消按钮实际上取消翻译,而不是 Jenkins 作业,没有指向 Jenkins 作业页面的可点击链接。
至少它可以告知 Jenkins 的工作状态。
更新。该脚本未授权 Jenkins,它假设宽松的安全设置,此时每个人都可以看到作业输出。
更新2。Jenkins-Gitlab 插件现在可以将构建状态报告回 Gitlab,从而废弃此脚本。
| 归档时间: |
|
| 查看次数: |
4961 次 |
| 最近记录: |