はじめに
前回は、Sonatype Nexusを用いた、Chcolatey for Business(以下C4B)の内部リポジトリの作成方法について紹介しました。
今回は、内部リポジトリ作成後のメンテナンスを効率化する方法の紹介です。
JenkinsをC4Bに連携させることで、以下が可能になります。
①:パッケージをダウンロードした後、自動的に内部リポジトリへ格納される
②:パッケージバージョンを定期的にアップグレードできる
では、解説していきます。
前提条件
Jenkinsのインストール条件ではないですが、リポジトリサーバにJenkinsをインストールする想定ですので、リポジトリサーバの前提条件を満たすようにします。
- Windows Server 2012以降(理想的にはWindows Server 2016)
- 4以上のCPUコア
- 16 GB以上のRAM
- ローカルアーティファクトストレージ用に1 TBの空き容量
※パッケージの量が少なければ1TB未満で問題ないです。
Jenkinsをインストール
- 管理者権限で実行したPowershellで以下を実行します。
PS> cinst -y Jenkins

2. ブラウザで[http://localhost:8080]にアクセス。初回パスワードは、[C:\Program Files (x86)\Jenkins\secrets\initialAdminPassword]に記載されています。


3. [Install suggested plugins]をクリック。

4. しばし待った後、ユーザを作成します。(以下は記入例)

5. Jenkins用のURLを設定します。

Powershellプラグインをインストール
- 左タブの[Jenkinsの管理]をクリック。

2. [プラグインの管理]をクリック。

3. [利用可能]タブをクリック、[Powershell]を選択し、[ダウンロードして再起動後にインストール]をクリック。

ジョブの作成①
では、①:パッケージをダウンロードした後、自動的に内部リポジトリへ格納されるを実現するジョブを作成していきます。
- [新しいジョブ]をクリック。

2. ジョブ名:[任意]、ジョブタイプ:[フリースタイル・プロジェクトのビルド]を選択し、OKをクリック。

3. ビルド手順の追加から[Powershell]を選択し、以下のコマンドを入力します。
※API-KeyやリポジトリのURLの確認方法は、前回の記事に記載があります。
Get-ChildItem "C:\choco-setup\packages\*.nupkg" |
Foreach-Object {
choco push $_.FullName --source="'http://localhost:8081/repository/<リポジトリ名>/'" -k="'<API key>'" --force
}
4. [保存]をクリック。
これで、ローカルのパッケージをリポジトリに格納するジョブが作成できました。次に、パッケージをローカルに落とすジョブを作成します。
5. [新規ジョブ作成]をクリック。
6. ジョブ名:[任意]、ジョブタイプ:[フリースタイル・プロジェクトのビルド]を選択し、OKをクリック。
7. [ビルドのパラメータ化]にて[文字列]を選択し、ジョブの実行時に入力からパッケージ名を取得できる設定を行います。
名前に記載した変数名で環境変数がセットされます。

8. ビルド手順の追加から[Powershell]を選択し、以下のコマンドを入力します。
cd C:\choco-setup\packages; choco download -y --recompile $env:<変数名>
9. ビルド後の処理で[他のプロジェクトのビルド]を選択し、項番2.で入力したジョブ名を指定します。
これにより、作成中のジョブが終わると、パッケージをリポジトリに格納するジョブが自動で実行されます。

10. [保存]をクリック。
実際に使ってみましょう。Jenkinsのトップページにて、パッケージをインストールするジョブの右側再生ボタンをクリックします。

すると手順7.で設定した、パッケージ名の入力を促す表示に変わるので、こちらにパッケージ名を入力します。

あとは、待つだけです。
ジョブの作成②
続いて、②:パッケージバージョンを定期的にアップグレードできるジョブを作成します。
- [新しいジョブ]をクリック。
2. ジョブ名:[任意]、ジョブタイプ:[フリースタイル・プロジェクトのビルド]を選択し、OKをクリック。
3. ビルド手順の追加から[Powershell]を選択し、以下のコマンドを入力します。
cd C:\choco-setup\packages; clist -s="http://localhost:8081/repository/Soumu/" | Select-Object -Skip 1 | Select-Object -SkipLast 1 | ForEach-Object {$packageName = $_.split(' '); choco download --recompile -force $packageName[0] }
4. ビルド・トリガで[定期的に実行]をクリックし、”0 9 * * *”と入力します。
記入規則は、”分(0~59) 時(0~23) 日(1~31) 月(1~12) 曜日(0~7、0, 7が日曜)”
この場合、毎日9時にアップグレードが実行されます。

おわりに
以上、JenkinsによるNexusリポジトリの管理効率化の紹介でした。Jenkinsを知る前はタスクスケジューラなどでC4Bを管理していましたが、Jenkinsの方がジョブの種類やトリガが多く、この便利さを知ってしまうと過去には戻れません。
参考URL:https://chocolatey.org/docs/how-to-setup-internal-package-repository