Передать параметры в конвейер сборки devops из API

У меня проблемы с пониманием того, что мне нужно сделать... но У меня есть конвейер сборки... ниже мои базовые скрипты для тестирования.
Я хочу иметь возможность добавлять/обновлять параметры через API и PowerShell. Я не уверен, что это лучший способ добиться этого, но, похоже, он работает хорошо, когда я вручную добавляю свои параметры. Когда я передаю параметр, он не сохраняется. Буду признателен за любую помощь... даже если я отправлю свой запрос где-нибудь еще. Спасибо

  1. сценарий конвейера

     variables:
        patchgroup: test
    
     jobs: 
     - template: patch-template.yml  
    
       parameters:    
         patchgroup: $(patchgroup)    
         sqlservers:      
           - sqlserver: name: ""
    
  2. файл шаблона патча

    parameters:
      sqlservers: {}
      patchgroup: ''
    
    jobs:
    - ${{ each sqlserver in parameters.sqlservers }}:
      - template: patch-tasks.yml
        parameters:
          sqlserver: ${{ sqlserver.name }}
          patchgroup: ${{ parameters.patchgroup }}
    
  3. исправление задач параметры: sqlсервер: '' группа патчей: ''

     jobs:
       - job: 
         displayName: '${{ parameters.sqlserver }}--set-up-stuff'
         steps:
         - task: PowerShell@2
           inputs:
             targetType: 'inline'
             script: |
               Write-Host "Patchgroup '${{ parameters.patchgroup }}'"
               Write-Host "sqlserver '${{ parameters.sqlserver }}'"
    
  4. сценарий powershell

     $defurl = "$collectionurl/$project/_apis/build/builds?api-version=5.0"
     $json = '{"variables":  "{\"patchgroup\":  \"xyxyxyxyx\"}","definition":  {"id":  "194"}}'
     #$json = '{"parameters":"{\"sqlservers\": \"\"{\"sqlserver\":  \"servername\"}\"\"}","definition":{"id":"194"}}'
     $updatedef = Invoke-RestMethod -Uri $defurl -Method POST -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
    

Можете ли вы опубликовать код, где вы пытаетесь «передать параметры»? Из того, что вы опубликовали, я не понимаю, что вы делаете, чтобы определить, где что-то идет не так.

Jim 15.12.2020 03:15

Извините, я попробовал несколько вещей и изменил их на "переменные" $json = '{"parameters": "{\"patchgroup\": \"xyxyxyxyx\"}","definition": {"id": " 194"}}'

Kez 15.12.2020 07:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
1 844
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Согласно вашему коду, я провел несколько тестов.

Я заметил, что значение вашего параметра не устанавливается при запуске конвейера, но должно быть напрямую жестко закодировано в файле Yaml.

Поэтому, когда вы запускаете конвейер, вы не можете передавать параметры в исходный код yaml через Rest API.

Чтобы решить эту проблему, вы можете попробовать использовать параметр для передачи значения параметра.

Обновлять:

Вы можете проверить мой новый пример:

patch-tasks.yml

 jobs:
   - job: 
     displayName: '${{ parameters.sqlserver }}--set-up-stuff'
     steps:
     - task: PowerShell@2
       inputs:
         targetType: 'inline'
         script: |
           Write-Host "Patchgroup '${{ parameters.patchgroup }}'"
           Write-Host "sqlserver '${{ parameters.sqlserver }}'"

патч-template.yml

parameters:
- name: sqlservers 
  type: object
  default: [] 

- name: patchgroup 
  type: string
  default: ''


jobs:
- ${{ each sqlserver in parameters.sqlservers }}:
  - template: patch-tasks.yml
    parameters:
      sqlserver: ${{ sqlserver }}
      patchgroup: ${{ parameters.patchgroup }}

сценарий конвейера

trigger: none

parameters:
- name: InstanceArgs 
  type: object
  default: [] 
    
variables:
    patchgroup: test
    


jobs: 
 - template: patch-template.yml  

   parameters:    
     patchgroup: $(patchgroup)    
     sqlservers:  ${{ parameters.InstanceArgs }} 
  

Когда вы запускаете конвейер, вы можете увидеть поле ввода.

В этом случае вы можете использовать Rest API для передачи значений параметров при запуске конвейера. Вы можете использовать этот Rest API: Runs — Run Pipeline

Пример сценария PowerShell:

$token = "PAT"

$url = "https://dev.azure.com/{OrganizationNmae}/{ProjectName}/_apis/pipelines/{PipelineId}/runs?api-version=5.1-preview"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$JSON = @'
{
  


  "resources": {
    "repositories": {
      "self": {
        "refName": "refs/heads/BranchName"
      }
    }
  },
  "templateParameters": {
    "InstanceArgs":"[1,2,3]"
   },



}
'@

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json

Спасибо, я попробую. Проблема, которую я вижу в этом, заключается в том, что я не буду знать, сколько я хотел бы передать ... это может быть 1 или более 5. Возможно, мне придется пересмотреть этот код и попытаться ввести цикл.

Kez 16.12.2020 06:32

Привет @Kez. Я также рассматривал эту ситуацию, поэтому дополнительно оптимизировал код. Пожалуйста, проверьте мое обновление. Я устанавливаю параметры как тип объекта. затем вы можете ввести любое количество параметров. Это похоже на петлю. Если это может удовлетворить ваши требования, вы можете рассмотреть возможность принятия его в качестве ответа. Спасибо

Kevin Lu-MSFT 16.12.2020 07:19

Привет @Kez. Не могли бы вы проверить, соответствует ли обновленный ответ вашим требованиям. Не стесняйтесь, дайте мне знать, если ответ может помочь вам.

Kevin Lu-MSFT 18.12.2020 10:03

Привет, Кевин. этот ответ великолепен .. спасибо ... и он определенно был бы победителем, если бы я мог заставить его работать только из API. Если я урежу код, он запустится (т. е. только azure-pipelines.yml и удалит код шаблона), но в противном случае я не могу запустить его с помощью API. Я пытался выяснить, какая часть кода вызывает проблему, но безуспешно.

Kez 21.12.2020 03:27

Привет @Kez. Не могли бы вы поделиться некоторой информацией о сообщении об ошибке и вашем образце? Тогда я помогу вам решить этот вопрос. Вы используете образец в ответе?

Kevin Lu-MSFT 21.12.2020 03:28

извинения. не использовал часть вашего кода, как вы предложили. это прекрасно работает. спасибо

Kez 21.12.2020 03:37

Привет, Кевин. Раньше я никогда не использовал этот вариант совместной работы (поэтому еще не знаю протокола), и поскольку вы знакомы с тем, чего я пытаюсь достичь. Если это лучше, я регистрирую новый вопрос, я тоже счастлив. Когда я запускаю свои задачи, они запускаются не в том порядке, в котором они настроены ... Из-за этого я сейчас пытаюсь использовать параметр dependOn, и он не работает с параметром. Есть ли у вас какие-либо подсказки... то есть: использование с dependOn: - '${{parameters.sqlserver }} --set-up-stuff

Kez 21.12.2020 11:16

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