Google Code Prettify

2022年12月20日 星期二

Azure DevOps: CI Tutorial

  • 登入 Azure DevOps

Azure DevOps 的網址是 https://dev.azure.com,注意網頁有兩個【Sign in】,右上角會登入到 Azure portal,要使用左下角的【Sign in to Azure DevOps】才能正確登入到 Azure DevOps。

  • 建立組織

在 Azure DevOps 裡,最上層的結構是 Organization (組織),在 Ogranization 下會有許多 Project (專案)。所以,使用 Azure DevOps,第一個步驟就是【New organization】。

按了上圖的【New ogranization】會出現如下的彈出畫面,只要輸入組織名稱,並選擇這個組織下的 project 要放在那裡的機房,然後按【Continue】。


  • 建立專案
如下,可以看到左邊選單出現上面建立的 Organization。這時候可以為這個組織建立第一個 project。
如下圖,輸入 project 名稱後按【Create project】。

  • 專案版面簡介

建立 project 後會出現如下畫面,右上角的【Invite】按下去,可以邀請專案成員,左邊選單的 Repos,是 git repo,用來版控程式碼,左邊選單的 Pipeline,可用來建立 CI 流程。

  • 程式碼版控 - 加入公鑰

點選左邊選單的「Repos」,選擇通訊協定為 SSH,然後按【Manage SSH Keys】。
出現如下畫面後按【New Key】。
popup 出如下畫面,加一把公鑰,這裡為公鑰命名為 demo-key,按【Add】。

  • 匯入程式碼

我程式早寫好,所以偷懶的按上面紅色的複製,並且在本機一個空目錄 git clone 一份,把 .git 版控設定建立好,然後把我的程式碼搬進該目錄後,commit、push 到 Azure DevOps 的 git repos,push 進去後,可以看到如下的結果。

  • 建立 CI pipeline

如上,點選左邊選單的【Pipelines】,再點選中間的【Create Pipeline】,可以建立 CI pipeline。當出現如下畫面,選擇「Azure Repos Git」,因為在上一個步驟我們是把程式碼版控在 Azure Repos Git。
如下,「spring-security-authentication」是前面建立的專案,裡面已經有程式碼,點選進入下一步驟。
剛剛匯入的程式,根目錄有一個 build.gradle,是以 Gradle 進行 artifacts 管控的專案,所以,這裡就選擇用 Gradle,這樣 pipeline 會在 build 的過程採用 Gradle。

底下是 azure-pipelines.yml 的內容,這當然是可以依需要修改,我把 jdk 版本由 1.8 改成 17,然後按【Save and run】。

當彈出如下畫面時,commit message 就隨意填一些讓自己看的懂的訊息,然後按【Save and run】。
為什麼會出現下面的錯誤訊息呢? 因為這個 organization 沒有綁定到某個 Azure 的訂閱帳號!

  • 組織綁定 Billing


在組織層級,左邊選單選「Billing」出現右邊的畫面,按【Set up billing】。出現如下畫面後按【Save】。

上面的【Save】按了之後會出現如下畫面,紅框的值預設是 0,必須給它們一點錢才能 run,這裡先設定為 20 美元,然後按最下面的【Save】。

  • 測試 CI pipeline


回到專案的 Pipelines 畫面,可以看到唯一的一條 pipeline 及最後一次執行結果,選擇這個 pipeline,會進入下面的畫面,如果要看 pipeline 的資訊,可以先點選 pipeline 後再按【Run】,這裡直接按右上的【Run pipeline】即可。

出現如下畫面,按【Run】。

執行 CI 的過程會如下,Jobs 的 Status 會一直變,如果想看執行細節,可以按紅色。

因為前面我們選擇這是個 Gradle 專案,CI 就會用 Gradle 執行,包含所有單元測試,測試沒問題會包成 jar 檔。

Job 執行完,Status 顯示 Success,表示所有單元測試都通過,也成功包成 jar 檔。如果這時想看過程的細節,點前面的那個綠色勾勾。

2022年12月2日 星期五

