テクノロジー 開発 非公開: 初めての Jenkins パイプラインを作成するには?

初めての Jenkins パイプラインを作成するには?

Jenkins パイプラインを作成するためのステップバイステップ ガイド

Jenkins パイプラインを使用する理由

継続的デリバリー (CD) は、DevOps ライフサイクルの重要な部分です。

これにより、開発者が作成しているソフトウェア/アプリケーションが常に本番環境に対応できるようになります。これを実現するには、コードが更新されるたびに、継続的にビルド、テスト、デプロイする必要があります。ここで Jenkins Pipeline が登場します。

DevOps では、継続的インテグレーションと継続的デリバリー (CI/CD) は Jenkins Pipeline を通じて実現されます。 Jenkins Pipeline for CD を使用すると、ソフトウェアをより迅速かつ頻繁にリリースして提供できます。これは、次のリリースごとにフィードバックを組み込むのに役立ちます。

ジェンキンスパイプラインとは何ですか?

Jenkins Pipeline は、Jenkins を使用してソフトウェアを継続的に配信するためのジョブの組み合わせです。

Jenkins が何であるかはご存知かと思います。まだの場合は、この Udemy コースをチェックして Jenkins をマスターしてください 。

Jenkins パイプラインは複数の状態またはステージで構成されており、それらは順番に実行されます。 JenkinsFile は、Jenkins でコードとしてパイプラインを作成するために使用される単純なテキスト ファイルです。これには、記述が簡単で人間が判読できる Groovy ドメイン固有言語 (DSL) のコードが含まれています。

JenkinsFile を個別に実行することも、Jenkins Web UI からパイプライン コードを実行することもできます。 Jenkins を使用してパイプラインを作成するには 2 つの方法があります。

  • 宣言型 – Jenkins パイプラインを作成する新しい方法。ここでは、SCM (ソース コード管理) にチェックインされる「パイプライン」ブロックを含む Groovy コードを記述します。
  • スクリプト – コードが「ノード」ブロック内で定義される、魅力的なコードを記述する方法。

デモに入る前に、Jenkins をインストールしていない場合は、まずインストールしてください。システム上で Jenkins が稼働していることを確認してください。

Jenkins パイプラインを作成する

Jenkins パイプライン フローは次のようになります。このフローは、ソフトウェア (コーディング) を作成する開発者と本番環境で提供されるソフトウェアの間の複数のステージで構成されます。

ジェンキンスパイプライン
ジェンキンスパイプライン

宣言型パイプラインを作成しましょう。

Jenkins ダッシュボードで、[新しい項目] をクリックします。次に、項目名 (例: 「First Pipeline」) を入力し、「Pipeline」プロジェクトを選択します。次に、「OK」をクリックします。

新しいアイテム - Jenkins パイプライン
新しいアイテム – Jenkins パイプライン

以下の画像に示すように [パイプライン] タブをクリックし、ここに JenkinsFile コード (Groovy コード) を入力します。

Jenkinsファイルコード
Jenkinsファイルコード
 pipeline {
         agent any
         stages {
                 stage('Build') {
                 steps {
                     echo 'Hi, GeekFlare. Starting to build the App.'
                 }
                 }
                 stage('Test') {
                 steps {
                    input('Do you want to proceed?')
                 }
                 }
                 stage('Deploy') {
                 parallel { 
                            stage('Deploy start ') {
                           steps {
                                echo "Start the deploy .."
                           } 
                           }
                            stage('Deploying now') {
                            agent {
                                    docker {
                                            reuseNode true
                                            image ‘nginx’
                                           }
                                    }
                            
                              steps {
                                echo "Docker Created"
                              }
                           }
                           }
                           }
                 stage('Prod') {
                     steps {
                                echo "App is Prod Ready"
                              }
                 
              }
}
}

上記のブロックについて説明します。

  • パイプライン ブロックは、ソフトウェアを構築、テスト、配信するためのすべての命令で構成されます。これは、Jenkins パイプラインの重要なコンポーネントです。
  • エージェントは 、ノード上でパイプラインを実行し、パイプラインにワークスペースを割り当てるように割り当てられます。
  • ステージは 、アプリケーションを構築、テスト、デプロイするためのステップを含むブロックです。ステージは、Jenkins Pipeline プロセスを視覚化するために使用されます。
  • ステップは 、実行される単一のタスクです。たとえば、ディレクトリの作成、Docker イメージの実行、ファイルの削除などです。

