Docker+Jenkinsを使用して自動的にビルドおよびデプロイする

Docker+Jenkinsを使用して自動的にビルドおよびデプロイする

この記事では、Docker+Jenkins の自動ビルドデプロイメントを紹介し、皆さんと共有します。詳細は次のとおりです。

環境

  • Alibaba Cloud ESC では、ホスト サーバーに Docker をインストールし、セキュリティ ルールでポート 8080 が開いていることを確認します。
  • クライアント Mac

Jenkinsを実行する

Jenkinsコンテナを実行する

ホスト上にディレクトリを作成し、読み取りおよび書き込み権限を追加して、Jenkins アプリケーションが実行時にファイルを読み書きできるようにします。例:

$ mkdir -p /var/jenkins_node
$ chmod 777 /var/jenkins_node

jenkins イメージをプルします: docker pull jenkins 、現在のバージョンは2.60.3です。そして実行します:

docker run -d --name myjenkins -p 8080:8080 -p 50000:50000 -v <あなたのjenkinsパス>:/var/jenkins_home jenkins

前のディレクトリをデータ ボリュームとしてマウントします。 <your_jenkins>ディレクトリ名に置き換えます。パスは絶対パスである必要があります。
数十秒待ってから、jenkins_node ディレクトリをチェックして、Jenkins アプリケーションによって生成されたファイルがあるかどうかを確認します。
表示するには、 http://you_host:8080にログインしてください。 「はじめに」インターフェースが表示されるかどうか。

アカウントとSSHログインを設定する

「はじめに」インターフェースでは、初期パスワード「Jenkins のロックを解除」が必要になります。
パスワードは出力ターミナルに表示されます。また、ページのプロンプトに従って、コンテナの jenkins_home でも見つけることができます。
だからあなたは

docker ログ myjenkins
# またはコンテナに入る docker exec -t myjenkins /bin/bash

パスワードを取得したら、それを入力して、提案されたプラグインをインストールします。
完了したら、指示に従ってログイン アカウントを設定します。

Publish Over SSHプラグインをインストールする

ホームページ -> システム管理をクリック -> プラグインの管理 -> オプションのプラグイン -> フィルター: ssh -> SSH 経由で公開プラグインを選択し、直接インストールをクリックします。

サーバーのSSH情報を設定する

まずコンテナ内に RSA キーを生成します。

# ホストクライアントからコンテナに入ります。現在のコンテナ名は myjenkins です。docker ps からも表示できます $ docker exec -it myjenkins /bin/bash
# コンテナに入ったら、.sshディレクトリを作成し、秘密鍵id_rsaと公開鍵id_rsa.pubの鍵ファイルを作成します。
~ mkdir ~/.ssh && cd ~/.ssh
~ ssh-keygen -t rsa
# Enterキーを押し続ける

公開鍵をホストマシンに追加し、id_rsa.pubの文字列をauthorized_keysファイルの末尾に追加します。ssh sudo service ssh restart restart
ホスト マシンで ssh サービスが有効になっているかどうかを確認します。
コンテナターミナルで次のコマンドを使用して、ホストに追加できます。 id_rsa.pub をホスト マシン上の .ssh/authorized_keys ファイルに手動でコピーすることもできます。

ssh-copy-id -i ~/.ssh/id_rsa.pub <ユーザー名>@<ホスト>

ターゲット サーバーの ssh 構成ファイルを変更する必要があります。構成ファイルは /etc/ssh/sshd_config です。秘密鍵と公開鍵のペアを使用してログインできるように ssh-server を設定し、 sudo /etc/init.d/ssh restartコマンドを使用して ssh サービスを再起動します。

秘密鍵を追加
Jenkinsホームページ、システム管理 -> システム設定 -> 下にスクロールしてSSH経由で公開を見つけ、キーとSSHサーバーを入力 -> 保存


詳細オプションでは、SSH サーバーのポートとタイムアウトを設定できます。テストはテスト可能で、構成がsuccessしたことが示されます。

プロジェクト構成

まず、新しいタスクを作成します。プロジェクト名を入力します。
ソース コード管理として Git を選択し、プロジェクト ライブラリの URL を入力します。プライベート プロジェクトでは Git アカウントを追加する必要があります。


ビルド環境: Send files or execute commands over SSH after the build runsを選択し、サーバーを選択して、 Exec commandを追加します。保存。


# プロジェクトの必要に応じて記述します sudo docker stop <node> || true \
  && sudo docker rm <ノード> || true \
  && cd /var/jenkins_node/workspace/<ノード> \
  && sudo docker build --rm --no-cache=true -t <node> - < Dockerfile \
  && sudo docker run -d --name <ノード> -p 3000:3000 -v 
  /var/jenkins_node/workspace/node:/home/project <ノード>

ポートは 3000 に設定されています-p 宿主機端口:容器端口を個別に設定することもできます。サーバー ポートの権限が有効になっているかどうかを確認してください。

Dockerファイル

# プロジェクトのニーズに応じてFROMノードを記述します
mkdir -p /var/www/html/ を実行します。 
npm install -g yarnを実行します。
ワークディレクトリ /var/www/html
エクスポーズ3000
CMD ["npm","開始"]

追記: npm install -g cnpm --registry=https://registry.npm.taobao.org

ホームページに戻り、プロジェクトを選択して、今すぐビルドします。成功すると、 http://you_host:3000ポートを通じてプロジェクトを表示できます。

Webhookの設定

