一千萬個為什麽

搜索


以下是我的要求,我會回顧如何實現它們:

  • Must build Java spring-boot apps
  • Artifacts must be released to artifactory repository
  • Docker image to be built directly relating to the artifact group/artifactId/version
  • Docker image to be deployed to AWS ACR
  • Container deployment via cloud formation
  • Maintain 2 branches in a git repo: dev and master. dev releases to our development environment and master is for prod (I have tried to explain that this approach made sense when code was app (php) but not when you have a release artifact)
  • All branches off dev must build and test independently but NOT release even snapshots (doesn't apply to master as no one should be working off master)
  • best part dev and prod builds must be done under entirely different AWS credentials and accounts into totally different VPCs

鑒於這些要求,我相信需要一個多配置管道 - 一個用於{prod/master}和{development/dev}安排,以成功捕獲證書和部署差異並將其指向不同的分支。我似乎無法做到的是獲取 dev 配置,以便從dev中構建分支 - 我沒有可以匹配的模式 - 分支不像 dev - 。*。 - 它們直接映射到Jira門票。

我甚至可以做這樣的事情嗎?我覺得這最後一部分是我的多重配置發生故障的地方。

轉載註明原文: Jenkins配置支持多配置多分支CI

一共有 3 個回答:

也可以創建多個jenkins作業,並通過從另一個作業調用作業來連接這些作業。我面臨的問題很多是工作流程不清楚,人們立即開始。

我總是主張從一份文件開始,這份文件解釋了目標和工作,以及它們如何相互關聯,創建一個繪圖並從小處著手。最終會有一個運作良好的管道。

我對AWS部分的兩分錢:

  • 如果您必須在AWS中使用不同的VPC和帳戶,建議您查看 AWS IAM 角色並為角色分配適當的策略;此外,確保這些角色與可以附加到EC2實例的 AWS EC2 實例配置文件關聯(如果它們用作構建代理)。這樣您就不必存儲AWS憑證,只需使用 AWS STS

  • 正如您剛才提到的有關 AWS ECR 的內容,讓我告訴您有關Docker Plugin的安裝信息 - 使用這些插件,Jenkinsfile可以變得非常簡潔,可以使用以下步驟進行編寫和維護:插件,包括構建圖像的任務,標記圖像並將圖像推送到註冊表。

  • 更好的是,您可以為每個服務/組件指定元數據YAML,以指定有關AWS ECR的詳細信息,並編寫Groovy腳本來檢測對YAML的更改,然後才能構建新版本的Docker映像。

您可以使用 Jenkinsfile 。對於上面列出的每種情況,您可以使用常規添加邏輯。

You'll want to use a multi-branch pipeline build for sure, and just write in conditions/switches to determine what you want to do based on the current branch. Jenkins provides a global environment variable for all builds: BRANCH_NAME

The job will run on any branch that contains the Jenkinsfile and you can write conditions in for steps if you want to include/exclude certain branches. You can use the when directive for full-step conditions: https://jenkins.io/doc/book/pipeline/syntax/#when

For handling credentials: https://jenkins.io/doc/book/pipeline/jenkinsfile/#handling-credentials