docker+jenkins+node.js の自動デプロイメント環境をゼロから構築する方法

docker+jenkins+node.js の自動デプロイメント環境をゼロから構築する方法

このケースはCentOS 7システムに基づいています

  • Dockerの使用経験がある人に適しています
  • Linuxコマンドの使用経験がある人に適しています

1. Docker部分

1.1 Dockerの紹介

Docker はオープンソースのアプリケーション コンテナ エンジンであり、開発者がアプリケーションと依存関係をポータブル コンテナにパッケージ化して、一般的な Linux マシンに公開し、仮想化を実現することもできます。コンテナは完全にサンドボックス化されており、コンテナ間にインターフェースはありません。

1.2、Dockerアーキテクチャ

簡単に言えば、Docker は軽量の Linux システムです。 Docker コンテナは Docker イメージから作成されます。コンテナとイメージの関係は、オブジェクト指向プログラミングにおけるオブジェクトとクラスの関係に似ています。 Docker アーキテクチャを図に示します。

1.3. Docker仮想マシン管理コマンド

1.4. Dockerをインストールする

ソフトウェアライブラリを更新する

yum アップデート -y

Dockerをインストールする

yum で docker をインストール -y

1.5. Dockerサービスを開始する

Dockerサービスを開始する

サービスdocker開始

その他の関連コマンド

 service docker restart // docker サービスを再起動します service docker stop // docker サービスを停止します

2. ノード部分

Koa フレームワークを使用して hello-world プロジェクトを作成し、プロジェクトのルート ディレクトリに新しい Dockerfile ファイルを作成できます。

Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の内容はレイヤーの構築方法を記述します。

自作のDockerfileの設定情報は以下の通りです。Dockerに慣れている人であれば自分で設定することも可能です。

# Dockerファイル
# ノードをミラーとして使用 FROM ノード
# コンテナ内にディレクトリを作成する RUN mkdir -p /home/project
# コンテナの作業ディレクトリをこのディレクトリに設定します WORKDIR /home/project 
# ポート3000を外部に公開する EXPOSE 3000
# コンテナ作成後に実行されるコマンド CMD npm install --registry=https://registry.npm.taobao.org && node ./start.js

後続のJenkinsデプロイメントに備えてプロジェクトをGitHubに公開する

3. ジェンキンスの部分

Jenkinsイメージをクエリする

 docker 検索 ジェンキンス

最新のJenkinsイメージを取得する

docker pull jenkins:最新

Jenkinsを起動する

sudo docker run -d -u 0 --privileged --name jenkins_node1 -p 49003:8080 -v /root/jenkins_node1:/var/jenkins_home jenkins:latest

コマンド分析:

  • -u 0

コンテナ内の組み込みアカウントを上書きするためにルートアカウントIDを渡すことを意味します

  • -v /root/jenkins_node1:/var/jenkins_home

dockerコンテナ内のディレクトリ/var/jenkins_homeをホストマシンの/root/jenkins_node1ディレクトリにマッピングすることを指します。

  • --name jenkins_node1

コンテナにjenkins_node1という名前を付けます

  • -p 49003:8080

ポートマッピング、コンテナのポート 8080 をホストのポート 49003 にマッピングする

  • --特権

最高権限を与える

コマンド全体の意味

イメージ jenkins:latest を含む jenkins_node1 という名前のコンテナを実行し、root アカウントを使用してコンテナ内のアカウントを上書きし、最高権限を付与し、コンテナの /var/jenkins_home をホストの /root/jenkins_node1 ディレクトリにマップし、コンテナ内のポート 8080 をホストのポート 49003 にマップします。

Jenkinsを見る

実行が完了したら、Jenkins コンテナが初期化を開始するまで数十秒待ちます。

host/root/jenkins_node1の下にさらに多くのファイルがあるかどうかを確認できます。

ブラウザにlocalhost:49003と入力して、Jenkinsが正常に起動しているかどうかを確認します。

次のインターフェイスは起動が成功したことを示します。

パスワードを取得

