はじめに
本記事はJenkinsとGitHubを連携してGitHubのmainブランチにプッシュされた際に自動的にビルドを行い成果物をSSHで別のサーバーへ送信するところまでを行います。
本記事でGitHubへの接続の設定を個人アクセストークンとSSH方式の両方で行っていますがどちらか片方で問題ありません。またパブリックリポジトリの場合は必要ありません。
環境
- Ubuntu Server: 24.04.1
- Jenkins: 2.479.2
- Java: 17
手順
Jenkinsのインストール
まずJenkinsはJavaアプリケーションなのでJavaが必要です。以下のコマンドを実行しインストールされているか確認してください
java -version
インストールされてない場合:
sudo apt update
sudo apt install fontconfig openjdk-17-jre
JavaのインストールができたらJenkinsをインストールします。(以下のコマンドはUbuntu用)
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins
インストール後にJenkinsが起動しているか確認します。
sudo systemctl status jenkins
「Active: active (running)」となっていればOKです。なっていなければ起動します。
sudo systemctl start jenkins #起動していない場合
Jenkinsのセットアップ
Jenkinsをインストールしたサーバーの8080ポートにブラウザからアクセスします。アドレスは「http://”アドレス”:8080」(“アドレス”にはサーバーのアドレス)です。
アクセスすると以下のような画面になります。

この画面になったら以下のコマンドで管理者パスワードを取得して入力します。
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Continueを押し、以下の画面になったら今回は「Install suggested plugins」を選択します。

インストールが完了するまでしばらく待ちます。
GitHubと連携するための設定(個人アクセストークン)
GitHubで個人アクセストークンの取得
GitHubにアクセスし右上のアイコンをクリックし「Settings」を選択します。
左側のメニューから「Developer settings」をクリックします。

Developers settingsから「Personal access tokens」の「Tokens(classic)」を選択します。

Generate new tokenをクリックし、「Generate new token(classic)」を選択します。

トークンの期限を選択します。(今回は90日)
下の選択肢から「repo」をチェックし画面の一番下の「Genarate Token」をクリックしトークンを生成します。

トークンが生成されると以下のような画面になります。
トークンは一度しか表示されないのでどこかへ控えておいてください。
失敗した場合もう一度作成してください。

Jenkinsの設定
Jenkinsに戻り「Credentials」を選択します。

System -> グローバルドメイン -> Add credentialsの順に選択します。



New credentialsで種類はユーザー名とパスワードを選択、ユーザー名にGitHubのユーザー名、パスワードに先ほど作成したトークン、IDにはわかりやすいように適当な名前を入力してCreateをクリックします。

以上で個人アクセストークンを使用するための設定は完了です。
GitHubと連携するための設定(SSH)
SSH鍵の準備
ターミナルからSSHキーを作成します。以下のコマンドを実行しすべてEnterをクリックします。
ssh-keygen -t ed25519
GitHubへ鍵の登録
以下のコマンドで公開鍵を取得します。コマンドの結果をコピーしておきます。
cat .ssh/id_ed25519.pub
GitHubのSettingsから「SSH and GPG keys」を選択し、右上の「New SSH key」をクリックします。

Titleに適当な名前を、Keyに先ほどコピーした公開鍵を入力し「Add SSH key」をクリックします。

Jenkinsの設定
ターミナルで以下のコマンドを実行し秘密鍵の中身を取得しコピーしておきます。
秘密鍵ですので扱いには注意して下さい。
cat .ssh/id_ed25519
Jenkinsに戻り「Credentials」を選択します。
CredentialsからSystem -> グローバルドメイン -> Add credentialsの順に選択します。
New credentialsで種類はSSHユーザー名と秘密鍵を選択します。、IDにはわかりやすいように適当な名前を、IDにはGitHubのユーザー名を入力します。秘密鍵の直接入力を選択「Add」をクリックし、先ほどの秘密鍵を入力してCreateをクリックします。

Jenkinsの管理から「Security」を選択します。

Securityの画面下部の「Git Host Key Verification Configuration」のHost Key Verification Strategyを「Accept first connection」に変更して保存します。

以上で個人アクセストークンを使用するための設定は完了です。
SSHで成果物を送信するための設定
プラグインのインストール
Jenkinsの管理からPluginsを選択します。

Available pluginsを選択

上の検索から「Publish Over SSH」と検索

Installをチェックし、右上のInstallを押します。

SSHホストの登録
Jenkinsの管理からを選択します。

下側にある「Publish over SSH」からSSH Serversの「追加」をクリックします。

Nameに適当な名前、HostnameにSSH接続先のアドレス、Usernameに接続先のユーザーネーム、「Use password authentication, or use a different key」をチェックしパスワードなどの必要なものを入力します。

下にある「Test Configuration」をクリックし「Success」となれば成功です。保存して設定は終わりです。
プロジェクトの設定
プロジェクトの作成
Jenkinsのトップにもどり「新規ジョブ作成」をクリックします。

適当な名前を入力し、「フリースタイル・プロジェクトのビルド」を選択し「OK」をクリックします。

GitをチェックしリポジトリのURLを入力し認証情報に先ほど登録した設定を選択します。

リポジトリのブランチを選択します。今回はmainブランチを使用します。デフォルトだとmasterになっているので自分の環境に合わせてください。

GitHubへのプッシュで自動ビルドするための設定
「GitHub hook trigger for GITScm polling」をチェックします。

GitHubへ移動し使用するリポジトリのSettingsを選択します。

左側のメニューから「Webhooks」を選択、「Add webhook」をクリックします。

「Payload URL」にjenkinsのアドレスに/github-webhook/を足したものを入力し保存します。

Jenkinsに戻ります。
ビルドの設定
ビルド手順を追加をクリックしビルド方法を選択します。今回は例としてGradleを使用します。

Gradleの例:

成果物をSSHで送信するための設定
「ビルド後の処理の追加」をクリックし、「Send build artifacts over SSH」を選択します。

Nameに先ほど登録したSSH設定を選択、Source filesに送りたいファイルを選択、Remove prefixはSource filesにディレクトリが含まれる場合そのディレクトリも送られてしまうのですがそれを削除する設定です。
以下の設定の場合build/libs/ディレクトリのなかの.jarのすべてのファイルを/build/libsをなくしたものを送信します。(つまり送信されるのは.jarファイルをだけです。)
また、ファイルがわからない場合登録せずにビルドを行い、ワークスペースから確認してから登録することをお勧めします。

プロジェクトを保存します
テスト
GitHubの指定したブランチにプッシュをして自動でビルドが始まれば成功です。
ビルドが実行されているかはプロジェクトのページから見れます。

おわりに
ここまで読んでいただきありがとうございます。動かない場合やこの記事が間違っている場合教えていただけると助かります。
参考
Jenkins User Documentation:https://www.jenkins.io/doc/
コメント