Проверка успешности слияния запроса на слияние с веткой разработки перед выполнением PR в ветке выпуска.

Пожалуйста, помогите мне узнать, как я могу внедрить решение в Azure Devops через Powershell или Api, чтобы проверить успешность слияния запроса на вытягивание с веткой разработки, прежде чем сделать PR в ветке выпуска. Когда разработчик попытается сделать запрос на слияние в ветке релиза... необходимо проверить наличие PR в ветке Develop... в противном случае PR будет отклонен.

После некоторых исследований я нашел эти решения, но не могу узнать шаги: -Проверка сборки -Статус проверки -Задачи Powershell Любое подробное предложение?

Привет, Anwar31dz, я изменил свой ответ с демонстрацией для вашего сценария, вы можете проверить локально, чтобы увидеть, может ли это помочь

Ceeno Qi-MSFT 21.12.2022 07:48
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
1
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Обновлено 25 ноября

Во время моего теста у меня есть обходной путь для вашего сценария.

Через проверку сборки в политике репо.

Вы можете создать конвейер powershell для запуска rest API для запроса истории completed запросов на вытягивание от Source Branch до Target Branche.

# Define organization base url, PAT and API version variables
$orgUrl = "https://dev.azure.com/{org}/{project}"
$pat = "{pat}"
$queryString = "searchCriteria.sourceRefName=refs/heads/{sourceBranche}&searchCriteria.status=completed&api-version=6.0"

# Create header with PAT
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($pat)"))
$header = @{authorization = "Basic $token"}
# Get the list of all projects in the organization
$projectsUrl = "$orgUrl/_apis/git/repositories/{repoID}/pullrequests?$queryString"
$number = Invoke-RestMethod -Uri $projectsUrl -Method Get -ContentType "application/json" -Headers $header | ConvertTo-Json | ConvertFrom-Json | Select-Object -ExpandProperty count

write-host $number

if ($number -gt 0) {
    Write-Host "Check Succeeded"
}
else {
    Write-Host ("Check Failed")
    exit 1
}

Этот оставшийся API вернет результат, как показано ниже.

И сценарий оценит, превышает ли счетчик значение 0, а затем завершит проверку, в противном случае проверка завершится неудачно.

Ответ принят как подходящий

Изучив и протестировав более одного решения, я поделюсь с вами лучшим из них, который соответствует моим потребностям: В этом примере

  • Исходная ветвь = нестабильная
  • Целевая ветвь = Разработка

Запрос: когда я делаю PR в ветке Develop, скрипт Powershell проверяет, была ли последняя фиксация в этой ветке первой зафиксирована в нестабильной ветке => если это так, сборка продолжается, в противном случае сборка останавливается.

$tfsUrl = "$tfsBaseUrl/_apis"
$tfsFullUrl = "$tfsBaseUrl/_apis/git/repositories"

$strAdmAuth = ":$tfsToken"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($strAdmAuth)
$base64 = [System.Convert]::ToBase64String($bytes)
$basicAuthValue = "Basic $base64"
$headers = @{ Authorization = $basicAuthValue }

############# Variables ############################

$reponame = $env:repositoryName
Write-Host "Repository name : $reponame"
$repoID = $env:repositoryID
Write-Host "Repository ID : $repoID"
$SourceBranch = $env:SourceBranch
Write-host "Source branch : $SourceBranch"
$pullRequestTargetBranch = $env:PRTargetBranch
Write-host "Pull request Target branch : $pullRequestTargetBranch"
$SourceBranch = $SourceBranch.Substring(10,($SourceBranch.Length-10))
$lastindexof = $sourceBranch.LastIndexOf("/")
 
$pullrequestID = $SourceBranch.Substring(0,($lastindexof))

$FullUri = "$tfsFullUrl/"+"$repoID"+'/pullrequests/'+"$pullrequestID"+'?api-version=6.0'


$SourceBranchName = (Invoke-RestMethod -Uri $FullUri -Method get -Headers $headers).sourceRefName

$indexof = $SourceBranchName.substring(5,($SourceBranchName.Length-5)).IndexOf("/")

$BranchFull = $SourceBranchName.Substring(6+$indexof,($SourceBranchName.Length-(6+$indexof)))


Write-host "$BranchFull"
$CommitExist = $false
$topCommit = "$"+"top=1"
$branchUnstable= "unstable"


Function Write-ErrorMessage
{
    [CmdletBinding(DefaultParameterSetName='ErrorMessage')]
      param
      (
           [Parameter(Position=0,ParameterSetName='ErrorMessage',ValueFromPipeline,Mandatory)][string]$errorMessage
           ,[Parameter(ParameterSetName='ErrorRecord',ValueFromPipeline)][System.Management.Automation.ErrorRecord]$errorRecord
           ,[Parameter(ParameterSetName='Exception',ValueFromPipeline)][Exception]$exception
      )

      switch($PsCmdlet.ParameterSetName)
      {
        'ErrorMessage'
        {
            $err = $errorMessage
        }
        'ErrorRecord'
        {
            $errorMessage = @($error)[0]
            $err = $errorRecord
        }
        'Exception'
        {
            $errorMessage = $exception.Message
            $err = $exception
        }
      }

    Write-Error -Message $err -ErrorAction SilentlyContinue
    $Host.UI.WriteErrorLine($errorMessage)
};

function encodeBranchName([string]$branchName)
{
    $branchName.Replace('#', '%23').Replace('+', '%2B').Replace('&', '%26')
}
 

###################################### All commits of unstable ###################################

 $commitUnstableURI = "$tfsFullUrl/${repoName}/commits?searchCriteria.itemVersion.version=${branchUnstable}&api-version=5.1"

 $listCommitUnstable = Invoke-RestMethod -Uri $commitUnstableURI -Method GET -ContentType "application/json" -Headers $headers

 $CommitunstableID = $listCommitUnstable.value.commitId


 ############################# Last commit of BranchFilter on Develop ###########################

 
 $branchNameEncoded = encodeBranchName $branchFull
 $branchFullversion= "version=$branchNameEncoded"
 
 $lastCommitURI = "$tfsFullUrl/${repoName}/commits?searchCriteria.itemVersion.$branchFullversion&searchCriteria.$topCommit&api-version=5.1"
 try
    {
        $lastCommit = Invoke-RestMethod -Uri $lastCommitURI -Method GET -ContentType "application/json; charset=utf-8" -Headers $headers
        write-host "Last commit : $LastCommit"
    }
    catch
    {
        Write-Error "No Commit exists for repo : $branchfull"
        Write-Error "[ERROR] $($_.Exception.Message)"
        exit 1
    }

    $branchLastCommitId = $lastCommit.value.commitId
    write-host "Last commit of branch : $branchLastCommitId"
 
 
  Foreach ($i in $CommitUnstableID) 
  {
          if ($i -eq $branchLastCommitId) 
          {
            $CommitExist = $true
            Write-Host "The last commit was deployed on Branch Unstable" 
          }
         
 }

 if ($CommitExist -eq $false)
 {
    #Write-Error "/!\ Commit does not exists on 'unstable' branch /!\"
    Write-ErrorMessage "/!\ Commit does not exists on 'unstable' branch /!\"
 }


Другие вопросы по теме