世界を旅して人生を楽しもう。(NodeJS&Docker編)Jenkinsに入門したいエンジニア向けにこのブログの記事の中から厳選した爆速で学べる記事を紹介します。はじめにJenkinsはDevOpsに欠かせない継続的インテグレーション(CI)や継続的デプロイ(CD)を実現するための専用ツールです。自前でサーバーを用意してCI/CD環境を構築する場合はこれ一択と言ってよいでしょう。この使い方を学べば、開発したアプリケーションのCI/CD環境を自分で構築できるようになります。それでは、ブートキャンプを始めましょう。カリキュラムJennkinsのインストールから基本的な使い方、メールやSlack通知、GitHubアカウント統合までを学ぶカリキュラムです。~最後にいかがでしたか?このカリキュラムを完遂したなら、Jenkinsをマスターできたに違いありません。これであなたも立派なDevOpsエンジニアの仲間入りですね!それでは。~Docker上でアプリケーション開発から運用まで完結させる開発スタイルは今まさに求められています。今回はDocker前提としてDevOpsのCI/CDを実現させるために、JenkinsにDockerをインストールしてパイプラインで自動ビルドする方法を紹介します。DSLによる新しいジョブの作成方法、NodeJSアプリケーションの自動テスト方法、GitHubのコミットをトリガーにした自動ビルド方法を爆速で紹介しました。Pipelineで自動ビルドする方法を紹介します。以下の準備が完了している必要があります。DockerがインストールされていることGitHubのアカウントがあることDockerHubのアカウントがあること詳しいバージョンは「環境」を参照してください。Docker入りのJenkinsのセットアップまずはDockerコマンドを使えるようにしたJenkinsをセットアップしましょう。ベースを作る必要なフォルダとファイルを作りましょう。CEをJenkins内にインストールするようにします。jenkinsdocker-compose.ymlDockerコンテナ上でDockerコマンドを実行するために「/var/run/docker.sock」のボリュームを設定します。/var/run/docker.sock:/var/run/docker.sockJenkinsの起動それではDockerからJenkinsを起動しましょう。「/var/run/docker.sock」の権限変更を忘れずに行いましょう。*************************************************************...初期化キーとして「c834fdf8220943fab0454f1f0ff823ea」をメモしておきます。Jenkinsのセットアップブラウザで「localhost:8080」にアクセスして、セットアップを完了します。Jenkinsのインストールが完了しました。Dockerの動作確認JenkinsからDockerが実行できるかテストしましょう。ホーム画面から「新しいジョブ」をクリックします。任意のジョブ名(今回は「test_docker」)を入力し、「パイプライン」を選択し、「OK」をクリックします。script」を選択し、以下の「Script」を入力し、「保存」をクリックします。}}「ビルド実行」をクリックしてテストを実行します。ビルドが成功しました。これでDockerがJenkinsから実行されていることを確認できました。今回は最終的にビルドしたDockerイメージをDockerHub上にPushするので、DockerHubのアカウント情報をJenkinsに追加する必要があります。ホーム画面から「認証情報」をクリックします。「Jenkins」をクリックします。credentials」をクリックします。「ユーザー名とパスワード」を選択し、DockerHubのアカウントのユーザ名とパスワードを入力し、任意のID(今回は「dockerhub-credentials」)を付けて、「保存」をクリックします。追加した認証情報が表示されています。DSLを使うので、プラグインをインストールします。Jenkinsの再起動が完了すればOKです。以前の記事「爆速でJenkinsをマスターしよう(NodeJS編)」で作成したNodeJSアプリケーションをそのままDocker化して使いましょう。DockerfileNodeJSアプリケーションのDocker化Docker化して動作確認をしましょう。DockerfileDockerfileを以下のように書きます。startビルドと実行Dockerとしてビルドができ、Docker上でコマンドが実行できることを確認しましょう。masterOKですね。これをGitHubにPushしておきましょう。PipelineのためのJenkinsfileの作成ベースを作るパイプライン用のファイルを準備します。misc/JenkinsfileJenkinsfileにパイプラインの設定を書くJenkinsfileパイプライン上で、GitHubからのクローン、Dockerイメージのビルド、Docker内でのテスト、DockerHubへのイメージのPush、を実行するようにします。}}「{your-dockerhub-account}」は自分のDockerHubのアカウント名を置き換えてください。DSL用のファイルを作成します。DSLには以下のように、5分単位のポーリング、パイプライン用のJenkinsfileのパス指定、を設定します。}}「{your-github-account}」は自分のGitHubのアカウント名に置き換えてください。GitHubにPushするパイプライン用に作成したファイルをGitHubにPushしておきます。Pipelineのジョブを追加するホーム画面から「新規ジョブ作成」から、任意の名前(今回は「seed_job」)を入力し、「フリースタイル・プロジェクトのビルド」を選択し、「OK」をクリックします。「ソースコード管理」の「Git」を選択し、「リポジトリURL」を入力します。DSLs」をクリックします。Scripts」にDSLファイル名を入力し、「保存」をクリックします。Approval」をクリックします。「Approve」をクリックします。これでDSLが承認されました。プロジェクト画面に戻って、「ビルド実行」をクリックします。ビルドが成功し、新しいジョブが作成されました。自動作成されたジョブ内容の確認DSLで自動作成されてパイプラインジョブの設定を確認しましょう。「設定」をクリックします。「説明」が正しく設定されています。「スケジュール」が正しく設定されています。「リポジトリURL」が正しく設定されています。これでパイプラインジョブの設定が完了です。最後に、Jenkins上でDockerを動かし、自動ビルドしてみましょう。「ビルド実行」をクリックします。(キャプチャでは、パイプラインが見やすいように予め複数回ビルドを実行してあります。)ビルドが成功しました。自動的にテストが実行されています。自動的にDockerイメージがDockerHubにPushされています。ジョブの画面に戻ると、パイプラインで実行したステージが確認できます。DockerHubの画面も確認してみましょう。DockerHubにイメージがPushされています。最後にいかがでしたか?これでDockerアプリケーションをJenkinsでビルドする方法やパイプラインの使い方をマスターできたことでしょう。今回はNodeJSベースのDockerアプリケーションですが、当然他の言語でも動きます。JenkinsとDockerを使いこなしてCI/CDを開発現場で実施していきましょう。~DevOpsを実現するための最も有名なCI/CDツールはJenkinsです。今回はDocker環境を前提として、JenkinsのセットアップとNodeJSの自動テストを実施する方法を紹介します。はじめに継続的インテグレーション(CI)や継続的デプロイ(CD)の価値が一般的に認知され、DevOpsはアプリケーションの開発において必須の考え方となっています。このCI/CDを実現する方法としては、外部のサービスを使う方法と自前で専用のサーバーを用意して専用のツールを導入する方法があります。CIなどのサービスが有名で、後者の専用のツールとしてはJenkinsが抜群に有名です。今回はそんな有名なCI/CDツールであるJenkinsのセットアップからNodeJSの自動テストを実施する方法を紹介します。以下の準備が完了している必要があります。DockerがインストールされていることNodeJSがインストールされていることGitHubのアカウントがあることJenkinsのセットアップまずはJenkinsのセットアップからはじめましょう。ベースを作る必要なフォルダとファイルを作成します。docker-compose.ymlDockerファイルを作るDockerfileJenkinsの公式イメージはJenkinsのバージョンが古いため、最新化するためにDockerfileを作成します。jenkinsdocker-compose.ymlJenkinsに設定した内容を記録できるようにボリュームを以下のように設定します。Composeを使ってJenkinsを起動します。*************************************************************...この時、出力される初期化パスワード(今回は「512ed9cfaf384d3fb7d75ee6c8b354d6」)をメモします。Jenkinsの初期設定ブラウザで「localhost:8080」にアクセスします。以下の画面が表示されるので、先程メモしておいた初期化パスワードを入力して「Continue」をクリックします。次に推奨設定でプラグインをインストールします。必要なプラグインが自動でインストールされるので、特に理由がなければ推奨設定でよいでしょう。Continue」をクリックします。JenkinsのURLはデフォルトで「http://localhost:8080」なので、必要があれば変更しましょう。Finish」をクリックします。Jenkins」をクリックします。Jenkinsのホーム画面が表示されればOKです。これでJenkinsのセットアップが完了しました。サンプルNodeJSアプリケーションの作成CIの対象となるNodeJSアプリケーションを簡単に作成しましょう。ベースを作る必要なフォルダとファイルを作成し、テスト用のパッケージをインストールします。jest実装するそれでは簡単な四則演算のアプリケーションを作ります。GitHubにPushする後でJenkinsから利用できるようにGitHubにPushしておきましょう。お決まりですが、GitHub上で以下のようにリポジトリを作ります。以下のようにしてPushしましょう。master「{your-github-account}」は自分のGitHubアカウントに置き換えてください。これでサンプルのNodeJSアプリケーションが完成しました。DSLによる新しいジョブの追加それではJenkinsに戻りましょう。DSLを説明しておきます。Language)で書いておき、それを読み込むだけでGUIを使わずに新しいジョブを作成する仕組みです。code(IaC)と言われているように、インフラであっても人が手動で設定するのではなく、設定をソースコードにして自動的に設定されるべきです。DSLは有効な手段です。今回はGitHubのソースコードがコミットされたらそれを検知する設定をします。その設定方法は以下の2種類があります。GitHubリポジトリにJenkinsへのWebhookを設定しておき、新しいコミットが発生したタイミングでJenkinsに通知してビルドを実行するPull型の方が昔からあるのでメジャーな方法ですが、基本的にはどちらでも問題無いでしょう。どちらかと言うと、Jenkinsを配置するネットワーク環境に応じてどちらを使うかが変わります。プライベートネットワーク上にJenkinsを構築してVPNでJenkinsを使用している場合、Webhookは使用できないのでPull型の方法を選択することになります。Group)からGitHubを許可すればWebhookが使えるので、Push型の方法を採用できます。今回はPull型の方法で進めていきます。NodeJSプラグインを入れるJenkinsからNodeJSを実行するためにNodeJSプラグインをインストールしましょう。ホーム画面から「Jenkinsの管理」をクリックします。「プラグインの管理」をクリックします。「NodeJS」を選択して、「ダウンロードして再起動後にインストール」をクリックします。「インストール完了後、ジョブがなければJenkinsを再起動する」をクリックします。Jenkinsが再起動したら完了です。NodeJSをJenkinsにインストールするNodeJSをインストールしましょう。Configuration」をクリックします。「NodeJS追加」をクリックし、任意の名前(今回は「nodejs_v11」)をつけて、「自動インストール」にチェックを入れいます。「Save」をクリックします。これでJenkinsにNodeJSがインストールされました。DSLプラグインが必要です。NodeJSプラグインを入れた時と同じように、「Jenkinsの管理」から「プラグインの管理」でインストールできます。Jenkinsが再起動されれば完了です。DSLを作成するそれでは新しいジョブ用のDSLファイルを作成します。nodejs.groovynodejs.groovyDSLは以下のようにします。}}「{your-github-account}」は自分のGitHubアカウントに置き換えてください。DSLの内容は、対象Gitリポジトリの指定、5分毎のポーリング設定、NPMのテスト実行、です。このDSLをGitHubにPushしておきます。DSLの作成は完了です。DSLをGitHubから読み込んで新しいジョブを作成しましょう。Jenkinsのホーム画面から、「新しいジョブ」をクリックします。任意のジョブ名(今回は「seed_project」)を入力し、「フリースタイル・プロジェクトのビルド」を選択し、「OK」をクリックします。「ソースコード管理」で「Git」を選択し、「リポジトリURL」(今回は「https://github.com/{your-github-account}/devops_sample_nodejs.git」)を入力します。DSLs」をクリックします。Scripts」にDSLファイルのパスを入力します。「保存」をクリックして完了です。このDSLを実行するには承認プロセスが必要です。Approval」をクリックします。対象のDSLのところに表示されている「Approved」をクリックしてDSLファイルを承認します。「seed_project」に戻り、「ビルド実行」をクリックします。以下のようにSUCCESSになればビルドが完了です。ホーム画面に戻ると、以下のように新しいジョブが作成されています。新しいジョブの中身を見てみましょう。「設定」をクリックします。「ソースコード管理」に正しくGitHubリポジトリが設定されています。「ビルド・トリガ」に「SCMポーリング」の設定が5分単位でポーリングするように設定されています。ちなみに、この設定はcronと同じ記述方法です。「ビルド環境」にNodeJSプラグインでインストールしたNodeJSバージョン11の環境が指定されています。「ビルド」に自動テストのためのシェルスクリプトが設定されています。DSLの内容が正しく設定されていることが確認できました。これで新しいジョブの追加が完了しました。最後にCIの動作確認をしていきましょう。ジョブの実行による自動テストそれでは「ビルド実行」をクリックしてビルドを開始します。テストが正しく実行されています。GitHubへコミットをトリガーとして自動ビルドそれでは、ソースコードを変更してコミットしてみましょう。utils.jsには足し算と引き算の関数だけがありましたが、掛け算と割り算を追加しましょう。});});これをコミットします。masterしばらくすると(5分以内)、以下のようにJenkinsがコミットを検知して自動的にビルドが開始されます。テストが正しく実行されています。最後にいかがでしたか?これでJenkinsを爆速でマスターできたのではないでしょうか。CI/CDを実施して、継続的に品質の高いアプリケーションを生み出していきましょう。AuthorKD世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。0.0010このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。