序章

Jenkinsは、ソフトウェアの継続的インテグレーションと配信に関連する反復的な技術タスクを自動化することを目的としたオープンソースの自動化サーバーです。 プラグインの堅牢なエコシステムと幅広いサポートにより、Jenkinsは、アプリケーションを構築、テスト、およびデプロイするためのさまざまなワークロードのセットを処理できます。

以前のガイドでは、Ubuntu20.04サーバーにJenkinsをインストールし、Nginxリバースプロキシを使用してSSLでJenkinsを構成しました。 このガイドでは、変更がリポジトリにプッシュされたときにアプリケーションを自動的にテストするようにJenkinsを設定する方法を示します。

このチュートリアルでは、JenkinsをGitHubと統合して、新しいコードがリポジトリにプッシュされたときにJenkinsに通知されるようにします。 Jenkinsに通知されると、コードがチェックアウトされ、Dockerコンテナー内でテストされて、テスト環境がJenkinsホストマシンから分離されます。 サンプルのNode.jsアプリケーションを使用して、プロジェクトのCI/CDプロセスを定義する方法を示します。

前提条件

このガイドに従うには、安全なJenkinsインストールで構成された少なくとも1GのRAMを備えたUbuntu20.04サーバーが必要です。 Webインターフェイスを適切に保護するには、Jenkinsサーバーにドメイン名を割り当てる必要があります。 予想される形式でJenkinsを設定する方法については、次のガイドに従ってください。

テスト環境を最適に制御するために、Dockerコンテナー内でアプリケーションのテストを実行します。 Jenkinsが起動して実行されたら、このガイドの手順1と2に従って、サーバーにDockerをインストールします。

上記のガイドを完了したら、この記事を続けることができます。

JenkinsユーザーをDockerグループに追加します

前提条件を満たした後、JenkinsとDockerの両方がサーバーにインストールされます。 ただし、デフォルトでは、Jenkinsプロセスの実行を担当するLinuxユーザーはDockerにアクセスできません。

これを修正するには、を追加する必要があります jenkins ユーザーから docker を使用してグループ usermod 指図:

  1. sudo usermod -aG docker jenkins

あなたはのメンバーを一覧表示することができます docker グループは、 jenkins ユーザーが正常に追加されました:

  1. grep docker /etc/group
Output
docker:x:999:sammy,jenkins

Jenkinsが新しいメンバーシップを使用するには、プロセスを再開する必要があります。

  1. sudo systemctl restart jenkins

デフォルトのプラグインを使用してJenkinsをインストールした場合は、次のことを確認する必要があります。 dockerdocker-pipeline プラグインも有効になっています。 これを行うには、サイドバーから Jenkinsの管理をクリックし、次のメニューからプラグインの管理をクリックします。 プラグインメニューのAvailableタブをクリックして新しいプラグインを検索し、次のように入力します。 docker 検索バーに。 両方の場合 Docker PipelineDocker plugin オプションとして返され、選択されていない場合は両方を選択し、プロンプトが表示されたら、Jenkinsが新しいプラグインを有効にして再起動できるようにします。

これには約1分かかり、その後ページが更新されます。

GitHubでパーソナルアクセストークンを作成する

JenkinsがGitHubプロジェクトを監視するには、GitHubアカウントでパーソナルアクセストークンを作成する必要があります。

GitHub にアクセスし、まだサインインしていない場合は、アカウントにサインインすることから始めます。 その後、右上隅にあるユーザーアイコンをクリックし、ドロップダウンメニューから設定を選択します。

次のページで、左側のメニューの開発者設定セクションを見つけて、個人アクセストークンをクリックします。

次のページの新しいトークンの生成ボタンをクリックします。

新しいトークンのスコープを定義できるページが表示されます。

トークンの説明ボックスに、後で認識できるようにする説明を追加します。

スコープの選択セクションで、 repo:status repo:public_repo 、および admin:org_hookボックスをオンにします。 これらにより、Jenkinsはコミットステータスを更新し、プロジェクトのWebhookを作成できます。 プライベートリポジトリを使用している場合は、リポジトリサブアイテムの代わりに一般的なrepo権限を選択する必要があります。

終了したら、下部にあるトークンの生成をクリックします。

パーソナルアクセストークンのインデックスページにリダイレクトされ、新しいトークンが表示されます。

後で参照できるように、今すぐトークンをコピーしてください。 メッセージが示すように、このページを離れるとトークンを取得する方法はありません。

:上のスクリーンショットで述べたように、セキュリティ上の理由から、このページを離れるとトークンを再表示する方法はありません。 トークンを紛失した場合は、GitHubアカウントから現在のトークンを削除してから、新しいトークンを作成してください。

