Ubuntu16.04のJenkinsで継続的インテグレーションパイプラインを設定する方法
序章
Jenkinsは、ソフトウェアの継続的インテグレーションと配信に関連する反復的な技術タスクを自動化することを目的としたオープンソースの自動化サーバーです。 プラグインの堅牢なエコシステムと幅広いサポートにより、Jenkinsは、アプリケーションを構築、テスト、およびデプロイするためのさまざまなワークロードのセットを処理できます。
以前のガイドでは、Ubuntu16.04サーバーにJenkinsをインストールし、Nginxリバースプロキシを使用してSSLでJenkinsを構成しました。 このガイドでは、変更がリポジトリにプッシュされたときにアプリケーションを自動的にテストするようにJenkinsを設定する方法を示します。
このチュートリアルでは、JenkinsをGitHubと統合して、新しいコードがリポジトリにプッシュされたときにJenkinsに通知されるようにします。 Jenkinsに通知されると、コードがチェックアウトされ、Dockerコンテナー内でテストされて、テスト環境がJenkinsホストマシンから分離されます。 サンプルのNode.jsアプリケーションを使用して、プロジェクトのCI/CDプロセスを定義する方法を示します。
前提条件
このガイドに従うには、安全なJenkinsインストールで構成された少なくとも1GのRAMを備えたUbuntu16.04サーバーが必要です。 Webインターフェイスを適切に保護するには、Jenkinsサーバーにドメイン名を割り当てる必要があります。 予想される形式でJenkinsを設定する方法については、次のガイドに従ってください。
- Ubuntu16.04にJenkinsをインストールする方法
- Ubuntu16.04にNginxをインストールする方法
- Ubuntu16.04でLet’sEncryptを使用してNginxを保護する方法
- Nginxリバースプロキシを使用してSSLでJenkinsを構成する方法
テスト環境を最適に制御するために、Dockerコンテナー内でアプリケーションのテストを実行します。 Jenkinsが起動して実行されたら、このガイドの手順1と2に従って、サーバーにDockerをインストールします。
上記のガイドを完了したら、この記事を続けることができます。
JenkinsユーザーをDockerグループに追加します
前提条件を満たした後、JenkinsとDockerの両方がサーバーにインストールされます。 ただし、デフォルトでは、Jenkinsプロセスの実行を担当するLinuxユーザーはDockerにアクセスできません。
これを修正するには、を追加する必要があります jenkins
ユーザーから docker
を使用してグループ usermod
指図:
- sudo usermod -aG docker jenkins
あなたはのメンバーを一覧表示することができます docker
グループは、 jenkins
ユーザーが正常に追加されました:
- grep docker /etc/group
Outputdocker:x:999:sammy,jenkins
Jenkinsが新しいメンバーシップを使用するには、プロセスを再開する必要があります。
- sudo systemctl restart jenkins
インストール中に有効にしたデフォルトのプラグインのいくつかの助けを借りて、JenkinsはDockerを使用してビルドおよびテストタスクを実行できるようになりました。
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
リポジトリは次のようになります。
#!/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の構成
この記事の執筆時点(2017年6月)では、インターフェースでリポジトリーのパイプラインを定義するときに、JenkinsはWebhookを自動的に構成しません。
Jenkinsをトリガーして適切なフックを設定するには、最初に手動ビルドを実行する必要があります。
パイプラインのメインページで、左側のメニューの今すぐビルドをクリックします。
新しいビルドがスケジュールされます。 左下隅のビルド履歴ボックスに、新しいビルドがすぐに表示されます。 さらに、ステージビューがインターフェイスのメインエリアに描画され始めます。 これにより、さまざまな段階が完了したときに、テスト実行の進行状況が追跡されます。
ビルド履歴ボックスで、ビルドに関連付けられている番号をクリックして、ビルドの詳細ページに移動します。 ここから、左側のメニューのコンソール出力ボタンをクリックして、実行されたステップの詳細を確認できます。
終了したら、左側のメニューのプロジェクトに戻る項目をクリックして、メインパイプラインビューに戻ります。
プロジェクトを一度構築したので、JenkinsにプロジェクトのWebhookを作成させることができます。 パイプラインの左側のメニューで構成をクリックします。
この画面では変更は必要ありません。下部にある[保存]ボタンをクリックするだけです。 Jenkinsは、最初のビルドプロセスからプロジェクトに関する情報を取得したので、ページを保存すると、GitHubプロジェクトにWebhookが登録されます。
これを確認するには、GitHubリポジトリに移動し、設定ボタンをクリックします。 次のページで、サイドメニューからWebhooksをクリックします。 メインインターフェイスにJenkinsサーバーのWebhookが表示されます。
これで、リポジトリに新しい変更をプッシュすると、Jenkinsに通知されます。 次に、新しいコードをプルし、同じ手順を使用して再テストします。
これを概算するには、GitHubのリポジトリページで、緑色のクローンまたはダウンロードボタンの左側にある新しいファイルの作成ボタンをクリックします。
次のページで、ファイル名といくつかのダミーコンテンツを選択します。
終了したら、下部にある新しいファイルをコミットボタンをクリックします。
Jenkinsインターフェースに戻ると、新しいビルドが自動的に開始されます。
リポジトリのローカルコピーにコミットしてGitHubにプッシュバックすることで、追加のビルドを開始できます。
結論
このガイドでは、GitHubプロジェクトを監視し、コミットされた新しい変更を自動的にテストするようにJenkinsを構成しました。 Jenkinsはリポジトリからコードをプルし、分離されたDockerコンテナ内からビルドとテストの手順を実行します。 結果のコードは、同じコードに追加の命令を追加することでデプロイまたは保存できます Jenkinsfile
.