#azure #azure-devops #azure-pipelines #devops
#azure #azure-devops #azure-конвейеры #devops — разработка #devops
Вопрос:
У меня есть проект с несколькими репозиториями, и я хотел бы использовать определенную ветку для проверки repoB, которая соответствует целевой ветке PR
name: My nice pipeline
resources:
repositories:
- repository: RepoB
type: git
name: RepoB
# ref: ${{ replace($(System.PullRequest.TargetBranch), "refs/heads/", "")}} <<<< here is the issue
И проблема в том, что если я использую только plane $ (System.Запрос на вывод.TargetBranch) ввод принимается, но способ ref: работает, он будет добавлен в refs/heads/{{независимо от того, что здесь было введено}}, поэтому в итоге у меня будут ссылки / heads / refs / heads / target-branch . В качестве решения я могу использовать replace, но да, спасибо, это не так…
Есть идеи, как я могу получить только имя целевой ветки без префикса?
Ответ №1:
Вы не можете использовать System.PullRequest.TargetBranch
выражение в шаблоне (которое есть {{}}
). Вы отметили его здесь
И я не могу найти его на данный момент, но, насколько я помню, вы не можете использовать выражение шаблона в ресурсе репозитория.
К сожалению, это невозможно. Здесь вы не можете использовать выражение.
И если вы попытаетесь использовать этот синтаксис ref:$(System.PullRequest.TargetBranch)
, вы получите
/ azure-pipelines-11.yml: не удалось получить последнюю исходную версию для репозитория kmadof / devops-templates, размещенного на https://github.com / используя ref refs/heads/$(System.Запрос на вывод.TargetBranch). GitHub сообщил об ошибке: «Для SHA: refs / heads / $(System. Коммит не найден.Запрос на вывод.TargetBranch)»
Комментарии:
1. Итак, как мне удалить ненужные ссылки / heads/ из $(System. Запрос на вывод. TargetBranch) есть ли способ сделать это вообще?
2. Я боюсь, что вы не можете параметризовать ресурс репозитория.
Ответ №2:
У меня была та же проблема, что и у вас, когда я хотел создать тег в ветке и конкретную фиксацию в моем конвейере. Лучшее решение, которое я нашел, — это просто заставить моего агента выполнять все части, которые я обычно выполняю, и поместить его в шаблон: p вот как я это решил.
steps:
- checkout: none
clean: True
- task: PowerShell@2
displayName: Remove refs/heads from branch path and set pipeline variable
inputs:
targetType: 'inline'
script: |
$branchSourcePath = "$(Build.SourceBranch)" -replace "refs/heads/",""
Write-Host "##vso[task.setvariable variable=BRANCH_PATH;]$branchSourcePath"
Write-Host "Setting pipeline variable BRANCH_PATH to $branchSourcePath"
- task: PowerShell@2
displayName: Create temp folder
inputs:
targetType: 'inline'
script: 'New-Item -Path "$(Pipeline.Workspace)temp" -ItemType Directory'
- task: PowerShell@2
displayName: Init git repo
inputs:
targetType: 'inline'
script: 'git init'
workingDirectory: '$(Pipeline.Workspace)temp'
- task: PowerShell@2
displayName: Git remote add
inputs:
targetType: 'inline'
script: git remote add $(Build.Repository.Name) https://$(git-accesstoken)@{azure-repo-path}/_git/$(Build.Repository.Name)
workingDirectory: '$(Pipeline.Workspace)temp'
- task: PowerShell@2
displayName: Fetch
inputs:
targetType: 'inline'
script: 'git fetch $(Build.Repository.Name) $(BRANCH_PATH)'
workingDirectory: '$(Pipeline.Workspace)temp'
- task: PowerShell@2
displayName: Checkout commit
inputs:
targetType: 'inline'
script: |
Write-Host "Checking out commit $(Build.SourceVersion) n"
git checkout -b $(BRANCH_PATH) $(Build.SourceVersion)
workingDirectory: '$(Pipeline.Workspace)temp'
- task: PowerShell@2
displayName: Set user email
inputs:
targetType: 'inline'
script: git config --global user.email "$(Build.RequestedForEmail)"
workingDirectory: '$(Pipeline.Workspace)temp'
- task: PowerShell@2
displayName: Set user name
inputs:
targetType: 'inline'
script: git config --global user.name "$(Build.RequestedFor)"
workingDirectory: '$(Pipeline.Workspace)temp'
- task: PowerShell@2
displayName: Create tag
inputs:
targetType: 'inline'
script: 'git tag -a {tag-name} $(Build.SourceVersion) -m "{tag-description}"'
workingDirectory: '$(Pipeline.Workspace)temp'
- task: PowerShell@2
displayName: 'Push tag'
inputs:
targetType: 'inline'
script: 'git push {repo-name} {tag-name}'
workingDirectory: '$(Pipeline.Workspace)temp'
- task: DeleteFiles@1
displayName: Delete temp folder
inputs:
SourceFolder: '$(Pipeline.Workspace)'
Contents: 'temp'