簡體   English   中英

AWS CodePipeline 能否跟蹤多個功能分支並在每個分支上運行測試?

[英]Can AWS CodePipeline track multiple feature branches and run tests on each?

借助 Bitbucket 和 Bamboo,我能夠讓 Bamboo 跟蹤每個功能分支並對每個分支運行測試,以便在拉取請求時,我能夠查看該分支是否通過了單元測試。

使用AWS CodePipeline時,我無法確定我是否能夠跟蹤每個功能分支並在合並之前對它們運行測試。

這可能嗎? 如果是這樣,請指出文檔。

使用Bitbucket和Bamboo,我可以讓Bamboo跟蹤每個功能分支並在每個功能分支上運行測試,以便在拉取請求時,我可以查看該分支是否通過了其單元測試。

借助AWS CodePipeline ,我無法確定在合並之前是否能夠跟蹤每個功能分支並對其進行測試。

這可能嗎? 如果是這樣,請指出我的文檔。

我正在尋找解決這個問題的方法。 最終我決定使用 CodeBuild,它可以從分支正則表達式觸發,通過將存檔推送到特定的 S3 鍵來開始管道。 就我而言,我還讓 CodeBuild 執行我的完整構建/測試過程,但您也可以將 CodeBuild 配置為僅拉取代碼並將其推送到觸發 CodePipeline 的 S3 密鑰。

這是匹配 2 個分支的示例 CodeBuild 配置的一部分: 顯示匹配 2 個分支的 <code>Branch filter</code> 的示例

然后我將 CodeBuild 工件設置為轉到單個存儲桶中的單個鍵。

然后我設置了一個 CodePipeline,其 Amazon S3 源指向相同的密鑰/存儲桶。

CodePipeline 不是適合您的工具。 創建一個單獨的、獨立的 CodeBuild 項目。 它將與 Travis 等其他 3rd 方 CI 服務非常相似。

確保選擇“每次將代碼更改推送到此存儲庫時重新構建”源設置。 這將觸發從推送到任何分支以及其他網絡鈎子事件的構建,例如。 創建了 PR。 您還可以創建過濾器來管理它們。

您可以通過多種方式將此“CI 階段”連接到持續交付管道,這就是 CodePipeline 的用途:

  1. 最簡單的方法是使用 CodeBuild 作為將更改推送到管道源分支(通常是 master)的門。
  2. 您還可以將在 CodeBuild 中創建的工件推送到 ECR 或 S3,並從這些事件觸發管道。
  3. 如果您想變得復雜,請使用其他一些jiggery pokery,例如。 SQS 和 Lambda。

我也有同樣的困惑,因為 CodeBuild 和 CodePipeline 是緊密相連的,但也是獨立的工具。 CodePipeline 確實使用 CodeBuild,但每個都有自己的 Git 連接器,其工作方式不同。

進一步審查表明,使用 Cloudformation,您可以選擇CodePipeline 跟蹤的分支,

AWS CodeCommit ( CodeCommit )

  • PollForSourceChanges¹(可選)
  • 存儲庫名稱(必填)
  • 分支名稱(必填)

您可以看到完整模板的示例,但 CodePipeline 階段看起來像,

Name: CheckoutSourceTemplate
ActionTypeId:
  Category: Source
  Owner: AWS
  Version: 1
  Provider: CodeCommit
Configuration:
  PollForSourceChanges: True
  RepositoryName: !GetAtt [PipelineRepo, Name]
  BranchName: master
OutputArtifacts:
  - Name: TemplateSource
RunOrder: 1

隨着CodeCommit回購的,你可以創建觸發器,可以使用這些觸發器來啟動一個lambda函數

您可以通過在 Lambda 控制台中創建觸發器作為函數的一部分來配置 Lambda 函數。 這是最簡單的方法,因為在 Lambda 控制台中創建的觸發器會自動包含 AWS CodeCommit 調用 Lambda 函數所需的權限。 如果您在 AWS CodeCommit 中創建觸發器,則必須包含一個策略以允許 AWS CodeCommit 調用該函數。 有關更多信息,請參閱為現有 Lambda 函數創建觸發器示例 2:為 AWS Lambda 集成創建策略

所以可能會發生的是設置一個像上面一樣的 CloudFormation 模板來跟蹤主分支。 然后讓 CodeCommit 在存儲庫更改時觸發並調用 Lambda 函數,該函數使用 Boto3 到get_pipeline來檢索主分支管道。

然后使用update_pipelinecreate_pipeline將一個階段添加到現有的主分支管道或創建一個全新的管道來跟蹤所需的其他分支。

這樣,CodePipeline 就可以有用的方式跟蹤功能分支。

多個代碼構建項目來構建多個分支,將您的工件放到 s3 並從那里獲取代碼管道。

我想要實現的是:在同一個 codebuild 項目下簽出不同的分支,以便能夠進行差異檢查並為 sitecore 項目生成包。 即 release\\branch <=> master => 然后只生成最新項目的包,release\\branch 項目,然后是 Zip。

我已經通過創建臨時管道實現了您想做的事情,我有一個代碼構建,它在 repo 上查找不是主要分支並且在 PR 上觸發的分支。

當該代碼構建運行時,它提取分支名稱,然后使用它現在知道的分支動態創建一個全新的代碼管道,這是通過 terraform 完成的。當更改合並到 master 時,我然后銷毀臨時環境和臨時管道。

我想不出更簡潔的解決方案來創建多分支管道。

或者,可以做的是有一個專用分支來觸發管道(例如:管道分支)。 一旦你想從一個分支測試代碼,你可以將管道分支的引用更改為你的自定義分支(例如:feature-branch),這樣管道分支將基本上“指向”自定義分支的最新提交並將觸發代碼管道執行。

我們還可以做的是,通過更進一步,我們可以創建一個自定義 GitHub 操作,它將觸發 Github 內的上述分支引用更改,以根據開發人員的需要完全自動化管道觸發器。

暫無
暫無

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

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