2016-08-11 1 views
1

Я занимаюсь автоматизацией настройки хранилищ git для клиента. Это связано с настройкой определений шаблонов сборки в TFS 2015. Я решил сохранить конфигурацию этих шаблонов в отдельном репозитории вместе со многими другими файлами сборки/развертывания (есть сотни репозиториев, и все они по умолчанию имеют похожие сборки).Настройка секретных переменных в TFS 2015 Team Services Сборка через REST API

Я использую новый на-прем TFS 2015 системы сборки (очень похож на/VSO системы сборки VSTS), и запрашивая API для всех видов вещей. Build definitions и Build Definition Templates - это то, с чем я работаю прямо сейчас, где и лежит моя конкретная проблема.

ряд переменных сборки содержат ключи API, которые я хотел бы сохранить в тайне:

Secured Variable in TFS UI

При запросе (для любой сохраненной сборки Определение или сборки Определение шаблона), TFS справедливо возвращает пустую строку для любых переменных, которые установлены как «защищенные», но ответ JSON не содержит ссылки на переменную, которая является «секретной». Вот выдержка из JSON вернулась, когда я извлечение сборки Определения (его же для сборки Определения шаблона):

Вызова Uri (определенного в документации)

GET https: // {экземпляр }/DefaultCollection/{проекта}/_ APIs/сборки/определения/{definitionId}? апи-версия = {версия} [& редакция = {INT}]

Отрывок

"variables": { 
    "system.debug": { 
     "value": "false", 
     "allowOverride": true 
    }, 
    "system.prefergit": { 
     "value": "true" 
    }, 
    "MySecureVariable": { 
     "value": "" 
    } 
} 

Я ожидаю, что там будет такое свойство, как «isSecret» или подобное, но я не могу найти никакой документации или примеров, ссылающихся на это. В документах также не упоминается, поддерживается ли не, поэтому я в недоумении.

Если я устанавливаю переменную в значение (т. Е. Я использую шаблон определения сборки для создания нового определения сборки), в пользовательском интерфейсе отключается «секретная» опция, и ключ виден. Вы можете утверждать, что кто-то может войти в пользовательский интерфейс и пометить переменную как секретную вручную, но это дополнительный шаг, который поддается забывчивости.

Эти секретные переменные хранятся в безопасном пароле, и я буду предлагать человеку, который запускает скрипты, вводить их во время выполнения (или я буду автоматизировать чтение из сейфа - пока не уверен). Впрочем, это не так.

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

ответ

1

Я понял это, выполнив мониторинг отладки/HTTP-трафика, установив переменные в пользовательском интерфейсе TFS. В принципе, моя догадка была правильной!

Независимо от того, как вы настраиваете шаблоны определения сборки или устанавливаете определения, TFS никогда не сообщает, что переменная является секретной через REST API. Тем не менее, если вы храните свои шаблоны в другом месте (или манипулируете объектом JSON, возвращенным из запроса Get Get Definition или API Get Rade API, вы можете сами установить этот параметр.

Мой пример выше становится:

"variables": { 
    "system.debug": { 
     "value": "false", 
     "allowOverride": true 
    }, 
    "system.prefergit": { 
     "value": "true" 
    }, 
    "MySecureVariable": { 
     "value": "", 
     "isSecret": "true" 
    } 
} 

Сохранение эту настройку в Сложение Определение шаблона через REST API не означает, что переменная будет помечена как секрет, если вы используете этот шаблон с помощью TFS UI. Однако, если вы автоматизируете создание определения сборки через скрипт и устанавливаете свойство, полученное в результате определение сборки помечает эту переменную как секретную.

Что за фаер!