Azure DevOps Server #A-3 バージョンアップ 2019 Update1→2020.0.1 + Patch 1

**Chapters**

📘 **Chapter #1**
　📗 **Chapter #1-1**　[継続的インテグレーション（CI）構築](https://qiita.com/tfukumori/items/ef8314857ecb545c4b15)
　📗 **Chapter #1-2**　[継続的インテグレーション（CI）手順](https://qiita.com/tfukumori/items/11d24a5eee8d77a17a80)
📘 **Chapter #2**
　📗 **Chapter #2-1**　[VB6で使用する 環境設定](https://qiita.com/tfukumori/items/37f035694751dc098fcd)
　📗 **Chapter #2-2**　[VB6で使用する プロジェクトの追加](https://qiita.com/tfukumori/items/68aca8cdc04fe76d6eee)
📘 **Chapter #A**
　📗 **Chapter #A-1**　[バージョンアップ TFS 2018 Update 1 → Update 3、検索サービスの分割](https://qiita.com/tfukumori/items/778bb2e3d913106beba9)
　📗 **Chapter #A-2**　[バージョンアップ 2019→2019 Update1](https://qiita.com/tfukumori/items/7f149928a6e413afe755)
　📗 **Chapter #A-3**　[バージョンアップ 2019 Update1→2020.0.1 + Patch 1](https://qiita.com/tfukumori/private/8d7a9617924f42cbe04f)
　📗 **Chapter #A-4**　[バージョンアップ 2020.0.1 + Patch 1→2022 Update 1 + Patch 2](https://qiita.com/tfukumori/private/e65aa7aa1e058e50a47e)

---

# TL;DR

- Azure DevOps Server 2019 Update 1から、[Azure DevOps Server 2020.0.1 + Patch 1](https://docs.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2020?view=azure-devops#azure-devops-server-202001-patch-1-release-date-february-9-20219)へのバージョンアップ手順を記載する
- [アップグレード手順](https://docs.microsoft.com/en-us/azure/devops/server/upgrade/get-started?view=azure-devops-2020)に従い、作業を実施する。
- **Windows Server 2016 以降**
- 検索サーバーのElastic Searchの更新も必要だった。

# 既存環境

## サーバー1：2019 Update1

- CPU：vCPU x 2(2.6 GHz Xeon 相当）
- メモリ：12 GiB

## サーバー2：検索＆ビルドサーバー

- CPU：vCPU x 2(2.1 GHz Xeon 相当）
- メモリ：8 GiB

# 手順

## 1. 調査

### 1.1. アップグレードパスの確認

アップグレードパスに問題ないかを確認。今回は2019 Update 1→2020.0.1 + Patch 1なので問題ありませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/e3b63290-0b4a-b311-6bb5-4e83f2d9a850.png)

引用元：https://docs.microsoft.com/en-us/azure/devops/server/upgrade/get-started?view=azure-devops-2020

### 1.2. データのクリーンアップ

不要なテスト、ビルドの削除を行う作業。今回は行いません。

https://docs.microsoft.com/en-us/azure/devops/server/upgrade/clean-up-data?view=azure-devops-2020

### 1.3. 環境要件の確認

今回検索サーバーを使用しており元々マルチサーバーとしているため、特に問題ありませんでした。500人以上で同時に使用する場合は、もっと要件が厳しくなります。

ただ、Windows Server の要件が合わなかったため、事前にWindows Server 2012 R2→Windows Server 2016にアップグレードしています。

https://docs.microsoft.com/en-us/azure/devops/server/requirements?view=azure-devops-2020

## 2. サーバー1　ステップ1/2（インストールと設定（検索サービス設定画面まで））

### 2.1 Visual Studio サブスクリプションからダウンロードする

https://my.visualstudio.com/Downloads?q=Azure%20DevOps%20Server%202020.0.1&pgroup=

### 2.2 Azure DevOps Server がインストールされたサーバーで実行する

### 2.3 [インストール]で続行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/5033398a-b911-95ac-94e0-95a9cbe5e51a.png)

インストールには1時間程度かかりました。

### 2.4 サーバー構成ウイザード

#### 2.4.1. サーバー構成ウイザードが起動

自動でサーバー構成ウイザードが起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/aa6044a3-041c-e17e-3b2a-b3f0bb741b51.png)

#### 2.4.2. 「Azure DevOps Server 配置に使用する既存のデータベースがあります」を選択

今回はアップグレードのため「Azure DevOps Server 配置に使用する既存のデータベースがあります」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/a8d1d29d-b1cc-ed6a-3930-41242c8f3048.png)


#### 2.4.3. 構成データベースの選択

構成データベースを確認し選択します。

この際、現在のバックアップを行っていることを確認し「現在のバックアップがある」にチェックする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/9159928a-1970-9751-075d-23c530930944.png)


