はじめに
Azure Pipelines は、自前で環境を用意しなくても、Microsoftが用意している環境を使ってビルド&デプロイできます。
ただ、プライベートなプロジェクトの場合は利用時間に上限(1800分/月)があり、長いテストを走らせたりしていると月半ばで上限に達してしまうことがあります。
自前で環境を用意(セルフホスト)すれば、この上限がなくなります。
手順
公式ドキュメント にはわかりづらいところがあるので、あらためてまとめてみます。
事前準備
作業を始める前に、準備しておくものがあります。
- PAT(Personal Access Token) →→→ DevOpsの画面から作成して取得します。
- エージェント →→→ githubからダウンロードします。
- エージェントインストール先の仮想マシンか物理マシン
OSは、ビルドしたいものに合わせます。
Linuxであれば、Ubuntu 18.04 がオススメです。19.04 は未サポートです。
エージェントのインストール
事前準備ができたら、対象マシンにエージェントをインストールします。
全体の概略は以下の通りです。
- エージェントを動かすユーザを作成
- エージェントをインストール
- エージェントを設定
- エージェントをサービスとして動かす
ひとつずつ見ていきます。
エージェントを動かすユーザを作成
以下の要件でユーザを作成しました。
設定項目 | 値 |
---|---|
GID | 660 |
グループ名 | vstsagent |
UID | 660 |
ユーザー名 | vstsagent |
シェル | /usr/sbin/nologin |
ホームディレクトリ | /opt/vstsagent |
sudo useradd --uid 660 --system --shell /usr/sbin/nologin --home-dir /opt/vstsagent --create-home vstsagent
エージェントをインストール
ファイルをホームディレクトリに展開します。
ホームディレクトリ必須です。
sudo -u vstsagent tar zxf vsts-agent-linux-x64-2.159.0.tar.gz -C /opt/vstsagent
エージェントを設定
展開したファイル中にあるconfig.sh
を実行します。
cd /opt/vstsagent
sudo -u vstsagent ./config.sh
いくつか質問が表示されるので答えていきます。
質問項目 | 値 |
---|---|
Server URL | https://dev.azure.com/****** <== 実際はDevOps組織のURL |
Authentication Type | 既定 (PAT) |
Personal Access Token | 事前準備で取得したもの |
Agent Pool | DevOps組織の中にあるAgent Pool名(defaultでOK) |
Agent name | 表示されるエージェント名(既定でOK) |
Work folder | /mnt/vstswork1 |
エージェントをサービスとして動かす
ユーザー vstsagent で動かすようにします。
sudo ./svc.sh install vstsagent
開発ツールのインストール
使用する開発ツールもインストールします。
- build-essential (コンパイラ等)
- Node
- DotNet SDK
- Azure CLI
- ...等
落ち穂拾い
Azure VMにおける消えるリソースディスクへの対応
シャットダウン時に消えてしまうリソースディスク内に作業ディレクトリを置くことにしたので、起動時に作成するようにしました。
systemd用のファイルを作成します。
[Unit]
Description=Create a work folder for the VSTS agent
After=cloud-config.service
ConditionVirtualization=microsoft
ConditionPathIsMountPoint=/mnt
ConditionPathExists=/dev/disk/azure/resource-part1
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/create-vsts-work-dir
RemainAfterExit=yes
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
起動時に動くようにします。
systemctl enable create-vsts-work-dir
実行するシェルスクリプトも作成します。
ファイル全体は https://github.com/sengokyu/create-vsts-work-dir へ置きました。
トラブルシューティング
node.jsがインストールされていないと言われる
問題: ビルドの途中で、node.jsがインストールされていないというエラーが出ます。
解決策?: エージェントをホームディレクトリに展開したら大丈夫でした。
エラー "No agent found in pool Default which satisfies the specified demands: npm Agent.Version " が出力される
問題: Pipelineの中でnpmを使えません。
解決策?: エージェントのバージョンを2.158から2.159にしたら動きました。
エラー "null: zip" と言われる
問題: パッケージやZIPタスクでエラーが起きます。
解決策: zipをインストールします。apt-get install zip
リンク
- https://github.com/microsoft/azure-pipelines-agent エージェントはここから最新版をダウンロードした方が良いです。
-
https://github.com/microsoft/azure-pipelines-image-generation MicrosoftがホストしているVMのイメージを作成するpackerがあります。
- https://github.com/microsoft/azure-pipelines-image-generation/blob/master/images/linux/ubuntu1804.json Ubuntu 18.04のpackerファイルです。
-
自分はAzure VMを用意したので、アクセスが速いリソースディスク(/mntにマウントされている)を使うようにしました。リソースディスクは再起動で消えるので、ディレクトリは別途起動時に作成する必要があります。 ↩