Open4

Google Compute Engine Pluginを使用して、Jenkins Agentを立ち上げるまで

yotto428yotto428

1. Jenkinsマスター作成

マスターはどこでもいいので、今回はローカルのMacに立てた。

  • MacOS : 12.6.3(Monterey)
  • Jenkins Version : 2.361.2

Jenkinsインストール

  1. https://www.jenkins.io/download/lts/macos/ を参考に進める。
  • ※その時の最新(2.375.3)がインストールされる
$ brew install jenkins-lts        
==> Downloading https://formulae.brew.sh/api/formula.json

==> Downloading https://formulae.brew.sh/api/cask.json

==> Fetching jenkins-lts
==> Downloading https://ghcr.io/v2/homebrew/core/jenkins-lts/manifests/2.375.3
Already downloaded: /Users/yuta.okamoto/Library/Caches/Homebrew/downloads/69b4bd9dd85ba5d09faacda3cf9d19487e8653734df50aedf2b5d1c729f147a2--jenkins-lts-2.375.3.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/jenkins-lts/blobs/sha256:5cee0d
Already downloaded: /Users/yuta.okamoto/Library/Caches/Homebrew/downloads/e059e8f10665b623e74509a15534552e9e68143811276d9fee39a522b44fafef--jenkins-lts--2.375.3.monterey.bottle.tar.gz
==> Pouring jenkins-lts--2.375.3.monterey.bottle.tar.gz
==> Caveats
Note: When using launchctl the port will be 8080.

To start jenkins-lts now and restart at login:
  brew services start jenkins-lts
==> Summary
🍺  /usr/local/Cellar/jenkins-lts/2.375.3: 8 files, 93.2MB
==> Running `brew cleanup jenkins-lts`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
  1. Jenkins 2.361.2のバイナリをとってくる
$ cp ~/Downloads/jenkins.war /usr/local/opt/jenkins-lts/libexec 
  1. Jenkinsマスター起動
$ brew services start jenkins-lts
yotto428yotto428

2. Jenkinsマスターの設定

  1. 表示されてるパスのファイルに記載されてるinitialAdminPasswordをコピーして入力。
cat ~/.jenkins/secrets/initialAdminPassword | pbcopy

  1. 初期設定のPluginを選ぶ。
  • ここではGoogleComputeEngine Pluginを入れれないのでどっちでも。
  1. ログインユーザーを作成する。
  • Skipもできるが、初期adminパスを使いまわすのは推奨できないので、おとなしく作成。
  1. Jenkins URLの設定。
  • とりあえずhttp://localhost:8080/のまま。
  1. 設定完了
yotto428yotto428

3. Google Compute Engine Pluginの設定

  1. プラグインから Google Compute Engine Pluginをインストール。
  2. 「Jenkinsの管理」から「ノード管理」を開く。
  3. 左メニューに「Configure Clouds」が増えてるので開く。

Google Compute Engine

  • Name: 設定名。なんでもいい。
  • Project ID: GCPプロジェクトのID。
  • Instance Cap: 最大起動するインスタンス数。ノードがオフライン状態(インスタンス破棄中 or ノード削除中)のときとかだとそれが破棄されるまで次が立ち上がらないので少し多めがいいかも。
  • Service Account Credentials : GCPサービスアカウントの認証情報
    • とりあえず試したかったので下記の権限を雑に設定。
      • Compute管理者
      • Computeインスタンス管理者(ベータ版)
      • Computeインスタンス管理者(V1)
      • Computeネットワーク管理者
      • サービスアカウントユーザー
    • GCPコンソールからJsonキーを生成し、Jenkins側のCredentialに追加
      • 種類: Google Service Account from private key
      • Project Name: GCPプロジェクトのID。
      • JSON key: GCPコンソールからダウンロードしたJsonファイルを選択。
  • No delay provisioning: ONなら負荷だと思ったらすぐにノード立ち上げするようになる?

Instance Configurations

  • General
    • Name Prefix: 立ち上がるNodeのprefix名称。なんでもいい。
    • Description: 何でもいい。
    • Node Retention Time: 使ってないノードが破棄されるまでの時間。
      • 起動待ち時間のLaunch Timeoutと同じかそれ以上であるのが望ましい。
    • 用途: 特定のジョブ専用ノードにするかどうか
    • Labels: ジョブ側がどのノードで実行するかを判断するラベル
    • Number of Executors: 1ノード内で実行するジョブ数
  • Launch Configuration
    • Launch Timeout: GCEインスタンスが起動するまでの待ち時間。
    • Use Internal IP?
    • Ignore Jenkins Proxy?
    • Run as user
    • Use Custom SSH Private Key?
    • Remote Location
    • Java Exec Path
    • Windows?
      • このあたりはデフォルトのまま。
  • One-Shot
    • Enabled: 1ジョブ1ノードの設定。そのジョブが終わったらノードを破棄する。
    • Create snapshot?: ジョブが中断、失敗した際にスナップショットを作るか(ノードが破棄されちゃうので)
  • Location
    • Region : us-central1
    • Zone : us-central1-a
  • Machine Configuration
    • Template to use : インスタンステンプレートを使うか。使わないなら自前で高度な設定から設定する。
  • 一度自前でインスタンスを立て、インスタンス内でJDK11を入れておく。その後このディスクをもとにカスタムイメージを作成。
$ sudo apt-get update
$ sudo apt-get install -y openjdk-11-jdk
yotto428yotto428

4. GCE Agentの立ち上げ

手動で起動

  • ノードの管理」から、マスターノードの欄にある「Provision via xxxx」のプルダウンを選択
  • 「Configure Clouds」で設定したGCE設定名の名前が出てくる
  • 設定名を選択すると、GCEインスタンス及びAgentが起動する

ジョブの実行をトリガーに起動

  • ジョブを作成し、ラベルに「Configure Clouds」で設定したラベルを指定。
  • ジョブが実行されるとGCEインスタンス及びAgentが起動する。
  • インスタンスが起動完了したらジョブが実行。ジョブが終了したらGCEインスタンス及びAgentが破棄される。