Кажется, что соединение службы для задачи Kubectl извлекается во время компиляции перед выполнением задачи. Я создал переменную тестирования в разделе переменных конвейера выпуска и изменил значение переменной тестирования в задаче сценария, используя echo "##vso[task.setvariable..
. Я видел в журнале задач, что всегда выбиралось исходное значение для тестовой переменной.
См. Эту аналогичную проблему здесь.
Однако вы можете использовать rest api в качестве временного решения. См. Шаги ниже:
1. Добавьте второй этап в конвейер выпуска. Выберите триггер как Manual Only
. Переместите задачу Kubectl и связанные задачи на втором этапе (т.е. Kubetcl
stage на скриншоте ниже)
2. Определите переменную ServiceCon
в разделе Variables
. Выберите переменную Scope
на втором этапе (т.е.Kubetcl
). Проверить Settable at release time
3. Добавьте задачу сценария для вызова update освободить окружение rest api на первом этапе (т.е. SetServiceCon
этапе). См. Ниже встроенный сценарий PowerShell: переменной SC
присвоено имя подключения службы в предыдущей задаче.
$url = "https://vsrm.dev.azure.com/Org/Project/_apis/Release/releases/$(Release.ReleaseId)/environments/$($(Release.EnvironmentId)+1)?api-version=6.1-preview.7"
#override the variable ServiceCon by referencing to variable $(SC) from your previous task
$body = @{
status= "inProgress";
variables= @{ ServiceCon= @{value= $(SC)}}
}
Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $(System.AccessToken)"} -Method patch -Body (ConvertTo-Json $body) -ContentType "application/json"
Вышеупомянутый скрипт запустит второй этап (т.е. этап kubetcl) с обновленным именем подключения к службе.
4. Чтобы получить доступ к токену $(System.AccessToken)
на предыдущем этапе, вам необходимо перейти на страницу редактирования первого этапа и проверить параметр Allow scripts to access the OAuth token
См. Снимок экрана ниже.
5. Вам также необходимо allow
права Manage deployments
и edit release stage
для учетной записи службы сборки. См. Снимок экрана ниже.
На странице редактирования конвейера выпуска. Щелкните 3 точки в правом верхнем углу. И выберите Security
.
Allow
разрешения Manage deployments
и edit release stage
для учетной записи (ProjectName)build service (OrgName)
.
После выполнения вышеуказанных шагов и при срабатывании вашего релиза pieline сначала будет выполнен первый этап, и задача скрипта вызовет среду выпуска обновлений rest api. Затем будет запущен второй этап с обновленным именем подключения к сервису.
person
Levi Lu-MSFT
schedule
07.09.2020
SC
это имя или идентификатор службы? - person Shayki Abramczyk   schedule 06.09.2020$(SC)
- это имя переменной, которую я установил в поле для подключения службы. Это означает, что я назначил ему переменнуюSC
в задаче Bash после задачи конфигурации приложения с именем подключения службы и перед задачейkubectl
-login, которая использует $ (SC). - person Sven Malvik   schedule 06.09.2020id
вместоname
тоже не сработала. Я получил идентификатор из списка всех сервисных подключений с помощью dev.azure.com/ ‹ORGANIZATION› / ‹PROJECT› / _apis / - person Sven Malvik   schedule 06.09.2020