0

我们有一个单独的源代码仓库,如果下载的话,大小约为 2.8GB。我们有 4 个自托管代理和 100 多个构建管道。这样,下载为每个构建/代理编码的整个源代码是不可行的。

我采用的方法是禁用这些管道的签出,然后运行命令行脚本来执行 Git 稀疏签出。然而,这需要大约 15 分钟才能获得价值约 100MB 的源代码。

我们正在使用自托管 Linux 代理。

        steps:
          - checkout: none
          - task: CmdLine@2
            displayName: "Project Specific Checkout"
            inputs:
              script: |
                cd $(Build.SourcesDirectory)
                git init

                git config --global user.email ""
                git config --global user.name ""
                git config --global core.sparsecheckout true

                echo STARS/Source/A/ >> .git/info/sparse-checkout
                echo STARS/Source/B/ >> .git/info/sparse-checkout
                echo STARS/Source/C/ >> .git/info/sparse-checkout

                git remote rm origin
                git remote add origin https://service:$(Service.Account.Personal.Access.Token)@dev.azure.com/Organization/Project/_git/STARS
                git reset --hard
                git pull origin $(Build.SourceBranch)

我在这里做错了什么,导致提取这些数据需要很长时间。

4

1 回答 1

0

1.由于你使用的是自托管代理,你可以到代理机器上,手动运行git命令,看看能不能得到同样的性能。

2.将变量设置system.debugtrue, 以检查哪个命令花费更多时间。

3.代替Git Sparse checkout,您可以pathcheckout步骤中指定:

steps:
- checkout: self | none | repository name # self represents the repo where the initial Pipelines YAML file was found
  clean: boolean  # if true, run `execute git clean -ffdx && git reset --hard HEAD` before fetching
  fetchDepth: number  # the depth of commits to ask Git to fetch; defaults to no limit
  lfs: boolean  # whether to download Git-LFS files; defaults to false
  submodules: true | recursive  # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules; defaults to not checking out submodules
  path: string  # path to check out source code, relative to the agent's build directory (e.g. \_work\1); defaults to a directory called `s`
  persistCredentials: boolean  # if 'true', leave the OAuth token in the Git config after the initial fetch; defaults to false

https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#checkout

4.由于您在自托管代理上运行管道,默认情况下,在两次连续运行之间不会清理任何子目录。因此,您可以进行增量构建和部署,前提是实施任务以利用它。因此,您可以将Clean选项设置为false

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

于 2021-04-19T03:04:07.153 回答