cat /root/jenkins_node1/secrets/初期管理者パスワード

出力されたパスワードをコピーしてページに貼り付け、[続行] をクリックして次のページに進みます。

インストールをクリック

インストールが完了するまで待ってから、管理者アカウント作成インターフェースに入ります。

アカウントとパスワード情報を入力し、「保存」(情報を完了)をクリックしてホームページに進みます。

Jenkinsを設定し、システム管理ページに入り、プラグインを管理する

SSHプラグインを選択し、

直接インストールし、インストールが完了するまで待ってからホームページに戻ります。

システム管理 -> システム構成に移動します

一番下までドラッグし、「SSH 経由で公開」をクリックします。

詳細を選択し、サーバーのIP、ユーザー名、パスワードを入力して、構成のテストをクリックします。

「成功」と表示された場合は、設定が正しいことを意味します。保存してホームページに戻ります

新しいプロジェクトを作成する

プロジェクト名を入力してください

ソースコード管理を選択し、git管理を使用し、githubリポジトリのアドレスを入力して、githubユーザーを追加します。

完了してビルド環境を選択します。

実行されたコマンド

sudo docker stop nodeapp || true \
 && sudo docker rm nodeapp || true \
 && cd /root/jenkins_node1/workspace/node \
 && sudo docker build --rm --no-cache=true -t node - < Dockerfile \
 && sudo docker run -d --privileged=true --name nodeapp -p 3000:3000 -v /root/jenkins_node1/workspace/node:/home/project ノード

保存したら、「今すぐビルド」をクリックします。

ビルドが成功すると、ホストディレクトリ /root/jenkins_node1/workspace/node にプロジェクトファイルが表示されます。

ページ情報にアクセスするには、ブラウザにdockerサーバーのアドレスlocalhost:3000を入力します。

起動に失敗した場合は、ログを確認して失敗の原因を特定できます。

docker ログ nodeapp

4. Jenkins + GitHub 自動デプロイ

ローカルコードをGitHubに送信してプッシュした後、Jenkinsが自動的に最新のコードをプルして再デプロイするようにしたい場合は、読み続けてください。

サーバーはインターネットからアクセス可能である必要があります。ローカルでテストしたい場合は、natappまたはngrokを使用してイントラネットに侵入してみてください。

ホームページのユーザーをクリック

ホーム -> ユーザー -> root

設定 -> APIトークンを表示をクリックします

APIトークンの値をコピーします

ホーム -> ノード -> 構成 -> ビルドトリガーに戻り、認証トークンを貼り付けます。

githubプロジェクトページにログインし、「設定」->「Webhook」->「Webhookの追加」を開きます。

Webhookの追加

Jenkinsのセキュリティポリシーを変更する

Jenkinsホームページで、システム管理 -> グローバルセキュリティの設定(システム設定の下にある)を選択し、次の設定を行います。

この時点で、git push が完了すると、Jenkins は自動的にビルドとデプロイを実行します。

5. dockerの一般的なコマンド

Dockerに興味がある人は、さらに学び続けることができます

ミラー関連

クエリ画像

docker 検索 [名前]

画像をプルする

docker pull [名前]

画像のインポート

docker ロード < /home/node.tar.gz

画像のエクスポート

docker 保存 > /home/node.tar.gz

すべての画像を照会

Docker イメージ

画像の削除

docker rmi [名前]

画像名を変更する

docker タグ docker.io/node ノード

コンテナ関連

起動する

# 実行して対話モードに入る docker run -it --name myjava java bash 
# バックグラウンドで実行 docker run -d --name myjava java

ポートマッピング

docker run -it --name myjava -p 9000:8085 -p 9000:8086 java bash

ディレクトリマッピング

docker run -it --name myjava -v /home/project:/soft --privileged docker.io/node bash

バックグラウンドで実行されているコンテナに入る

docker exec -it 名前 bash

自動再起動

docker run --restart=always -it --name myjava -p 9000:8085 -p 9000:8086 java bash

コンテナを一時停止する

docker 一時停止ノード

コンテナを停止して一時停止する

