Azure Pipeline error: template file not found in repository
Azure Pipeline error: template file not found in repository
我正在尝试在同一管道上使用 2 个存储库。一个存储库包含源代码,另一个存储库包含模板。
存储库源代码的 azure-pipeline.yml 如下所示:
pool: alm-aws-pool
resources:
repositories:
- repository: AzurePipelines
name: ALM/AzurePipelines
type: git
ref: master #branch name
steps:
- template: TG1_build&Nuget.yml@AzurePipelines
parameters:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
IsNugetPrerelaseVersion: true
模板 TG1_build&Nuget.yml 是:
steps:
- task: NuGetToolInstaller@1
displayName: 'Use NuGet 5.1.0'
inputs:
versionSpec: 4.0.0
- task: NuGetCommand@2
displayName: 'NuGet restore **/*.sln'
inputs:
vstsFeed: '****'
noCache: true
- task: sonarqube@4
displayName: 'Prepare analysis on SonarQube'
inputs:
SonarQube: 'SonarQube'
projectKey: '$(Build.Repository.Name)'
projectName: '$(Build.Repository.Name)'
- powershell: |
#The double dollar is intended for using the constant $true or $false
$isBeta=$$(IsNugetPrerelaseVersion)
if (-Not $isBeta) {
exit 0;
}
$workingDirectory = "$(System.DefaultWorkingDirectory)"
$filePattern = "*AssemblyInfo*"
$pattern = '^(?!//)(?=\[assembly: AssemblyVersion\("(.*)"\)\])'
Get-ChildItem -Path $workingDirectory -Recurse -Filter $filePattern | ForEach-Object {
$path = $_.FullName
Write-Host $path
(Get-Content $path) | ForEach-Object{
if($_ -match $pattern){
# We have found the matching line
# Edit the version number and put back.
$fileVersion = $matches[1]
$newVersion = "$fileVersion-beta"
'[assembly: AssemblyVersion("{0}")]{1}[assembly: AssemblyInformationalVersion("{2}")]' -f $fileVersion,"`r`n",$newVersion
} else {
# Output line as is
$_
}
} | Set-Content $path
}
$filePattern = "**.csproj*"
$pattern1 ="<Version>"
$pattern2 ="</Version>"
$pattern = '(?={0})' -f $pattern1
$empty = ""
Get-ChildItem -Path $workingDirectory -Recurse -Filter $filePattern | ForEach-Object {
$path = $_.FullName
Write-Host $path
(Get-Content $path) | ForEach-Object{
if($_ -match $pattern){
# We have found the matching line
# Edit the version number and put back.
$fileVersion = $_
$fileVersion = $fileVersion -replace $pattern1, $empty
$fileVersion = $fileVersion -replace $pattern2, $empty
$fileVersion = $fileVersion.Trim()
$newVersion = "$fileVersion-beta"
'<Version>{0}</Version>' -f $newVersion
} else {
# Output line as is
$_
}
} | Set-Content $path
}
displayName: 'Update Assembly Info for nuget generation'
- task: VSBuild@1
displayName: 'Build solution **\*.sln'
inputs:
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(BuildConfiguration)-binaries.zip" /p:RunCodeAnalaysis=true'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
clean: true
maximumCpuCount: true
msbuildArchitecture: x64
createLogFile: true
- task: NuGetCommand@2
displayName: 'NuGet pack'
inputs:
command: pack
packagesToPack: '$(SearchPatternToPack)'
packDestination: '$(Build.ArtifactStagingDirectory)/nugets'
includeReferencedProjects: true
当我尝试 运行 这个管道时,我发现了这个错误:
/azure-pipelines.yml: 在存储库 https://dev.azure.com/Fabrikam/ALM/_git/AzurePipelines b运行ch refs/heads/master 中找不到文件 /TG1_build&Nuget.yml 版本 d6d59eef922dac0324654b49a71037a504102ff4
有人可以帮助我们!
谢谢
您可以尝试使用 checkout 步骤从其他存储库中检出源代码并确保路径正确:
steps:
- checkout: AzurePipelines
path: 's'
- template: s/TG1_build&Nuget.yml
...
我创建了一个类似于您上面的测试 yaml 管道。我只能在以下情况下重现上述错误。
我引用了错误的资源库分支,其中不存在模板 yaml 文件。
模板yaml文件名输入错误,导致找不到模板yaml文件
所以请检查资源库master分支中是否存在模板yaml文件,并确保模板yaml文件名称正确。
我发现我需要在模板前加上 /
前缀,或者它是相对于源管道模板(这让我意识到了真正的问题),而不是存储库的根。
- job: foo
displayName: 'foo name'
steps:
- - template: azure-pipeline-templates/tests_integration.yml@self
+ - template: /azure-pipeline-templates/tests_integration.yml@self
错误:
/azure-pipelines/pipeline-tests-basic.yml: File /azure-pipelines/azure-pipeline-templates/tests_integration.yml not found in repository ..
模板存在于azure-pipeline-templates
,与azure-pipelines
同级
azure-pipelines
└ pipeline-tests-basic.yml
azure-pipeline-templates
└ tests_integration.yml
大概差异发生在将多个存储库指定为资源的管道之间。
好吧,这是一个愚蠢的问题,但它花了我几个小时....
- 检查目标文件是否有
yml
与 yaml
并确保您引用的是正确的文件!
这是实际存在的文件的变体,但我盯着它看了一会儿才“啊哈”
我正在尝试在同一管道上使用 2 个存储库。一个存储库包含源代码,另一个存储库包含模板。
存储库源代码的 azure-pipeline.yml 如下所示:
pool: alm-aws-pool
resources:
repositories:
- repository: AzurePipelines
name: ALM/AzurePipelines
type: git
ref: master #branch name
steps:
- template: TG1_build&Nuget.yml@AzurePipelines
parameters:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
IsNugetPrerelaseVersion: true
模板 TG1_build&Nuget.yml 是:
steps:
- task: NuGetToolInstaller@1
displayName: 'Use NuGet 5.1.0'
inputs:
versionSpec: 4.0.0
- task: NuGetCommand@2
displayName: 'NuGet restore **/*.sln'
inputs:
vstsFeed: '****'
noCache: true
- task: sonarqube@4
displayName: 'Prepare analysis on SonarQube'
inputs:
SonarQube: 'SonarQube'
projectKey: '$(Build.Repository.Name)'
projectName: '$(Build.Repository.Name)'
- powershell: |
#The double dollar is intended for using the constant $true or $false
$isBeta=$$(IsNugetPrerelaseVersion)
if (-Not $isBeta) {
exit 0;
}
$workingDirectory = "$(System.DefaultWorkingDirectory)"
$filePattern = "*AssemblyInfo*"
$pattern = '^(?!//)(?=\[assembly: AssemblyVersion\("(.*)"\)\])'
Get-ChildItem -Path $workingDirectory -Recurse -Filter $filePattern | ForEach-Object {
$path = $_.FullName
Write-Host $path
(Get-Content $path) | ForEach-Object{
if($_ -match $pattern){
# We have found the matching line
# Edit the version number and put back.
$fileVersion = $matches[1]
$newVersion = "$fileVersion-beta"
'[assembly: AssemblyVersion("{0}")]{1}[assembly: AssemblyInformationalVersion("{2}")]' -f $fileVersion,"`r`n",$newVersion
} else {
# Output line as is
$_
}
} | Set-Content $path
}
$filePattern = "**.csproj*"
$pattern1 ="<Version>"
$pattern2 ="</Version>"
$pattern = '(?={0})' -f $pattern1
$empty = ""
Get-ChildItem -Path $workingDirectory -Recurse -Filter $filePattern | ForEach-Object {
$path = $_.FullName
Write-Host $path
(Get-Content $path) | ForEach-Object{
if($_ -match $pattern){
# We have found the matching line
# Edit the version number and put back.
$fileVersion = $_
$fileVersion = $fileVersion -replace $pattern1, $empty
$fileVersion = $fileVersion -replace $pattern2, $empty
$fileVersion = $fileVersion.Trim()
$newVersion = "$fileVersion-beta"
'<Version>{0}</Version>' -f $newVersion
} else {
# Output line as is
$_
}
} | Set-Content $path
}
displayName: 'Update Assembly Info for nuget generation'
- task: VSBuild@1
displayName: 'Build solution **\*.sln'
inputs:
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(BuildConfiguration)-binaries.zip" /p:RunCodeAnalaysis=true'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
clean: true
maximumCpuCount: true
msbuildArchitecture: x64
createLogFile: true
- task: NuGetCommand@2
displayName: 'NuGet pack'
inputs:
command: pack
packagesToPack: '$(SearchPatternToPack)'
packDestination: '$(Build.ArtifactStagingDirectory)/nugets'
includeReferencedProjects: true
当我尝试 运行 这个管道时,我发现了这个错误: /azure-pipelines.yml: 在存储库 https://dev.azure.com/Fabrikam/ALM/_git/AzurePipelines b运行ch refs/heads/master 中找不到文件 /TG1_build&Nuget.yml 版本 d6d59eef922dac0324654b49a71037a504102ff4
有人可以帮助我们!
谢谢
您可以尝试使用 checkout 步骤从其他存储库中检出源代码并确保路径正确:
steps:
- checkout: AzurePipelines
path: 's'
- template: s/TG1_build&Nuget.yml
...
我创建了一个类似于您上面的测试 yaml 管道。我只能在以下情况下重现上述错误。
我引用了错误的资源库分支,其中不存在模板 yaml 文件。
模板yaml文件名输入错误,导致找不到模板yaml文件
所以请检查资源库master分支中是否存在模板yaml文件,并确保模板yaml文件名称正确。
我发现我需要在模板前加上 /
前缀,或者它是相对于源管道模板(这让我意识到了真正的问题),而不是存储库的根。
- job: foo
displayName: 'foo name'
steps:
- - template: azure-pipeline-templates/tests_integration.yml@self
+ - template: /azure-pipeline-templates/tests_integration.yml@self
错误:
/azure-pipelines/pipeline-tests-basic.yml: File /azure-pipelines/azure-pipeline-templates/tests_integration.yml not found in repository ..
模板存在于azure-pipeline-templates
,与azure-pipelines
azure-pipelines
└ pipeline-tests-basic.yml
azure-pipeline-templates
└ tests_integration.yml
大概差异发生在将多个存储库指定为资源的管道之间。
好吧,这是一个愚蠢的问题,但它花了我几个小时....
- 检查目标文件是否有
yml
与yaml
并确保您引用的是正确的文件!
这是实际存在的文件的变体,但我盯着它看了一会儿才“啊哈”