GitHubアカウントの個人アクセストークンを取得したので、プロジェクトのリポジトリを監視するようにJenkinsを構成できます。

GitHubパーソナルアクセストークンをJenkinsに追加します

トークンができたので、それをJenkinsサーバーに追加して、Webhookを自動的に設定できるようにする必要があります。 インストール時に構成した管理者アカウントを使用して、JenkinsWebインターフェイスにログインします。

右上隅にあるユーザー名をクリックしてユーザー設定にアクセスし、そこから左側のメニューの資格情報をクリックします。 :

次のページで、 Jenkins スコープ内の(グローバル)の横にある矢印をクリックします。 表示されるボックスで、クレデンシャルの追加をクリックします。

新しいクレデンシャルを追加するためのフォームが表示されます。

種類ドロップダウンメニューで、シークレットテキストを選択します。 Secret フィールドに、GitHubパーソナルアクセストークンを貼り付けます。 説明フィールドに入力して、後日このエントリを識別できるようにします。 スコープはグローバルのままにし、IDフィールドは空白のままにすることができます。

終了したら、OKボタンをクリックします。

これで、Jenkinsの他の部分からこれらのクレデンシャルを参照して、構成を支援できるようになります。

GitHubへのJenkinsアクセスを設定する

メインのJenkinsダッシュボードに戻り、左側のメニューで ManageJenkinsをクリックします。

次のページのリンクのリストで、システムの構成をクリックします。

GitHub セクションが見つかるまで、次のページのオプションをスクロールします。 GitHubサーバーの追加ボタンをクリックし、GitHubサーバーを選択します。

セクションが展開され、いくつかの追加情報の入力を求められます。 Credentials ドロップダウンメニューで、前のセクションで追加したGitHubパーソナルアクセストークンを選択します。

接続のテストボタンをクリックします。 Jenkinsは、アカウントに対してテストAPI呼び出しを行い、接続を確認します。

終了したら、保存ボタンをクリックして変更を実装します。

GitHubアカウントでデモンストレーションアプリケーションを設定します

Jenkinsを使用してアプリケーションをテストする方法を示すために、Hapi.jsで作成された「helloworld」プログラムを使用します。 リポジトリへのプッシュに反応するようにJenkinsを設定しているため、デモコードの独自のコピーを用意する必要があります。

プロジェクトリポジトリにアクセスし、右上隅にあるフォークボタンをクリックして、アカウントにリポジトリのコピーを作成します。

リポジトリのコピーがアカウントに追加されます。

リポジトリには package.json ランタイムと開発の依存関係、および含まれているテストスイートの実行方法を定義するファイル。 依存関係は、を実行することでインストールできます npm install テストはを使用して実行できます npm test.

追加しました Jenkinsfile リポジトリにも。 Jenkinsはこのファイルを読み取り、リポジトリに対して実行してビルド、テスト、またはデプロイするアクションを決定します。 これは、Jenkins PipelineDSLの宣言型バージョンを使用して記述されています。

The Jenkinsfile に含まれています hello-hapi リポジトリは次のようになります。

Jenkinsfile
#!/usr/bin/env groovy

pipeline {

    agent {
        docker {
            image 'node'
            args '-u root'
        }
    }

    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                sh 'npm install'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
                sh 'npm test'
            }
        }
    }
}

The pipeline Jenkinsが評価する定義全体が含まれています。 中には、 agent パイプラインのアクションが実行される場所を指定するセクション。 環境をホストシステムから分離するために、Dockerコンテナでテストします。 docker エージェント。

Hapi.jsはNode.jsのフレームワークであるため、 node ベースとしてのDockerイメージ。 指定します root コンテナ内のユーザー。これにより、ユーザーは、チェックアウトされたコードを含む接続されたボリュームと、スクリプトが出力を書き込むボリュームの両方に同時に書き込むことができます。

次に、ファイルは2つの段階、つまり論理的な作業の分割を定義します。 最初のものを「ビルド」、2番目を「テスト」と名付けました。 ビルドステップは診断メッセージを出力してから実行します npm install 必要な依存関係を取得します。 テストステップは別のメッセージを出力してから、で定義されているようにテストを実行します。 package.json ファイル。

これで、有効なリポジトリができました Jenkinsfile、このリポジトリを監視し、変更が導入されたときにファイルを実行するようにJenkinsを設定できます。

Jenkinsで新しいパイプラインを作成する

次に、GitHubパーソナルアクセストークンを使用してリポジトリを監視するようにJenkinsを設定できます。

Jenkinsのメインダッシュボードに戻り、左側のメニューで新しいアイテムをクリックします。