API トークンを自動的にデプロイして取得するように webhook を構成します: ホーム -> ユーザー -> 現在のユーザーを選択 -> 設定 -> Show API Token...


トークンの追加: ホーム ページに戻る -> プロジェクト -> 構成 -> ビルド トリガー -> 「リモート ビルドをトリガー」を選択 -> 「API トークン」の内容を「認証トークン」に貼り付けます
コード ホスティング プラットフォームにログインし、プロジェクトを見つけて、[管理] を選択し、[Webhook] を選択してhttp://<you_host>:<port>/job/<object_name>/build?token=<API Token>

Jenkins セキュリティポリシーの設定

ホーム -> システム管理 -> グローバルセキュリティの設定 ->
承認ポリシーで、 Allow anonymous read accessチェックします。


この時点で、自動構築と展開が完了します。コードをプッシュすると、自動的にビルドされ、デプロイされます。

デプロイメントエラーの検出

コードプッシュと Webhook には大きな問題はなく、例に従えば間違いはありません。
コンテナ内のエラーは、イメージのビルドと実行に関する問題、およびコンテナ間の通信に関する問題です。

  • イメージのビルド: Jenkins ホームページを表示 --> プロジェクトを表示 --> 最新の構建歷史--> Console Output表示して、控制臺輸出を表示します。ここで、どのステップが間違っていたかがわかります。通常、 Sending build context to Docker daemon Jenkins コマンドの問題であり、次に Dockerfile の問題です。
  • イメージの実行: コンソールにイメージが正常にビルドされたことが示されているにもかかわらず ( docker imagesでも​​表示できます)、イメージの実行に失敗したり、実行後にコンテナーが終了したりする場合、コードがローカルで正常に実行された場合、通常は CMD 起動コマンドのエラーが原因です。コンテナーをフォアグラウンドで実行しdocker run -it --name <container_name> <image_name> /bin/bash 、コンテナーに入り、CMD を手動で実行してログ出力を確認します。さらに、 docker exec -t <container_name> /bin/bash実行中のコンテナに入り、コードを簡単に表示できます。docker docker logs <container_name>実行中のログ出力を表示します。

Docker+Jenkins を使用した自動ビルドとデプロイに関するこの記事はこれで終わりです。Docker Jenkins の自動ビルドとデプロイの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker Gitlab+Jenkins+Harborは永続的なプラットフォーム運用を構築します
  • Docker環境でJenkinsを設定すると、タスクをビルドするときにコンソールログに文字化けした中国語の文字が表示されます
  • Docker での Jenkins ビルド環境の設定の詳細な説明
  • Jenkins が Docker イメージをビルドする例
  • Jenkins Docker 静的エージェント ノードのビルド プロセス

<<:  MYSQL 5.6 スレーブレプリケーションの展開と監視

>>:  JavaScript でシンプルな Web 時計を実装する

推薦する

MySQL Community Server 8.0.11 のインストールと設定方法のグラフィックチュートリアル

最近、MySQL を始めとしてデータベースの知識を勉強し始めました。以下では、皆さんの参考になるよう...

MySQLデータベースのタイムアウト設定を構成する方法の例

目次序文1. JDBCタイムアウト設定2. 接続プールのタイムアウト設定3. MyBatisクエリの...

トップに戻るボタンの例の JavaScript 実装

この記事では、トップに戻るボタンを実装するためのJavaScriptの具体的なコードを参考までに紹介...

Vueはタブルーティング切り替えコンポーネントのメソッド例を実装します

序文この記事では、vue に付属している vue-router.js ルーティングを使用してページン...

jQuery エディタ プラグイン tinyMCE の使い方

簡略化されたファイル サイズを変更し、サンプルをダウンロードします。ファイルをローカル コンピュータ...

SQL Server の完全バックアップに関する珍しいエラーと解決策

1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...

発生したブラウザの互換性の問題と解決策(推奨)について

序文:先週の日曜日、先輩から3ページ作るのを手伝って欲しいと頼まれました。データのやり取りなどはなく...

dockerにmysqlをインストールした後にNavicatが接続できない問題に対する完璧な解決策

1. Dockerがイメージをプルするdocker pull mysql (デフォルトで最新バージョ...

Linux whatisコマンドの使い方

01. コマンドの概要whatis コマンドは、システム コマンドの簡単な説明を含むいくつかの特別な...

Apple M1チップにnginxをインストールし、vueプロジェクトをデプロイする詳細な手順

nginx をインストールApple Mac ではインストールに brew を使用します。brew ...

CSS を使用して複数の方法で等高レイアウトを実装するサンプル コード

この記事で説明する等高レイアウトでは、純粋な CSS を使用して、要素の高さを手動で設定することなく...

MySQL5.7.17 winx64 インストール バージョン構成方法 Windows Server 2008 R2 でのグラフィック チュートリアル

参考までに、Winでmysql5.7をインストールします。具体的な内容は次のとおりです。 @Auth...

CSS はモバイル デバイスで水平スクロール ナビゲーション バーを実装します (PC デバイスにも適用可能)

関数の起源最近、水平スクロール バーを必要とする H5 に取り組んでいました。いくつかのドキュメント...

データ URI スキームを使用して Web ページに画像を埋め込む方法の紹介

データ URI スキームを使用すると、HTML、CSS、Javascript などで使用できるインラ...

使用場所によって混乱しやすいXHTMLタグ

<br />jb51.net では、常に記事のセマンティクスを重視してきましたが、HTM...