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