簡體   English   中英

使用引用git分支的Jenkins管道在openshift上構建

[英]Build on openshift with a Jenkins pipeline referring to a git branch

我有以下結構:

  • 一個git(gitlab)倉庫,其中有2個分支(dev和master)(還有更多分支,但是我只對這兩個分支感興趣)
  • 在該項目上執行推/合並操作時,配置了gitLab的webhook。 Webhook指向管道
  • 一個openshift容器,其中裝有裝有jenkins的吊艙
  • 在openshift jenkins項目中定義了2條管道,一條用於構建dev分支,另一條用於構建master分支。 Pieline是用groovy編寫的,並做了一些git,maven和oc命令

版本:

  • gitlab 10.1
  • Openshift 3.4
  • 詹金斯2.19.3

我能做的是:推動dev / master來啟動2個管道並建立兩個分支。 因為我不知道如何過濾在dev或master上進行的push / merge事件,所以開始兩個構建。 我想要這樣做是因為:

  • 在構建中,有一些使用DB的集成測試,如果管道同時啟動,那么它們會對test-db造成災難
  • 當它們所代表的分支不涉及時,沒有理由啟動兩個管道。 只有具有正確分支的管道才必須啟動

我看到了兩種解決方案。 在Gitlab上,不可能在已定義的分支上驅動webhook事件。 (或者在那里,我不知道如何?)在管道上,我可以編寫一些代碼來檢查女巫分支,是否進行了推/合並。 但是我不知道如何進行這項檢查。

還有其他選擇嗎? 如果可能的話,我不想更改工作流程,但是我願意聽到任何好的建議。

如果我缺少一些相關信息,請詢問我。 我不發布任何代碼,因為上下文非常大,原則上我只需要正確的方向或一些解決方案。

所以最后我自己找到了一種方法。

我認為它並不優雅,但目前可以解決我的問題。

我要做的就是以這種方式在管道中使用git檢查最后一個Merge和分支的最后一個哈希:

def lastMerge = sh(returnStdout: true, script: 'git show :/^Merge --pretty=format:"%H"').trim()  
def hash = sh(returnStdout: true, script: 'git log -1 origin/master --pretty=format:"%H"').trim() 
if(lastMerge==hash){
    doTheJob()
}

如果有更好的解決方案,我很樂意聽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM