﻿# 安裝 Azure DevOps Server 2019 Update 1.1 的注意事項與技術筆記

我們公司最近一年已經幫多家公司導入 Azure DevOps Server 2019，幫助客戶了解 DevOps 與推動 CI/CD 自動化建置與部署流程。由於每位客戶的 IT 環境都有些不太一樣的地方，工程師所寫的安裝手冊也都只符合特定客戶環境。最近因為又替客戶安裝了一套 Azure DevOps Server 2019 Update 1.1 最新版，但是因為客戶端的 IT 環境限制頗多，安裝過程也異常艱辛，所以特別花了些時間整理安裝的各種注意事項，也在自己的 Lab 環境中安裝多次，整理出這篇文章。

### 初始化系統設定

請**以系統管理員身分**開啟 Windows PowerShell 視窗 (`powershell.exe`) 並執行以下命令：

```powershell
# 設定時區為台北標準時間 (Taipei Standard Time)
Set-TimeZone -Name "Taipei Standard Time"

# 關閉 Internet Explorer 增強安全性設定 (Enhanced Security Configuration)
$AdminIEOff = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}"
Set-ItemProperty -Path $AdminIEOff -Name "IsInstalled" -Value 0
Stop-Process -Name Explorer

# 關閉開機自動啟動伺服器管理員 (Server Manager)
Get-ScheduledTask -TaskName ServerManager | Disable-ScheduledTask -Verbose

# 變更系統語言設定並設定 zh-TW 為顯示語言
$UserLanguageList = New-WinUserLanguageList -Language "en-US"
$UserLanguageList.Add("zh-TW")
Set-WinUserLanguageList -LanguageList $UserLanguageList -Force
Set-WinUILanguageOverride -Language zh-TW

# 更改主機名稱並重開機 (假設要更名為 WILL-DevOps-1)
Rename-Computer -NewName WILL-DevOps-1 -LocalCredential Administrator -PassThru

# 重開機套用變更
Restart-Computer
```

> 如果電腦要加入 AD 網域，請在這個時間點加入網域。

### 安裝 Chocolatey 套件管理器與必要套件

請**以系統管理員身分**開啟 Windows PowerShell 視窗 (`powershell.exe`) 並執行以下命令：

-   安裝 [Chocolatey](https://chocolatey.org/install) 套件管理器
    
    ```powershell
    Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    ```
    
-   安裝 [7-Zip](https://chocolatey.org/packages/7zip) 套件
    
    ```powershell
    choco install 7zip -y
    ```
    
-   安裝其他好用工具套件 (非必要安裝)
    
    ```powershell
    choco install git openssh unxutils wget curl notepad2 -y
    ```
    

### 安裝 Oracle Server JRE Update 60 以上版本

因為 Azure DevOps Server 2019 有包含 [Code Search](https://learn.microsoft.com/en-us/azure/devops/project/search/overview?view=azure-devops) 功能，必須用到 Oracle Server JRE 8 (Update 60 or higher) 版本，而且安裝完後還要設定 `JAVA_HOME` 系統環境變數才能正常運作，請依據以下步驟進行安裝設定即可。

> 如果你打算將 Azure DevOps Server 2019 與 SQL Server 分別安裝在不同主機，Server JRE 只需要安裝在 Azure DevOps Server 2019 這台即可。

-   下載 [Server JRE (Java SE Runtime Environment) 8](https://www.oracle.com/java/technologies/javase-server-jre8-downloads.html)
    
    由於 Oracle 官網下載的 JRE 只有 `*.tar.gz` 壓縮檔，並沒有自動安裝的執行檔，所以需要手動設定 JRE 環境。
    
    [Installing the server JRE on Windows :: Lucee Documentation](https://docs.lucee.org/guides/installing-lucee/windows/installing-the-server-jre-on-windows.html)
    
    > 撰文當下的下載檔案為 `server-jre-8u241-windows-x64.tar.gz`，壓縮檔案有個 `jdk1.8.0_241` 資料夾目錄。
    
-   建立 `C:\Program Files\Oracle Java Server` 資料夾
    
-   使用 [7-zip](https://www.7-zip.org/) 將壓縮檔中的 `jdk1.8.0_241` 目錄 (包含資料夾)，複製到 `C:\Program Files\Oracle Java Server` 目錄下。
    
-   設定 `JAVA_HOME` 系統環境變數到 `C:\Program Files\Oracle Java Server\jdk1.8.0_241`
    
    請以系統管理員身分開啟命令提示字元視窗 (`cmd.exe`)，並執行以下命令：
    
    ```batch
    SETX JAVA_HOME "C:\Program Files\Oracle Java Server\jdk1.8.0_241" /M
    ```
    

### 安裝 SQL Server 資料庫伺服器

請查閱 Azure DevOps Server 2019 Update 1.1 [支援的 SQL Server 版本](https://learn.microsoft.com/en-us/azure/devops/server/requirements?view=azure-devops#azure-sql-database-and-sql-server)，至少需要 SQL Server 2016 with Service Pack 1 以上版本。

必須安裝的 SQL Server 元件

1.  Database Engine
2.  Full-Text and Semantic Extractions for Search features

選用安裝的 SQL Server 元件 (建議安裝)

1.  SQL Server Analysis Services
2.  SQL Server Reporting Services

注意事項：

-   請參閱 [Manually install SQL Server](https://learn.microsoft.com/en-us/azure/devops/server/install/sql-server/install-sql-server?view=azure-devops) 來進行完整安裝。
-   唯有超過 `500` 位使用者，你才需要特別將 SQL Server 安裝在另一台獨立的主機上，否則**單機安裝**就非常夠用！
-   由於 Azure DevOps Server 2019 僅支援 Windows 驗證，若要安裝在多台伺服器，你可以有兩種選擇：
    -   將電腦加入 AD 網域並使用「**網域帳號**」作為**服務帳戶**
    -   使用「**網路服務**」(Network Service) 作為**服務帳戶**

開始安裝 SQL Server 資料庫伺服器

1.  執行 `setup.exe` 安裝
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/7e89c583a103388aab73-76642212-c64dc100-658d-11ea-85bd-11f17a6001bd.png)
    
2.  (特徵選取) 選取以下四個功能
    
    1.  Database Engine 服務
    2.  搜尋的全文檢索和語意擷取
    3.  Analysis Services
    4.  Reporting Services - 原生
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/29d1d1273b6fc8809431-76642392-17f64b80-658e-11ea-8e7b-2743a3c706a8.png)
    
3.  (執行個體組態) 選擇 **預設執行個體** (`MSSQLSERVER`) 或 **具名執行個體**
    
4.  (伺服器組態) 將**帳戶名稱**全部修改為 `NT AUTHORITY\NETWORK SERVICE`，**啟動類型**全部設為`自動`。
    
5.  (伺服器組態) 切換至**定序**頁籤設定並確保 **Database Engine** 與 **Analysis Services** 使用相同定序 `Chinese_Taiwan_Stroke_CI_AS`。
    
    > 選取 **Windows 定序指示項和排序次序**，並於 **定序指示項** 選取 `Chinese_Taiwan_Stroke`，並勾選 `區分重音字` 核取項目。
    
6.  (資料庫引擎組態) 選擇 **Windows 驗證模式** 並點擊 **加入目前使用者** 按鈕。
    
    > 如果主機有加入 AD 網域，也請加入一位 AD 網域使用者，該使用者必須為之後設定 Azure DevOps Server 2019 的網域使用者。
    
7.  (Analysis Services 組態) 點擊 **加入目前使用者** 按鈕。
    
    > 如果主機有加入 AD 網域，也請加入一位 AD 網域使用者，該使用者必須為之後設定 Azure DevOps Server 2019 的網域使用者。
    
8.  (Reporting Services 組態) 選取 **安裝與設定** 選項。
    

### 設定 Reporting Services 組態管理員

如果前一步驟的 (Reporting Services 組態) 選取 **安裝與設定** 選項，應該什麼都不用設定才對！

1.  開啟 **Reporting Services 組態管理員**
    
2.  點擊 **Web 服務 URL** 頁籤，並直接按下 **套用** 按鈕。
    
3.  點擊 **資料庫** 頁籤，並直接按下 **套用** 按鈕。
    

### 安裝 SQL Server Management Studio (SSMS)

下載 [SQL Server Management Studio (SSMS)](https://learn.microsoft.com/zh-tw/sql/ssms/download-sql-server-management-studio-ssms) 並安裝。

重新啟動電腦！

> 你可以先建立一個**空白資料庫**，然後在 Azure DevOps Server 2019 的安裝過程中選取該資料庫。資料庫名稱規則：AzureDevOpsServer\_***DatabaseLabel***Configuration

### 安裝 Azure DevOps Server 2019

直接到 [Download Visual Studio 2019 for Windows & Mac](https://visualstudio.microsoft.com/downloads/) 網頁，捲動到最下方即可看見 **Azure DevOps Server 2019 Update 1.1** 的下載選項。然後參考 [Install on a single server](https://learn.microsoft.com/en-us/azure/devops/server/install/single-server?view=azure-devops) 進行安裝。基本上，只要 SQL Server 安裝順利，Azure DevOps Server 2019 就可以很順利的透過預設值設定，一路順利的安裝到最後！

> Azure DevOps Server 2019 你在安裝好之後，使用者可以自行選擇顯示語言，但是中文版有些地方的翻譯不太到位，有些專有名詞甚至會讓人完全無法聯想到英文原文。與其這樣，建議你在**首次安裝設定**的過程中選擇 `English` 語言，你至少比較容易理解某些重要名詞，而且出問題時也比較容易 Google 到相關資源。

### 安裝於兩台電腦的注意事項

如果要將 **Azure DevOps Server 2019** (Application-tier) 與 **SQL Server** (Data-tier) 安裝在不同主機，必須符合以下需求：

-   必須有個 AD 網域，並將兩台電腦都加入網域。
    
    -   假設 AP 電腦名稱為：`AP1` (Azure DevOps Server 2019)
    -   假設 DB 電腦名稱為：`DB1` (SQL Server 2016 SP1+)
-   需準備一個負責安裝 Azure DevOps Server 2019 的 AD 網域使用者
    
    -   假設 AD 網域使用者名稱為：`MyAD\will`
    -   請將該使用者加入到 `AP1` 主機的**本機管理者群組** (`Administrators`)
    -   建議不要使用 **Domain Admins** (網域管理者群組) 下的帳戶
-   需準備一個負責執行 **搜尋服務** 的本機帳號
    
    -   假設本機帳號名稱為 `devopsmaster` (**帳號**與**密碼**的長度都必須介於 8 ~ 64 的字元之間)
-   請使用 AD 網域使用者身分登入 `AP1` 主機並開始安裝 **Azure DevOps Server 2019** (不能用本機帳號登入)
    
    -   如果先前已經安裝過，但是安裝失敗，可能會導致安裝過程不順利。
        
    -   例如 `elasticsearch-service-x64` 服務就必須先移除才能進行安裝。
        
        ```batch
        sc stop elasticsearch-service-x64
        sc delete elasticsearch-service-x64
        ```
        
-   Azure DevOps Server 2019 在設定的過程中，有個 **報告讀取器帳戶**(Report Reader Account) 步驟，其帳號不能設定為「**本機帳戶**」，否則將無法通過**整備檢查**(Readiness Checks)！
    

SQL Server 資料庫伺服器主機必須開啟以下防火牆規則：

-   [Configure a Firewall for Report Server Access](https://learn.microsoft.com/en-us/sql/reporting-services/report-server/configure-a-firewall-for-report-server-access?redirectedfrom=MSDN&view=sql-server-ver15)
    -   新增 Reporting Services Report server 的 `TCP 80` Port
    -   啟用 `Windows Management Instrumentation (WMI-In)` 防火牆規則 (安裝後即可關閉)
-   [Configure a Windows Firewall for Database Engine Access](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-a-windows-firewall-for-database-engine-access?redirectedfrom=MSDN&view=sql-server-ver15)
    -   新增 SQL Server Database Engine 的 `TCP 1433` Port
    -   新增 SQL Server Browser service 的 `UDP 1434` Port
-   [Configure the Windows Firewall to Allow Analysis Services Access](https://learn.microsoft.com/en-us/analysis-services/instances/configure-the-windows-firewall-to-allow-analysis-services-access?redirectedfrom=MSDN&view=asallproducts-allversions&viewFallbackFrom=sql-server-ver15)
    -   新增 SQL Server Analysis Services 的 `TCP 2383` Port (如果用**預設執行個體**的話)
    -   新增 SQL Server Analysis Services 的 `TCP 2382` Port (如果用**具名執行個體**的話)

Azure DevOps Server 2019 主機必須開啟以下防火牆規則：

-   啟用 `全球資訊網服務 (HTTP 輸入流量)` 防火牆規則 (即 `TCP 80` Port)
-   啟用 `全球資訊網服務 (HTTPS 輸入流量)` 防火牆規則 (即 `TCP 443` Port)
-   新增 SSH 的 `TCP 22` Port

### 相關連結

-   Azure DevOps | Microsoft Docs
    -   [Install on single server](https://learn.microsoft.com/en-us/azure/devops/server/install/single-server?view=azure-devops)
    -   [Install on two servers](https://learn.microsoft.com/en-us/azure/devops/server/install/dual-server?view=azure-devops)
    -   [Install on multiple servers](https://learn.microsoft.com/en-us/azure/devops/server/install/multiple-server?view=azure-devops)
    -   [Azure DevOps Server 2019 Release Notes](https://learn.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2019?view=azure-devops)
-   [Manually install SQL Server](https://learn.microsoft.com/en-us/azure/devops/server/install/sql-server/install-sql-server?view=azure-devops)
    -   [Collation requirements](https://learn.microsoft.com/en-us/azure/devops/server/install/sql-server/collation-requirements?view=azure-devops)
    -   [Reporting Services roles](https://learn.microsoft.com/en-us/azure/devops/server/install/sql-server/reporting-services-roles?view=azure-devops)
    -   [Add the Azure DevOps service account to the report server](https://learn.microsoft.com/en-us/azure/devops/server/install/sql-server/add-tfs-svc-acct-report-svr?view=azure-devops-2019)
