DTR 還有兩個有意思的特性。鏡像提升(Image Promotion)和不可變鏡像庫。
利用鏡像提升功能可以構(gòu)建一條基于一定策略的自動化流水線,它能夠通過同一個 DTR 中的多個鏡像庫實現(xiàn)鏡像提升。
舉例說明,開發(fā)者可能會推送一些鏡像到名為 base 的鏡像庫,但并不希望他們直接將鏡像推送到生產(chǎn)庫,因為鏡像中可能會有缺陷。
這種情況下,可以利用 DTR 為 base 庫配置一定的策略,該策略會掃描所有推送上來的鏡像,并根據(jù)掃描結(jié)果將其升級到其他庫中。如果掃描出問題,就將鏡像提升到隔離庫;如果通過掃描檢查,則提升到 QA 或生產(chǎn)庫。鏡像在流水線中轉(zhuǎn)移時,甚至可以重新打標簽。
下面的例子所使用的 DTR 有 3 個鏡像庫:base、good 和 bad。
good 和 bad 庫是空的,但是 base 庫中有兩個鏡像,如下圖所示。
由圖可見,兩個鏡像都完成了掃描,v1 沒有問題,但是 v2 有 3 個大問題。
下面對 base 庫創(chuàng)建兩個策略,將掃描沒有問題的鏡像提升到 good 庫,而將有缺陷的鏡像則提升至 bad 庫。
以下操作全部在 base 庫完成:
⒈ 單擊 Policies(策略)頁簽,并確保 Is source(是源鏡像)為選擇狀態(tài)。
⒉ 單擊 New promotion policy(新建提升策略)。
⒊ 在 PROMOTE TO TARGET IF...(提升到目標,如果……)下,選擇 All Vulnerabilities(所有缺陷),并創(chuàng)建一個 equals 0(等于 0)的策略,如下圖所示。
這樣會創(chuàng)建一個針對所有無缺陷鏡像的策略。在進入下一步之前不要忘了單擊 Add(添加)按鈕。
⒋ 對于 TARGET REPOSITORY(目標庫)選擇 technology/good,并單擊 Save & Apply(保存并生效)。僅單擊 Save 會使得策略對鏡像庫及后續(xù)推送來的新鏡像生效,但不會影響庫中現(xiàn)存的鏡像。
Save & Apply 可達到同樣效果,不過對于庫中現(xiàn)存的鏡像也會生效。如果單擊了 Save & Apply,該策略會立即檢查庫中的所有鏡像,并提升無缺陷的鏡像。因此 v1 鏡像會被提升至 technology/good 庫。
⒌ 查看 techonology/good 庫。如下圖所示,v1 鏡像已經(jīng)被提升,并且在界面中顯示為 PROMOTED(已提升)。
提升策略已經(jīng)起作用。下面創(chuàng)建另一個策略,用于將有問題的鏡像提升至 technology/bad 庫。
在 technology/base 庫執(zhí)行如下操作:
⒈ 創(chuàng)建另一個新的提升策略。
⒉ 該策略的條件設(shè)置為 All Vulnerabilities greater than 0(缺陷數(shù) > 0),并單擊 Add,如下圖所示。
⒊ 將 technology/bad 添加為目標庫,并且對 TAG NAME IN TARGET 添加“-dirty”,標簽名為“%n-dirty”,在提升的同時會對鏡像打標簽。如下圖所示。
⒋ 單擊 Save&Apply。
⒌ 檢查 technology/bad 庫,確認策略正在執(zhí)行,v2 鏡像提升并重新打標簽。
現(xiàn)在無缺陷的鏡像已經(jīng)被提升到 technology/good 庫,如果將這個庫設(shè)置為不可變的話是一個好主意,這樣能夠避免鏡像被覆蓋或刪除。
① 進入 technology/good 庫,并單擊 Settings 頁簽。
② 設(shè)置 IMMUTABILITY 為 On,并單擊 Save。
③ 嘗試刪除鏡像。會看到如下圖所示的錯誤。