Azure DevOps - Pipelines checkout

3
我正在努力解决一个问题,即找不到适合我所遇到问题的正确文档。
目前,在我的项目中,我正在使用Azure DevOps管道来构建和部署一个简单的函数代码。我试图实现的是具有多个阶段执行具体任务的功能。
管道示例:
Stage 1: Validation of code (check style, guidelines, etc.)  
Stage 2: Tests
  - Job1: Unit Tests
  - Job2: Integration Tests
Stage 3: Deployment to the cloud
Stage 4: Function tests against the deployment done on Stage 3.

问题
你可能知道,当你进行不同的阶段时,流水线会运行在不同的从机上,这意味着会在所有从机上应用git checkout。我想要做的是避免这些checkout,并且只在第一个阶段进行一次单独的checkout,然后在其余阶段使用第一个阶段的checkout(代码是相同的..)
你有任何线索吗?我知道我可以在一个阶段中完成所有步骤/作业,但我想将其拆分为不同的阶段,以确保每个阶段都有自己的责任。
提前感谢你的时间。
2个回答

0

这取决于您的代理在哪里运行,如果代理是自托管的,您当然可以使用一个公共位置并避免检查自存储库。对于托管代理,我认为您无法使用 Azure 管道中的阶段概念来实现此操作,阶段具有特定的语义,不符合您预期的结果 AFAIK。还有其他方法可以分担责任而不坚持使用 Azure 管道阶段。这取决于您希望通过拆分职责实现什么;

如果您只想在逻辑上划分管道,则有替代方案,例如模板,它们将允许您将分区分成可单独维护的文件,如果这能满足您对职责分离的要求。甚至可以将它们分开放在不同的存储库中,就像下面的例子一样,当然它们也可以放在同一个存储库中。

我使用的一个示例是使用常见存储库缓存和恢复 C++ 项目的依赖项。

- checkout: DevOpsScripts

    - template: up-restore.yml@DevOpsScripts
      parameters:
        CachePath: $(updepsCache)
        CacheKeyPrefix: 'updeps | "$(Agent.OS)"'
        DependenciesManifest: $(updepsPrefix)$(osSuffix).json

0

如上所述,为了实现这一点,您应该有一个自定义代理,其中您可以拥有一个文件夹来存储代码,例如C:\code。然后,您可以在此代码路径上检出存储库,并在接下来的阶段禁用检出。

您可以在阶段内部的作业上禁用checkout

  - job: DeployCode
    displayName: Deploy code
    steps:
    - checkout: none
    - script: echo deploying code
      displayName: deploy code

disable checkout

为了在您的自托管代理上检出特定目录,您应该:

- checkout: self
  clean: true
  path: C:\code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接