Azure: Network Security Group

  • NSG (Network Security Group, 網路安全性群組) 是一種網路流量篩選器,可以和 VM 的虛擬網卡或 VNet 的子網路結合。

  • NSG 中包含防火牆的對內、對外規則,修改規則只會影響形成的新連線。 建立新規則或在網路安全性群組中更新現有規則時,它只會套用至新的流程和新連線。 現有的工作流程連線不會隨著新的規則更新。

  • 建立 VM 時,Azure 預設會建立一個相對應的 NSG,如果要改變 VM 對防火牆等網路設定,要修改 NSG,不能用傳統上管理網路的指令直接修改。如下圖,當建立一個命名為 VM4 的 VM 時,系統自動建立了一個 NSG 掛在該 VM 上,如果要修改 VM4 的網路設定,要修改 VM4-nsg 這個 NSG 裡的設定,千萬不要在 VM4 裡下傳統網路管理指令。


    • 說明上圖的幾個項目:

    1. Inbound Security Rules 是由外向內連線的規則,Outbound Security Rules 是由內向外連線的規則。

    2. 每個連線要通過防火牆,會比對上面的條件,由 Priority 小的開始比對,符合了就可以通行,不再往下比對。

    3. Name 可以隨便取,可讀性高就好,但是如上圖,有預先設定好幾個了,如下:

       規則說明
      1AllowVNetInBound
      允許來自同一 VNet 或對等互連 VNet 的對內流量
      2AllowAzureLoadBalancerInBound
      允許來自任何 Azure 負載平衡器 IP 位址的對內檢測流量
      3DenyAllInbound
      特殊規則,確保任何前面的規則未能比對出來的對內流量都會被擋下。
      4AllowVNetOutBound
      允許源於此一 VNet 或前往對等互連 VNet 的對外流量
      5AllowInternetOutBound
      允許此一 VNet 內的 VM 前往 Internet
      6DenyAllOutBound
      特殊規則,確保任何前面的規則未能比對出的對外流量都會被擋下。
      預設規則無法移除,但可以建立較高優先順序的規則來覆寫預設規則。
    4. 在 Source 和 Destination 欄位,有如下標籤方便設定 NSG 規則:
    5. Service Tag說明
      1VirtualNetwork
      所有的虛擬網路定址空間皆包含在內,包含本地及對等互連的 VNet。
      2Internet
      所有公共 IP 位址,不論是 Azure 或外界持有皆然。
      3AzureLoadBalancer
      你所部署的 Azure 負載平衡器的虛擬 IP 位址
      4AzureCloud
      Azure 的公共 IP 位址空間
      5Storage
      Azure 儲存體服務的 IP 位址空間
  • 如下圖,VM 3、VM 4 在同一個 subnet,如果它們的網路設定一樣,想要統一管理,可以把它們預設綁在 VM 上的 NSG 移除,並設定一個新的 NSG 綁在 subnet 3 上。(在 example 中會說明怎麼做)

example 
  1. create NSG
    進入如上畫面,按【Create】後,進入如下畫面,填入 NSG 名稱。
    按【Review + create】後進入下面畫面,再按【Create】即成功建立一個 NSG。

  2. 設定 NSG
    如上,剛剛才建立的 subnet3-nsg 已經有預設建了一些 Inbound security rules 和 Outbound security rules,要很嚴謹的話,通常會把這些都刪除,只加上自己要的規則。
    因為我們希望可以 ssh 到 VM 3、VM 4,如下圖在「Inbound security rules」中按【Add】。
    popup 出如下畫面後,在「Service」下拉選單選擇「SSH」。
    按下【Add】後,會出現如下畫面,已經加入新的規則,因為 Priority 100,所以排最上面。

  3. 掛載 subnet-nsg 到 subnet

    如上圖,在「Virtual networks」中找到 VNet2,選擇「Subnets」,裡面只有一個 subnet3,點選後出現 subnet3 的規則選項,在「Network security group」下拉選單中選擇「subnet3-nsg」後按【Save】。
  4. 修改 VM 4 的 Networking

    查看 VM 4 的網路設定,原本的 VM4-nsg 及剛設定的 subnet3-nsg 同時存在,從 subnet3 外連線進去或由 VM 4 連出 subnet3 會同時受這兩個規則限制,與我們想要的不同,要移除 VM4-nsg。
    點選上面紅框中的 vm491-z1 會進到下圖,目前的 NSG 是 VM4-nsg,要將它卸載,下拉選單改選為 None 後按【Save】。
    再重新觀察 VM4 下的 Netowkring,如下圖,只剩下 subnet3-nsg。
    VM4-nsg 現在不想用了,可以刪除,如下圖按【Delete】。