#### 2.4.4. 配置シナリオの選択

すぐにアップグレードするのか、アップグレードテストを行うのかを確認することができます。
ここではすぐにアップグレードするため「運用環境のアップグレード」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/f94b0f45-a8eb-c5e9-477c-7699bbee1692.png)

#### 2.4.5. アカウント

サービスアカウントを設定します。既定値のまま続行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/ddee508d-b585-bbbc-f88c-a9dff261b833.png)

#### 2.4.6. アプリケーション層

必要に応じてWebサービスの設定を変更します。

今回の環境ではファイルキャッシュのドライブを変更していますので、設定が変わっていないことを確認しそのまま続行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/96153b08-e3e9-57e8-98d8-bbb352d13b04.png)


#### 2.4.7 検索

今回はリモートサーバー（サーバー2）で検索を行っています。

リモートサーバーもバージョンアップが必要なため、[Search Service パッケージ]をクリックして、サーバー2にてインストールを行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/182a34d4-1e32-2443-d225-7f02bab00eef.png)

## 3. サーバー2　検索サービスのインストール

### 3.1. 検索サービスパッケージのコピー

2.4.7の[Search Service パッケージ]でサーバー1のzipフォルダーが開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/7c787727-5316-a518-42ca-f3c9d2a9c341.png)

このzipフォルダーを、サーバー2にコピーします。今回は`C:\temp`にコピーしました。

💡 確認したところ ElasticSearch のバージョンはメジャーバージョン（6.2）は同一ですがマイナーバージョンは異なりました。（ElasticSearchの設定が必要）

### 3.2. 前提条件の確認

README.txtで前提条件を確認します

#### 3.2.1. Javaのバージョンの確認

`ensure you have JRE 8 Update 111 or higher installed`とあるので、インストールされているJavaのバージョンと環境変数の設定を確認します。

ただし、インストール時の最終確認前の記述では`ensure you have Java 8 (Update 111 or higher) installed`とあるので、実際に要求されるバージョンはこちらが正しいようです。

#### 3.2.2. アップグレードの方法

https://docs.microsoft.com/en-us/azure/devops/project/search/administration?view=azure-devops-2020

2019 Update 1 から 2020.0.1の場合は Updateで問題ないようです。

またOracleのライセンス変更に伴い、Oracle JRE から Azul Zulu OpenJDK に移行する必要があります。

https://github.com/microsoft/Code-Search/blob/master/Java%20Migration/Azure_DevOps_Server_2019.md

### 3.3. 削除とインストール

#### 3.3.1. PowerShellの起動

`C:\temp`でPowerShellを起動します。

#### 3.3.2. 削除

削除のために以下のコマンドを起動します。
※`.\`を付加する必要があります。

```posh
.\Configure-TFSSearch.ps1 -Operation remove
```

削除が正しく終了したことを確認します。

```posh
～
[VERBOSE]: Elasticsearch has been removed
[VERBOSE]: Removing folder at: C:\ES\elasticsearchv6.2
[VERBOSE]: Preserving current data at: C:\ESDATA
```

#### 3.3.3. インストール

インストールを行います。
※`.\`を付加する必要があります。

新規インストールではないため、環境変数「SEARCH_ES_INDEX_PATH」が設定済みであることは確認済みです。

```posh
.\Configure-TFSSearch.ps1 -Operation install -TFSSearchInstallPath C:\ES -TFSSearchIndexPath $env:SEARCH_ES_INDEX_PATH
```

ユーザー名の入力が求められます。あらかじめ考慮しておいたユーザーを入力します。

```posh
[INFO]:
Provide a valid user name to enable basic authentication in elasticsearch.

User should be between 8 and 64 characters long and should contain alphanumeric and underscore characters.

User? >:
```

パスワードの入力が求められます。あらかじめ考慮しておいたパスワードを入力します。

```posh
[INFO]:
Provide a valid password to enable basic authentication in elasticsearch.

Password should be between 8 and 64 characters long.

Please enter your password:
```

Javaの条件等を確認し続行します。

```posh
[INFO]: This script will install and configure Elasticsearch and associated plugins on this machine to be used by Code S
earch in Azure DevOps Server. For more information read:
https://go.microsoft.com/fwlink/?linkid=2042172

**Note: This is a customized version of Elasticsearch, fine-tuned for Code Search on Azure DevOps Server.