上記の Groovy コードは、JenkinsFile に使用しています。利用可能なエージェントがパイプラインに割り当てられています。次に、Build ステージを定義し、単純なエコー ステップを実行します。次に、続行するかどうかを尋ねるステップであるテスト ステージを定義しました。その後、Deploy ステージを作成しました。このステージには、さらに 2 つのステージが並行して実行されています。デプロイ開始ステージには echo コマンドを使用するステップがあり、デプロイにはノード上の Nginx の Docker イメージをプルするステップが追加されます。最後に、単純なエコー ステップを備えた Prod ステージがあります。

上記で説明したパイプラインには、その仕組みを理解するための簡単な手順を含むステージがあります。パイプラインの作成方法を学習したら、さらに複雑さを加えて複雑なパイプラインを作成することもできます。

[パイプライン] タブにコードを入力したら、[適用して保存] をクリックします。最後に、[今すぐビルド] をクリックして、作成した Jenkins パイプラインのビルドを開始します。

今すぐ構築
今すぐ構築

パイプラインの実行時のユーザー インターフェイスは次のようになります。すべての手順に正しく従った場合、ビルドは成功し、ビルドの色が青色で表示されます (#27)。ビルドに間違いがある場合は、ビルドに赤色が表示されます (#27)。

ジェンキンス ビルド 27
ジェンキンス ビルド 27

次に、#27 ビルドをクリックし、次に [コンソール出力] をクリックして、実行時にバックエンドで何が起こったかを確認します。

ジェンキンスのビルド
ジェンキンスのビルド

これは、SUCCESS メッセージで終わる出力がどのように見えるかです。

 Success Console Output

Started by user 
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/First Pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo
Hi, GeekFlare. Starting to build the App.
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] input
Do you want to proceed?
Proceed or Abort
Approved by 
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] parallel
[Pipeline] { (Branch: Deploy start )
[Pipeline] { (Branch: Deploying now)
[Pipeline] stage
[Pipeline] { (Deploy start )
[Pipeline] stage
[Pipeline] { (Deploying now)
[Pipeline] getContext
[Pipeline] isUnix
[Pipeline] sh
[Pipeline] echo
Start the deploy ..
[Pipeline] }
+ docker inspect -f . nginx
[Pipeline] // stage
[Pipeline] }

Error: No such object: nginx
[Pipeline] isUnix
[Pipeline] sh
+ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
8d691f585fa8: Pulling fs layer
5b07f4e08ad0: Pulling fs layer
abc291867bca: Pulling fs layer
abc291867bca: Verifying Checksum
abc291867bca: Download complete
5b07f4e08ad0: Verifying Checksum
5b07f4e08ad0: Download complete
8d691f585fa8: Verifying Checksum
8d691f585fa8: Download complete
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete
abc291867bca: Pull complete
Digest: sha256:922c815aa4df050d4df476e92daed4231f466acc8ee90e0e774951b0fd7195a4
Status: Downloaded newer image for nginx:latest
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 125:131 -w "/var/lib/jenkins/workspace/First Pipeline" -v "/var/lib/jenkins/workspace/First Pipeline:/var/lib/jenkins/workspace/First Pipeline:rw,z" -v "/var/lib/jenkins/workspace/First Pipeline@tmp:/var/lib/jenkins/workspace/First Pipeline@tmp:rw,z" -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** nginx cat
$ docker top 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943 -eo pid,comm
[Pipeline] {
[Pipeline] echo
Docker Created
[Pipeline] }
$ docker stop --time=1 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
$ docker rm -f 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Prod)
[Pipeline] echo
App is Prod Ready
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

上記の Jenkins Pipeline により、Nginx の Docker イメージが作成されました。以下のコマンドを実行すると、それを確認できます。 Nginx docker イメージもリストされていることがわかります。

 @chef-:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 540a289bab6c 2 weeks ago 126MB
httpd latest 7d85cc3b2d80 2 months ago 154MB
redis latest f7302e4ab3a8 2 months ago 98.2MB
_mongodb latest 095d17727ca0 3 months ago 325MB

結論

これにより、 Jenkins パイプライン の利点とその作成方法について理解していただければ幸いです。上記は簡単なデモンストレーションであり、複雑なパイプラインを構築してみることが学習の最良の方法です。

「初めての Jenkins パイプラインを作成するには?」についてわかりやすく解説!絶対に観るべきベスト2動画

Jenkinsの使い方と環境構築方法、定期的にビルドする環境を作ろう!
Jenkinsfile – 初心者向けの Jenkins パイプライン チュートリアル 3/4

Jenkins パイプラインを作成するためのステップバイステップ ガイド

Jenkins パイプラインを使用する理由

継続的デリバリー (CD) は、DevOps ライフサイクルの重要な部分です。

これにより、開発者が作成しているソフトウェア/アプリケーションが常に本番環境に対応できるようになります。これを実現するには、コードが更新されるたびに、継続的にビルド、テスト、デプロイする必要があります。ここで Jenkins Pipeline が登場します。

DevOps では、継続的インテグレーションと継続的デリバリー (CI/CD) は Jenkins Pipeline を通じて実現されます。 Jenkins Pipeline for CD を使用すると、ソフトウェアをより迅速かつ頻繁にリリースして提供できます。これは、次のリリースごとにフィードバックを組み込むのに役立ちます。

ジェンキンスパイプラインとは何ですか?

Jenkins Pipeline は、Jenkins を使用してソフトウェアを継続的に配信するためのジョブの組み合わせです。

Jenkins が何であるかはご存知かと思います。まだの場合は、この Udemy コースをチェックして Jenkins をマスターしてください 。

Jenkins パイプラインは複数の状態またはステージで構成されており、それらは順番に実行されます。 JenkinsFile は、Jenkins でコードとしてパイプラインを作成するために使用される単純なテキスト ファイルです。これには、記述が簡単で人間が判読できる Groovy ドメイン固有言語 (DSL) のコードが含まれています。

JenkinsFile を個別に実行することも、Jenkins Web UI からパイプライン コードを実行することもできます。 Jenkins を使用してパイプラインを作成するには 2 つの方法があります。

  • 宣言型 – Jenkins パイプラインを作成する新しい方法。ここでは、SCM (ソース コード管理) にチェックインされる「パイプライン」ブロックを含む Groovy コードを記述します。
  • スクリプト – コードが「ノード」ブロック内で定義される、魅力的なコードを記述する方法。

デモに入る前に、Jenkins をインストールしていない場合は、まずインストールしてください。システム上で Jenkins が稼働していることを確認してください。

Jenkins パイプラインを作成する

Jenkins パイプライン フローは次のようになります。このフローは、ソフトウェア (コーディング) を作成する開発者と本番環境で提供されるソフトウェアの間の複数のステージで構成されます。

ジェンキンスパイプライン
ジェンキンスパイプライン

宣言型パイプラインを作成しましょう。

Jenkins ダッシュボードで、[新しい項目] をクリックします。次に、項目名 (例: 「First Pipeline」) を入力し、「Pipeline」プロジェクトを選択します。次に、「OK」をクリックします。

新しいアイテム - Jenkins パイプライン
新しいアイテム – Jenkins パイプライン

以下の画像に示すように [パイプライン] タブをクリックし、ここに JenkinsFile コード (Groovy コード) を入力します。

Jenkinsファイルコード
Jenkinsファイルコード
 pipeline {
         agent any
         stages {
                 stage('Build') {
                 steps {
                     echo 'Hi, GeekFlare. Starting to build the App.'
                 }
                 }
                 stage('Test') {
                 steps {
                    input('Do you want to proceed?')
                 }
                 }
                 stage('Deploy') {
                 parallel { 
                            stage('Deploy start ') {
                           steps {
                                echo "Start the deploy .."
                           } 
                           }
                            stage('Deploying now') {
                            agent {
                                    docker {
                                            reuseNode true
                                            image ‘nginx’
                                           }
                                    }
                            
                              steps {
                                echo "Docker Created"
                              }
                           }
                           }
                           }
                 stage('Prod') {
                     steps {
                                echo "App is Prod Ready"
                              }
                 
              }
}
}

上記のブロックについて説明します。

  • パイプライン ブロックは、ソフトウェアを構築、テスト、配信するためのすべての命令で構成されます。これは、Jenkins パイプラインの重要なコンポーネントです。
  • エージェントは 、ノード上でパイプラインを実行し、パイプラインにワークスペースを割り当てるように割り当てられます。
  • ステージは 、アプリケーションを構築、テスト、デプロイするためのステップを含むブロックです。ステージは、Jenkins Pipeline プロセスを視覚化するために使用されます。
  • ステップは 、実行される単一のタスクです。たとえば、ディレクトリの作成、Docker イメージの実行、ファイルの削除などです。

上記の Groovy コードは、JenkinsFile に使用しています。利用可能なエージェントがパイプラインに割り当てられています。次に、Build ステージを定義し、単純なエコー ステップを実行します。次に、続行するかどうかを尋ねるステップであるテスト ステージを定義しました。その後、Deploy ステージを作成しました。このステージには、さらに 2 つのステージが並行して実行されています。デプロイ開始ステージには echo コマンドを使用するステップがあり、デプロイにはノード上の Nginx の Docker イメージをプルするステップが追加されます。最後に、単純なエコー ステップを備えた Prod ステージがあります。

上記で説明したパイプラインには、その仕組みを理解するための簡単な手順を含むステージがあります。パイプラインの作成方法を学習したら、さらに複雑さを加えて複雑なパイプラインを作成することもできます。

[パイプライン] タブにコードを入力したら、[適用して保存] をクリックします。最後に、[今すぐビルド] をクリックして、作成した Jenkins パイプラインのビルドを開始します。

今すぐ構築
今すぐ構築

パイプラインの実行時のユーザー インターフェイスは次のようになります。すべての手順に正しく従った場合、ビルドは成功し、ビルドの色が青色で表示されます (#27)。ビルドに間違いがある場合は、ビルドに赤色が表示されます (#27)。

ジェンキンス ビルド 27
ジェンキンス ビルド 27

次に、#27 ビルドをクリックし、次に [コンソール出力] をクリックして、実行時にバックエンドで何が起こったかを確認します。

ジェンキンスのビルド
ジェンキンスのビルド

これは、SUCCESS メッセージで終わる出力がどのように見えるかです。

 Success Console Output

Started by user 
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/First Pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] echo
Hi, GeekFlare. Starting to build the App.
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] input
Do you want to proceed?
Proceed or Abort
Approved by 
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] parallel
[Pipeline] { (Branch: Deploy start )
[Pipeline] { (Branch: Deploying now)
[Pipeline] stage
[Pipeline] { (Deploy start )
[Pipeline] stage
[Pipeline] { (Deploying now)
[Pipeline] getContext
[Pipeline] isUnix
[Pipeline] sh
[Pipeline] echo
Start the deploy ..
[Pipeline] }
+ docker inspect -f . nginx
[Pipeline] // stage
[Pipeline] }

Error: No such object: nginx
[Pipeline] isUnix
[Pipeline] sh
+ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
8d691f585fa8: Pulling fs layer
5b07f4e08ad0: Pulling fs layer
abc291867bca: Pulling fs layer
abc291867bca: Verifying Checksum
abc291867bca: Download complete
5b07f4e08ad0: Verifying Checksum
5b07f4e08ad0: Download complete
8d691f585fa8: Verifying Checksum
8d691f585fa8: Download complete
8d691f585fa8: Pull complete
5b07f4e08ad0: Pull complete
abc291867bca: Pull complete
Digest: sha256:922c815aa4df050d4df476e92daed4231f466acc8ee90e0e774951b0fd7195a4
Status: Downloaded newer image for nginx:latest
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 125:131 -w "/var/lib/jenkins/workspace/First Pipeline" -v "/var/lib/jenkins/workspace/First Pipeline:/var/lib/jenkins/workspace/First Pipeline:rw,z" -v "/var/lib/jenkins/workspace/First Pipeline@tmp:/var/lib/jenkins/workspace/First Pipeline@tmp:rw,z" -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** nginx cat
$ docker top 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943 -eo pid,comm
[Pipeline] {
[Pipeline] echo
Docker Created
[Pipeline] }
$ docker stop --time=1 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
$ docker rm -f 3141793b98f315dc90a57d810068b8eedb6f62debafb9040de06635b558f2943
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Prod)
[Pipeline] echo
App is Prod Ready
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

上記の Jenkins Pipeline により、Nginx の Docker イメージが作成されました。以下のコマンドを実行すると、それを確認できます。 Nginx docker イメージもリストされていることがわかります。

 @chef-:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 540a289bab6c 2 weeks ago 126MB
httpd latest 7d85cc3b2d80 2 months ago 154MB
redis latest f7302e4ab3a8 2 months ago 98.2MB
_mongodb latest 095d17727ca0 3 months ago 325MB

結論

これにより、 Jenkins パイプライン の利点とその作成方法について理解していただければ幸いです。上記は簡単なデモンストレーションであり、複雑なパイプラインを構築してみることが学習の最良の方法です。

「初めての Jenkins パイプラインを作成するには?」についてわかりやすく解説!絶対に観るべきベスト2動画

Jenkinsの使い方と環境構築方法、定期的にビルドする環境を作ろう!
Jenkinsfile – 初心者向けの Jenkins パイプライン チュートリアル 3/4