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 時計を実装する

推薦する

JavaScript オブジェクトを作成する 3 つの方法

目次1. オブジェクトリテラル2. newキーワードはオブジェクトを作成する3. Object.cr...

Apple 電卓の JS 実装

この記事の例では、Appleの電卓を実装するためのJSの具体的なコードを参考までに共有しています。具...

良いリファクタリングを行うには、コードをリファクタリングするだけでなく、人生をリファクタリングすることも重要です。

職業的な観点からも、人生の観点からも、良い再建をすることは本当に簡単ではありません。楽観的で熱心で前...

水平プログレスバーの最後にテキストを表示するための実装コードの CSS 記述

問題の説明仕事で以下の成果を達成したいと考えています。 解決div タグに相対配置を追加し、絶対配置...

MySQL クエリのソートとクエリ集計関数の使用法の分析

この記事では、例を使用して、MySQL クエリのソート関数とクエリ集計関数の使用方法を説明します。ご...

ウェブページ印刷細線表+ページ印刷究極の戦略

最近、クライアントのために印刷していたとき、ページのヘッダーを印刷するのではなく、表の内容だけを印刷...

JS で列挙をシミュレートする方法

序文現在の JavaScript には列挙の概念がありません。一部のシナリオでは、列挙を使用するとデ...

VUEはFlappy Birdゲームのサンプルコードを実装します

Flappy Bird は、誰もがアプリでプレイしたことがある非常にシンプルな小さなゲームです。ここ...

Vue での props の使い方の紹介

序文: Vue では、props を使用して、もともと分離されていたコンポーネントを直列に接続するこ...

EChartsマウスイベント処理方法の詳細な説明

イベントとは、クリック、マウスオーバー、ページの読み込み後にトリガーされる読み込みイベントなど、ユー...

React Nativeでaxiosを使用してネットワークリクエストを行う方法

フロントエンド開発では、Ajax、jQuery ajax、axios、fetch など、データ要求を...

MySQLデータベースのトランザクションとインデックスの詳細な説明

目次1. 事務:取引の 4 つの主な特徴:同時トランザクションはどのような問題を引き起こしますか? ...

Vue h関数の使い方の詳しい説明

目次1. 理解2. 使用1. h() パラメータ2. 使い方が簡単3. カウンターケースを実装する4...

数百万のデータボリュームに対する MySQL ページングクエリ方法とその最適化の提案

データベース SQL の最適化はよくある問題です。何百万ものデータ ボリュームに対してページング ク...

MySQLデータ復旧のさまざまな方法の概要

目次1. はじめに2. 直接回復2.1 mysqldumpバックアップの完全リカバリ2.2 xtra...