AZ-400：Azure Pipelines を使った npm パッケージの公開

この記事は、過去に投稿した記事 [AZ-400：Azure Artifacts フィードへの npm パッケージ公開](https://qiita.com/fsdg-honda/items/f7767be8d4296fec627f)の続編となります。

### Azure Pipelines を使ったパッケージの公開

過去の記事ではローカル PC との連携のみ試しましたが、今回は、Azure Pipelines を利用し、パッケージのソースがリモートのリポジトリに push されたことをトリガに、最新バージョンをフィードに公開するようにします。
また、別プロジェクトからフィードをインストールできることを確認します。

### プロジェクトの構成

Azure DevOps の組織に下記 2 個のプロジェクトを作成します。

- MakeKonamon: パッケージ make-konamon をビルドし、フィードを公開するプロジェクト。
フィード FeedMakeKonamon が存在（過去に投稿した記事で作成済）。フィードのスコープは（組織ではなく）プロジェクトとしています。
- HelloKonamon: フィードから make-konamon をインポートするプロジェクト。

それぞれのプロジェクトは下記のようなファイル構成となっています。
（後の手順でパイプラインを作成することにより、azure-pipelines.yml が追加されます）

```
make-konamon
    .npmrc
    index.js
    package.json
```

```
hello-konamon
    .npmrc
    index.js
    package-lock.json
    package.json
```

これらを各プロジェクトの Repo に push します。

![スクリーンショット_20230210_194526.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/15e8cebf-e9f5-691c-4c69-90ca195240be.png)


### パッケージのビルド Pipeline

MakeKonamon プロジェクトの Pipelines から Pipeline を作成し、Node.js のテンプレートを選択します。
下記のような npm タスク（Npm@1）を追加し、command に publish、publishFeed に MakeKonamon のフィードを指定後、Pipeline を保存します。

```
- task: Npm@1
  inputs:
    command: publish
    publishRegistry: useFeed
    publishFeed: MakeKonamon/FeedMakeKonamon
```

### パッケージをインストールするビルド Pipeline

HelloKonamon プロジェクトの Pipelines から Pipeline を作成し、Node.js のテンプレートを選択します。
下記のような npm タスク（Npm@1）を追加し、command に install、customFeed に MakeKonamon のフィードを指定します。

```
- task: Npm@1
  inputs:
    command: install
    customRegistry: useFeed
    customFeed: MakeKonamon/FeedMakeKonamon
```

動作確認用に下記実行スクリプトを追加後、Pipeline を保存します。
```
- script: |
    node index.js
  displayName: 'run'
```

### フィードのアクセス権限の設定

ローカル PC からの接続では、ホームディレクトリの .npmrc に資格情報を格納し、認証に使用しましたが、今回は .npmrc は使用せず、プロジェクトの設定を変更します。

MakeKonamon プロジェクトのプロジェクト設定で Permissions を開き、Contributor に HelloKonamon プロジェクトのビルドサービスを追加します。

![スクリーンショット_20230211_103043.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/1f6ce394-756c-91f0-0dc9-34b9a7d831d9.png)


また、Artifacts のフィード FeedMakeKonamon の 設定から Permissions タブを開き、MakeKonamon のビルドサービスに Contributor 権限、HelloKonamon のビルドサービスに Collaborator 権限を付与します。

![スクリーンショット_20230211_005246.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/043d6531-9a6e-d02d-5f35-19768e8b62d2.png)

パッケージのインストールをする側で Contributor 権限が必要となるのは不思議な気もしますが、[MS Learnのドキュメント](https://learn.microsoft.com/ja-jp/azure/devops/artifacts/feeds/project-scoped-feeds?view=azure-devops#q-how-to-access-a-project-scoped-feed-in-a-different-project-with-azure-pipelines)にある通りで、試しにプロジェクト設定で HelloKonamon のビルドサービスを Reader 権限にしたところ、フィードのアクセス時にエラーとなりました。

### パッケージの更新

MakeKonamon のパッケージに下記変更を行い、リポジトリに push します。

- index.js で返す文字列を「takoyaki」->「akashiyaki」に変更
- package.json の version を「1.1.0」->「1.2.0」に変更

MakeKonamon で Azure Pipelines が実行され、フィードに 1.2.0 が公開されます。

HelloKonamon の package.json で参照するバージョンを 1.2.0 に変更し、リポジトリに push します。

```
  "dependencies": {
    "make-konamon": "1.2.0"
  }
```

MakeKonamon で Azure Pipelines が実行されます。
ログ出力から1.2.0 の変更が反映されていることが確認できました。

![スクリーンショット_20230211_101934.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3104149/a54a34ac-3042-59b0-655a-b44123efad53.png)