前書き

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

以前のガイドでは、https://www.digitalocean.com/community/tutorials/how-to-install-jenkins-on-ubuntu-16-04 [Ubuntu 16.04サーバーにJenkinsをインストール]およびhttps:// www。 digitalocean.com/community/tutorials/how-to-configure-jenkins-with-ssl-using-an-nginx-reverse-proxy[Nginxリバースプロキシを使用してSSLでJenkinsを構成]。 このガイドでは、変更がリポジトリにプッシュされたときにアプリケーションを自動的にテストするようにJenkinsをセットアップする方法を示します。

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

前提条件

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

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

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

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

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

これを修正するには、 + usermod`コマンドを使用して + jenkins`ユーザーを `+ docker`グループに追加する必要があります。

sudo usermod -aG docker jenkins

+ jenkins`ユーザーが正常に追加されたことを確認するために、 + docker`グループのメンバーをリストできます:

grep docker /etc/group
Outputdocker:x:999:sammy,jenkins

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

sudo systemctl restart jenkins

インストール時に有効にしたデフォルトのプラグインのいくつかの助けを借りて、JenkinsはDockerを使用してビルドおよびテストタスクを実行できるようになりました。

GitHubで個人用アクセストークンを作成する

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

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/github_settings_item.png [GitHub設定項目]

次のページで、左側のメニューの[開発者設定]セクションを見つけ、[パーソナルアクセストークン]をクリックします。

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/developer_settings.png [GitHubパーソナルアクセストークンリンク]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/new_token_button.png [GitHubが新しいトークンボタンを生成する]

新しいトークンのスコープを定義できるページに移動します。

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/token_description.png [GitHubトークンの説明]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/token_scope3.png [GitHubトークンスコープ]

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

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/view_token.png [GitHubビューの新しいトークン]

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

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

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

トークンを取得したので、Jenkinsサーバーにトークンを追加して、Webhookを自動的にセットアップできるようにする必要があります。 インストール中に設定した管理アカウントを使用して、Jenkins Webインターフェースにログインします。

メインダッシュボードで、左側のメニューの[資格情報]をクリックします。

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/credentials_item.png [Jenkins認証項目]

次のページで、* Jenkins スコープ内の(global)*の横にある矢印をクリックします。 表示されるボックスで、[認証情報の追加]をクリックします:

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/add_credentials.png [Jenkinsの資格情報の追加ボタン]

新しい資格情報を追加するためのフォームが表示されます。

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/credentials_form.png [Jenkinsクレデンシャルフォーム]

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

これで、Jenkinsの他の部分からこれらの資格情報を参照して、構成を支援できるようになります。

GitHubへのJenkinsアクセスのセットアップ

メインのJenkinsダッシュボードに戻り、左側のメニューの[* Jenkinsの管理]をクリックします。

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/credentials_item.png [Jenkins認証項目]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/configure_system_link.png [Jenkinsシステムリンクの構成]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/add_github_server.png [Jenkins add GitHub server]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/select_credentials.png [JenkinsはGitHub資格情報を選択]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/test_creds.png [JenkinsがGitHub資格情報をテストする]

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

GitHubアカウントでデモンストレーションアプリケーションをセットアップする

Jenkinsを使用してアプリケーションをテストする方法を示すために、https://hapijs.com/ [Hapi。 js]。 リポジトリへのプッシュに反応するようにJenkinsを設定しているため、デモンストレーションコードの独自のコピーが必要です。

https://github.com/do-community/hello_hapi [プロジェクトリポジトリ]にアクセスし、右上隅の[フォーク]ボタンをクリックして、アカウントにリポジトリのコピーを作成します。

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/fork_example_project.png [プロジェクト例のフォーク]

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

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

リポジトリに「+ Jenkinsfile +」も追加しました。 Jenkinsはこのファイルを読み取って、リポジトリに対して実行、ビルド、テスト、または展開するアクションを決定します。 Jenkins Pipeline DSLの宣言バージョンを使用して書かれています。

`+ 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'
           }
       }
   }
}

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

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

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

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

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

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

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/credentials_item.png [Jenkinsサイドメニュー]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/item_type.png [Jenkinsパイプラインタイプ]

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

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/add_github_project.png [Jenkins add GitHubプロジェクト]

次に、* Build Triggers セクションで、 GitHub hook trigger for GITScm polling *ボックスをオンにします。

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/github_hook_box.png [Jenkins GitHub hook box]

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

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/add_pipeline_repo2.png [Jenkins GitHubパイプラインリポジトリの追加]

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

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

この記事の執筆時点(2017年6月)では、インターフェイスでリポジトリのパイプラインを定義するときに、Jenkinsはwebhookを自動的に構成しません。

Jenkinsをトリガーして適切なフックを設定するには、最初に手動ビルドを実行する必要があります。

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/build_pipeline_now.png [Jenkins build pipeline now]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/build_progress.png [Jenkinsビルドの進行状況]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/console_output.png [Jenkins console output]

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

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/configure_menu_item.png [Jenkins設定項目]

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

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/view_webhooks.png [Jenkins view webhooks]

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

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/create_new_file_button.png [Jenkins新規ファイル作成ボタン]

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/new_file_contents.png [Jenkinsの新しいファイルの内容]

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

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

image:https://assets.digitalocean.com/articles/jenkins_usage_1604/new_build_started.png [Jenkinsの新しいビルドが開始されました]

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

結論

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