簡體   English   中英

如何在 azure devops YAML 管道中將單個代理用於多個作業/階段

[英]How to use a single agent for multiple jobs/stages in azure devops YAML pipeline

我正在處理 Azure DevOps YAML 管道,我不確定我們是否可以在整個管道中使用單個代理。 我有多個作業/階段——構建、部署、部署后,我想將其分配給單個代理,因為它使用相同的工件。 有沒有辦法通過管道分配單個代理。

提前致謝。

是的,您可以在 YAML 上定義特定代理。

例如:池:名稱:AgentPoolName 要求:- agent.name -equals AgentName

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/demands?view=azure-devops&tabs=yaml

我不希望代理每次都為新工作做結帳操作

使用 checkout 關鍵字來配置或禁止此行為。

steps:
- checkout: none

詳細可以參考這個官方文檔

如果您不能像@Savio Moreira 建議的那樣使用特定代理,我發現的唯一選擇是重復一些步驟。

在我的情況下,有一個類似的管道,有 2 個階段:

  • 構建(驗證 PR)
    • Visual Studio 構建
    • Visual Studio 測試
    • VS測試
  • 發布(合並到master后發布工件)
    • Visual Studio 構建
    • 拷貝文件
    • 發布構建工件

僅當使用 YAML 階段和啟用分支策略中的條件創建 PR 時,才會觸發構建部分。 Publish 部分僅在合並到 master 時觸發。

需要重復一些步驟但執行是唯一的,這有點煩人,並且使用相同的管道,我可以在合並之前執行驗證,然后在代碼進入 master 后創建工件。

結帳選項無濟於事,因為在我的情況下,每個階段都在完全不同的容器上執行。

是的,您需要做的就是將您第一份工作的代理名稱存儲在一個變量中,然后對於您需要的任何其他工作,您需要詢問同一個代理。 它是這樣完成的——

 jobs:
- job: A
  steps:
  - bash: |
     echo "##vso[task.setvariable variable=AgentName;isoutput=true]$(Agent.Name)"
    name: passOutput
- job: B
  dependsOn: A
  variables:
    AgentName: $[ dependencies.A.outputs['passOutput.AgentName'] ]  
  pool:
    name: pool1
    demands: Agent.Name -equals $(Agent.Name)   
  steps:
  - bash: |
     echo $(AgentName)

暫無
暫無

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

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