アイテム名を入力フィールドに新しいパイプラインの名前を入力します。 その後、アイテムタイプとしてPipelineを選択します。

下部にあるOKボタンをクリックして次に進みます。

次の画面で、GitHubプロジェクトチェックボックスをオンにします。 表示されるProjecturl フィールドに、プロジェクトのGitHubリポジトリのURLを入力します。

:JenkinsがWebhookを構成する権限を持つように、HelloHapiアプリケーションのフォークをポイントするようにしてください。

次に、 Build Triggers セクションで、GitHubフックトリガーのGITScmポーリングボックスをオンにします。

Pipeline セクションでは、Jenkinsにで定義されたパイプラインを実行するように指示する必要があります。 Jenkinsfile 私たちのリポジトリにあります。 DefinitionタイプをSCMからPipelineスクリプトに変更します。

表示される新しいセクションで、SCMメニューのGitを選択します。 表示されるリポジトリURLフィールドに、リポジトリのフォークへのURLをもう一度入力します。

:繰り返しになりますが、HelloHapiアプリケーションのフォークを指していることを確認してください。

:この例では、 Jenkinsfile パブリックリポジトリ内で利用できます。 プロジェクトに一般公開されていない場合は、クレデンシャルの追加ボタンを使用して、リポジトリへのアクセスを追加する必要があります。 以前のフック構成で行ったように、パーソナルアクセストークンを追加できます。

終了したら、ページ下部の保存ボタンをクリックします。

初期ビルドの実行とWebhookの構成

インターフェイスでリポジトリのパイプラインを定義するときに、JenkinsはWebhookを自動的に構成しません。 Jenkinsをトリガーして適切なフックを設定するには、最初に手動ビルドを実行する必要があります。

パイプラインのメインページで、左側のメニューの今すぐビルドをクリックします。

新しいビルドがスケジュールされます。 左下隅のビルド履歴ボックスに、新しいビルドがすぐに表示されます。 さらに、ステージビューがインターフェイスのメインエリアに描画され始めます。 これにより、さまざまな段階が完了したときに、テスト実行の進行状況が追跡されます。

ビルド履歴ボックスで、ビルドに関連付けられている番号をクリックして、ビルドの詳細ページに移動します。 ここから、左側のメニューのコンソール出力ボタンをクリックして、実行されたステップの詳細を確認できます。

終了したら、左側のメニューのプロジェクトに戻る項目をクリックして、メインパイプラインビューに戻ります。

プロジェクトを一度構築したので、JenkinsにプロジェクトのWebhookを作成させることができます。 パイプラインの左側のメニューで構成をクリックします。

この画面では変更は必要ありません。下部にある[保存]ボタンをクリックするだけです。 Jenkinsは、最初のビルドプロセスからプロジェクトに関する情報を取得したので、ページを保存すると、GitHubプロジェクトにWebhookが登録されます。

これを確認するには、GitHubリポジトリに移動し、設定ボタンをクリックします。 次のページで、サイドメニューからWebhooksをクリックします。 メインインターフェイスにJenkinsサーバーのWebhookが表示されます。

何らかの理由でJenkinsがフックの登録に失敗した場合(たとえば、アップストリームAPIの変更やJenkinsとGithub間の停止など)、 Webhookの追加をクリックしてを確認することで、フックをすばやく追加できます。ペイロードURLはに設定されています https://my-jenkins-server:8080/github-webhook コンテンツタイプはに設定されています application/json、プロンプトの下部にある Addwebhookをもう一度クリックします。

これで、リポジトリに新しい変更をプッシュすると、Jenkinsに通知されます。 次に、新しいコードをプルし、同じ手順を使用して再テストします。

これを概算するには、GitHubのリポジトリページで、緑色のクローンまたはダウンロードボタンの左側にある新しいファイルの作成ボタンをクリックします。

次のページで、ファイル名といくつかのダミーコンテンツを選択します。

終了したら、下部にある新しいファイルをコミットボタンをクリックします。

Jenkinsインターフェースに戻ると、新しいビルドが自動的に開始されます。

リポジトリのローカルコピーにコミットしてGitHubにプッシュバックすることで、追加のビルドを開始できます。

結論

このガイドでは、GitHubプロジェクトを監視し、コミットされた新しい変更を自動的にテストするようにJenkinsを構成しました。 Jenkinsはリポジトリからコードをプルし、分離されたDockerコンテナ内からビルドとテストの手順を実行します。 結果のコードは、同じコードに追加の命令を追加することでデプロイまたは保存できます Jenkinsfile.

GitHubアクションの詳細については、GitHubのドキュメントを参照してください。