Azure DevOps Server #A-4 バージョンアップ 2020.0.1 + Patch 1→2022 Update 1 + Patch 2

**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)
📘 **Chapter #B**
　📗 **Chapter #B-1**　[Azure DevOps Server 導入に関する情報](https://qiita.com/tfukumori/items/13233d01b133ea824fb6)

---

# 概要

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

# 既存環境


## サーバー1：2022 Update 1

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

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

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

# 手順

## 1. 調査

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

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

![image.png](https://learn.microsoft.com/en-us/azure/devops/server/upgrade/media/upgrade-2022.png?view=azure-devops-2022)

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

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

不要なテスト、ビルドの削除を行う作業。今回は行いません。
（利点は「アップグレードに費やす時間」を減らすためだが今回は不要と判断）

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

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

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

ただ、Windows Server、SQL Serverの要件が合わないため事前に次の作業が必要となります。
1. SQL Server 2016 → SQL Server 2017
2. Windows Server 2016 → Windows Server 2019

### [Azure DevOps Server 2020 の動作要件](https://learn.microsoft.com/en-us/azure/devops/server/requirements?view=azure-devops-2020)
- OS
  - (🤔前)Windows Server 2016
  - (⚡後)Windows Server 2019
- DB
  - Azure SQL Database
  - (🤔前)SQL Server 2016 (minimum SP1)
  - (⚡後)SQL Server 2017
  - SQL Server 2019

### [Azure DevOps Server 2022 の動作要件](https://learn.microsoft.com/en-us/azure/devops/server/requirements?view=azure-devops-2022)
- OS
  - (⚡後)Windows Server 2019
  - Windows Server 2022
- DB
  - Azure SQL Database
  - Azure SQL Managed Instance
  - (⚡後)SQL Server 2017
  - SQL Server 2019
  - SQL Server 2022

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

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

- 2022 Update 1
  https://my.visualstudio.com/Downloads?q=Azure%20DevOps%20Server%202022.1
- Patch 2
  https://learn.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2022u1?view=azure-devops&tabs=yaml#azure-devops-server-2022-update-1-patch-2-release-date-february-13-2024

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

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

![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/c4254534-60e2-9d7c-69e1-c1673f0025ba.png)

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

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

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

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

![image50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/8e204f84-75b3-02a8-3fff-0f8b56d815f7.png)

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

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

![image51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/a7c38523-5787-367d-58b5-adc9c51e083e.png)

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/39cb4207-0d74-abfa-1789-a6bac3a4f157.png)

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

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

![image57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/c91e7ad0-2fd1-0aa6-e186-48d37e8eb90a.png)

#### 2.4.5. アカウント

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

![image58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/49150f01-0764-6563-340e-1f40903922b0.png)

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/dfdb3487-655f-b2d0-c584-ebf02b3bb060.png)

#### 2.4.7 検索

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/07f25303-6edf-30b9-9f97-ddb8eaf723b0.png)

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

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

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

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

💡 確認したところ ElasticSearch のバージョンが異なりました。（ElasticSearchの設定が必要）

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

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

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

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を起動します。
- `C:\temp\zip`に移動します
 
#### 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:
```

条件を確認し続行します。

```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.
Continue ? (Y/N) > :
```

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

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

```posh
[VERBOSE]: Waiting for the Windows service: elasticsearch-service-x64 to start ...
[VERBOSE]: Elasticsearch was successfully started.
[VERBOSE]: Updated elasticsearch version in windows registry: 7.17.5.1
[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 Azure DevOps Server 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/a4317bf2-8e95-0ce2-dab9-f99b4490456c.png)

### 4.3. 確認

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

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

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

:::note
検索サービスのインデックスフォルダーを一度削除しないと、検索サービスが起動しない、という問題が発生しました。インデックスは後の手順で再作成しています。
:::

![image69.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/1cd22a81-b53c-af3c-c8f8-9f608ac42dc7.png)

#### 4.5. 構成完了

![image71.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/5c9f8f36-e0c5-7e42-3f59-bb8fa25303c0.png)


## 5. 2022 Update 1 Patch2をインストールします

https://learn.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2022u1?view=azure-devops&tabs=yaml#azure-devops-server-2022-update-1-patch-2-release-date-february-13-2024

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

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

上記手順に従い、コレクション単位で分析サービスを有効にします。以下の機能が使えるようになります。

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


# 7. インデックスの再作成

次のページの手順に従い検索インデックスの再作成を行います。適合したバージョンの`Re-IndexingRepository.ps1`を利用します。

https://learn.microsoft.com/en-us/azure/devops/project/search/manage-search?view=azure-devops-2022#reindex-a-repository-or-collection

https://github.com/Microsoft/Code-Search

## 8. 動作確認

### 8.1. Visual Studio 2022

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

:::note
【補足】
- 「TFVC」CIで設定変更が必要な場合があった
  - GitのCIは問題なし

- パイプラインのパラメーターでソリューションのパスを指定するところに関してTFVCの記法から、ルートディレクトリからのパスに変更する必要あり（ビルドの個所でソリューションが見つからない、と表示される）

例：
```
$/AAA/main/BBB/CCC.root/CCC/*.sln
```
→
```
AAA\main\BBB\CCC.root\CCC\*.sln
```

:::

### 8.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] チェックイン

### 8.3. VB6

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

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

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

# 参考資料

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