docker ノードの一時停止を解除

コンテナを停止する

docker ノードを停止する

コンテナを起動する

docker start -i ノード

コンテナを表示

ドッカーps -a

Dockerネットワークセグメント関連

ネットワークセグメントの作成

docker ネットワーク作成 net1

ネットワークセグメント情報を表示する

docker ネットワーク検査 net1

ネットワークセグメント情報を削除する

docker ネットワーク rm net1

6. まとめ

最近Node.jsを勉強しているので、Docker+jenkinsを使ってこの自動デプロイメントプロセスを実装したいと考えていました。1日懸命に作業した後、ようやく構成に成功しました。以前は、pm2 はノード プロジェクトの管理に使用され、pm2 はノード プロジェクトを自動的にデプロイするために使用されていました。ご興味があれば、ぜひご覧ください。 pm2 を使用してノード プロジェクトを自動的にデプロイします。これは自分用の要約メモです。書き方が下手な部分があれば指摘してください。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Jenkins+Docker+Gitee+SpringBoot 自動デプロイメント
  • Docker、Nginx、Jenkins をベースにした自動フロントエンド デプロイメント
  • Docker+gitlab+jenkins は、ゼロから自動デプロイメントを構築します
  • Docker+Jenkinsによる自動デプロイの実現方法
  • DockerはJenkinsを構築し、プロジェクトのパッケージ化とデプロイの手順を自動化します

<<:  JavaScript でよく使われるいくつかの文字列メソッドの概要 (初心者必読)

>>:  MySQL 5.7.19 Winx64 ZIP アーカイブのインストールと使用に関する問題の概要

推薦する

Nginx SSL証明書設定エラーの解決策

1. はじめにWeb プロジェクトを Linux サーバーで公開する場合、SSL 証明書を構成する必...

Dockerfile を使用して nginx イメージを構築する例

Dockerfile の紹介Docker は、Dockerfile の内容を読み取ってイメージを自動...

Vue は動的なプログレスバー効果を実現します

この記事では、動的なプログレスバー効果を実現するためのVueの具体的なコードを例として紹介します。具...

docker を使用した pxc クラスターのインストールに関する詳細なチュートリアル

目次序文事前準備ディレクトリを作成するcustom.cnf を作成する証明書を作成するpxc クラス...

YUMを使用してdockerをインストールする方法

次の図に示すように: Centos 7.0以上であれば問題ありません。現在のシステム カーネル バー...

航空機戦争ゲームを実装するためのネイティブJS

この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...

パーティクルダイナミックボタン効果を実現するCSS

オリジナルリンクhttps://github.com/XboxYan/no…ボタンは、おそらく We...

HTML フォームとフォーム内部タグの使用

コードをコピーコードは次のとおりです。 <html> <ヘッド> <t...

アプレットにおけるwx.getUserProfileインターフェースの具体的な使用

最近、WeChatミニプログラムは、監査ミニプログラムのwx.loginおよびwx.getUserI...

CSS の div の下の同じ行にある複数の要素を右揃えにする

方法1:フロート:右さらに、フローティングにするとレイアウトがよりコンパクトになります(隙間がなくな...

Linux システムに Spring Boot アプリケーションをインストールするための詳細なチュートリアル

Unix/Linux サービスsystemd サービス操作プロセス1. JDKがインストールされたC...

WeChatアプレットのスクロールビューは、プルアップ時にデータの読み込みを重複させるソリューションを実装しています。

WeChat アプレットのスクロール ビューでは、プルアップして読み込むときにバグが多く発生します...

MySQLでテーブル名を変更する方法と注意すべき点

目次1. テーブル名を変更する方法2. 注記要約: 1. テーブル名を変更する方法RENAME TA...

js を使用して過去 1 週間、1 か月、3 か月の時間を取得する簡単な例

目次過去1週間の時間を取得する過去1か月の時間を取得する過去3か月分を取得新しい Date() と ...

Vue.jsクラウドストレージで画像アップロード機能を実現

序文ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。 1. オブジェクトスト...