Before you proceed, ensure you have Java 8 (Update 111 or higher) installed and that the JAVA_HOME variable is pointing
to the Java installation directory. Read Java installation notes for more details:
https://go.microsoft.com/fwlink/?linkid=2064530
Continue ? (Y/N) > :
```

正常終了したことを確認します。

`Updated elasticsearch version in windows registry: 6.2.4`の行のバージョンを確認してください。

実は更新を試みたのですがその際は途中でエラーが表示され`Updated elasticsearch version in windows registry: 6.2.4`の行がありませんでした。
そのため削除と再インストールを行っています。

```posh
[VERBOSE]: Waiting for the Windows service: elasticsearch-service-x64 to start ...
[VERBOSE]: Elasticsearch was successfully started.
[VERBOSE]: Updated elasticsearch version in windows registry: 6.2.4
[INFO]:
Installation & Configuration of Code Search service is now complete!!

[INFO]:
** IMPORTANT: Elasticsearch does not support HTTPS **
Please follow the guidance here to secure the code search service, including setting firewall rules:
https://go.microsoft.com/fwlink/?linkid=825214

[INFO]: Your Search service URL is:
[INFO]:
Point your TFS instance to this Search Service instance via the Search Configuration wizard.

[WARNING]: Firewall profile 'Private' is Disabled
[WARNING]: Firewall profile 'Public' is Disabled
```

#### 3.3.4. ファイアウォール

設定したポート（既定9200）に関するファイアウォールを必要に応じて設定する必要があります。

## 4. サーバー1　ステップ2/2（設定（検索サービス設定画面から））

### 4.1. 検索

サーバー1で中断した設定の続きを行います。

サーバー2で設定したアドレス、ユーザー、およびパスワードを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/66bea412-95e8-f82a-efcd-77e26b6059b4.png)

### 4.2. レポート

今回はReporting Serviceを有効にしていなかったため構成しませんが、後から有効にすることもできるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/0018c775-98bf-bea0-01e2-beda1fb5157f.png)

### 4.3. 確認

最終確認を行い次へを押すと適合性チェックが行われます。

### 4.4. 適合性チェック

適合性チェックを行い、構成を実行します。検索サービスに問題がある（正しく更新ができなかったなど）場合は、ここでエラーが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/f3e0225e-d6ef-47c9-1ff9-951553d87588.png)

#### 4.5. 構成完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/c75f875e-18ef-1233-d564-615b99ee10c8.png)

## 5. 2020.0.1 Patch1をインストールします

https://devblogs.microsoft.com/devops/february-patches-for-azure-devops-server/

[リリースノート](https://docs.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2020?view=azure-devops)からリンクされた**上記ブログの手順**に従い、インストールおよびチェックを行います

## 6. 分析サービスを有効にする

https://docs.microsoft.com/ja-jp/azure/devops/report/dashboards/analytics-extension?view=azure-devops-2020

上記手順に従い、コレクション単位で分析サービスを有効にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/a9b21bbf-2339-79c9-c3f1-ddfc949f7d4f.png)

https://docs.microsoft.com/ja-jp/azure/devops/report/powerbi/what-is-analytics?view=azure-devops-2020

以下の機能が使えるようになります。特に[バックログのロールアップ列](https://docs.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2020?view=azure-devops)がかなり使える機能だと思います。

> ダッシュボードに追加できる分析ウィジェット
> 選択した Azure DevOps ページから利用できるコンテキスト内分析レポート
> Azure ボードバックログのロールアップ バーとカウント
> Power BI を使用して作成できるカスタム レポート
> OData クエリを使用して作成できるカスタム レポート
> ダッシュボードに追加できるカスタム分析ウィジェットの開発と追加のサポート

## 7. 動作確認

### 7.1. Visual Studio 2019

- [x] Gitの接続
    - [x] 最新バージョンの取得
- [x] TFVCの接続
    - [x] 最新バージョンの取得
    - [x] チェックアウト
    - [x] チェックイン
    - [x] コードレビュー

### 7.2. Visual Studio 2010

- リポジトリ接続互換性のためのモジュールのインストールが必要

    [Visual Studio 2010 SP1 Team Foundation Server Compatibility GDR](https://www.microsoft.com/en-sg/download/details.aspx?id=29082)

- [x] TFVCの接続
    - [x] 最新バージョンの取得
    - [x] チェックアウト
    - [x] チェックイン

### 7.3. VB6

- 必要な設定は実行済みであることを想定

    [VB6でAzure DevOps Serverを使用する](https://qiita.com/tfukumori/items/37f035694751dc098fcd)

- [x] TFVCの接続
    - [x] 最新バージョンの取得
    - [x] チェックアウト
    - [x] チェックイン

# 参考資料


https://docs.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2020?view=azure-devops
https://docs.microsoft.com/en-us/azure/devops/server/upgrade/get-started?view=azure-devops-2020
https://docs.microsoft.com/en-us/azure/devops/server/requirements?view=azure-devops-2020