2016-08-11 51 views
1

我正在爲客戶端自動化設置git存儲庫。這涉及到在TFS 2015中設置構建模板定義。我選擇將這些模板的配置與其他許多構建/部署相關的文件一起存儲在單獨的存儲庫中(有數百個回購,並且默認情況下它們都具有相似的構建)。通過REST API在TFS 2015團隊服務構建中設置祕密變量

我使用的預置型TFS 2015年構建系統(非常類似於VSTS/VSO構建系統),和查詢API的各種事情。 Build definitionsBuild Definition Templates是我現在正在處理的問題,這是我的具體問題所在。

許多構建變量包含的內容我想保持私有API密鑰:

Secured Variable in TFS UI

查詢時(對於存儲生成定義或生成定義模板),TFS正確地返回任何設置爲「安全」的變量的空白字符串 - 但響應JSON不包含任何對「祕密」變量的引用。下面是JSON的摘錄時返回的我檢索生成定義(其同樣爲生成定義模板):

呼叫URI(在文檔中定義)

GET 的https:// {實例}/DefaultCollection /(項目)/ _的API /編譯/定義/ {} definitionId?API版本= {}版本[&修訂= {INT}]

摘錄

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

我希望有一個像「isSecret」或類似的屬性,但我找不到任何文檔或示例引用此。該文件也沒有提及,如果它不支持而不是,所以我很茫然。

如果我將該變量設置爲一個值(即,我使用構建定義模板創建新的構建定義),則UI中的「祕密」選項被禁用,並且該關鍵是可見的。你可能會爭辯說有人可能會進入用戶界面並手動將該變量標記爲祕密,但這是一個額外的步驟,可能會導致健忘。

這些祕密變量存儲在一個密碼安全的,我會提示運行腳本的人在運行時輸入它們(或者我會自動從安全的讀取 - 不知道)。但這並不重要。

任何人都可以告訴我如何通過API直接設置安全變量?

回答

1

我想通過在TFS UI中設置變量時進行一些調試/ HTTP流量監控來解決這個問題。基本上,我的猜測是正確的!

無論您如何設置構建定義模板或構建定義,TFS都不會通過REST API報告變量是祕密的。但是,如果您將模板存儲在別處(或者操縱從「獲取構建定義」或「獲取構建定義模板」REST API調用返回的JSON對象),則可以自行設置設置。上述

我的例子就變成:

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

保存該設置在通過REST API生成定義模板並不意味着變量將被標記爲祕密,如果你使用通過TFS UI模板。但是,如果通過腳本自動創建構建定義並設置屬性,則生成的構建定義會將該變量標記爲祕密。

真是太棒了!