TL; DR: . Поиск и замена заполнителей в текстовом файле на расшифрованные значения секретов в группе переменных.

Я хотел бы использовать сценарий PowerShell для получения группы переменных в конвейере выпуска, а затем перебирать список, выполняя поиск и замену выпускаемого файла.

Переменные в списке переменных являются секретами , поэтому я хочу перезаписать заполнители в файле расшифрованным значением переменных.

Значения переменных зависят от среды, поэтому я не хочу предоставлять значения во время сборки и не хочу включать расшифрованные значения в сохраненный артефакт.

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

2
Matt W 30 Май 2019 в 13:29

2 ответа

Лучший ответ

Итак, я обнаружил, что, пока у меня есть токен Base64, настроенный для групп переменных (нажмите« Показать все области »при создании нового PAT), затем я могу вызвать GET https://dev.azure.com/{organization}/{project}/_apis/distributedtask/variablegroups/{groupId}?api-version=5.1-preview.1 для < a href = "https://docs.microsoft.com/en-gb/rest/api/azure/devops/distributedtask/variablegroups/get?view=azure-devops-rest-5.1" rel = "nofollow noreferrer"> получить группа переменных мне нужна.

Выше, однако, не вернет значение для секретов, хотя есть взломать / обойти это (включая несколько этапов конвейера).

Рекомендуется создать хранилище ключей в Azure и выполнять обработку либо в Powershell, либо в коде.

Поскольку мне нужно, чтобы дешифрованные значения ключей передавались в мое приложение через повторяющиеся операции поиска и замены, я реализовал скрипт Powershell в одном шаге конвейера Release и использую выходные данные на следующем шаге.

1
Matt W 5 Июн 2019 в 13:49

Задача Tokenization из Visual Studio Marketplace хорошо справляется с этой задачей. Вам нужно будет установить его в своей организации DevOps Azure, он доступен по адресу https: //marketplace.visualstudio.com/items?itemName=TotalALM.totalalm-tokenization

По умолчанию задача Tokenization использует двойные подчеркивания для идентификации заполнителей. Он заменит любой текст, который соответствует имени переменной в определении выпуска, если он окружен двойным подчеркиванием.

Поэтому, если вы хотите записать значение переменной с именем MySecretVariable в ваш файл, вам нужно добавить заполнитель, такой как __MySecretVariable__, в тот файл, где вы хотите, чтобы это значение было записано.

Задача Tokenization записывает любые зашифрованные значения в файл в виде простого текста, но в журналах выпуска они будут запутаны.

Если вы храните свои переменные в группе переменных, просто свяжите это с определением выпуска и установите область для соответствующей среды.

1
Nick Graham 30 Май 2019 в 21:22