从GitLab流水线阶段触发Jenkins作业,并在成功完成作业后转移到下一阶段

时间:2020-07-26 08:16:05

标签: jenkins gitlab jenkins-pipeline gitlab-ci

请帮忙,我遇到以下情况,我浏览了许多视频,博客,但找不到与用例匹配的内容

要求: 在GitLab中编写CI \ CD管道,可以按此顺序简化以下步骤

- verify        # unit test, sonarqube, pages
- build         # package
- publish       # copy artifact in repository
- deploy        # Deploy artifact on runtime in an test environment
- integration   # run postman\integration tests

所有其他阶段都可以正常工作,但在部署阶段却可以,但是由于一些限制,我不得不使用带有以下脚本的Jenkin远程API提交现有的Jenkins作业,但是该脚本返回异步响应并启动Jenkins的问题工作和部署阶段完成,然后进入下一个阶段(集成)。

Run Jenkins Job:
    image: maven:3-jdk-8
    tags:
        - java
    environment: development
    stage: deploy
    script:
        - artifact_no=$(grep -m1 '<version>' pom.xml | grep -oP  '(?<=>).*(?=<)')
        - curl -X POST http://myhost:8081/job/fpp/view/categorized/job/fpp_PREP_party/build --user mkumar:1121053c6b6d19bf0b3c1d6ab604f22867 --data-urlencode json="{\"parameter\":[{\"name\":\"app_version\",\"value\":\"$artifact_no\"}]}"

注意:无法使用GitLab CE版和Jenkins CI项目服务。

我正在寻找一种从管道中触发Jenkins作业的可能方法,只有成功完成Jenkins作业后,我的集成阶段才会开始执行。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

通过remote access API以编程方式检索到的詹金斯工作的状态,以其不易处理而臭名昭著。

通常,您希望在响应标头中的Location属性下收到一个url,可以对其进行轮询以获取请求的状态,但不幸的是,这需要一些中间步骤达到这一点。您可以在此post中找到指南。您也可以看看这个较旧的post

一旦有了该URL,就可以合并并解析状态作业,并在脚本中使用sh "exit 1"sh "exit 0"来强制执行正在调用外部作业的作业。是成功还是失败,取决于您要如何断定远程作业

的结果