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で指定した時間前にレコードを自動的に削除する方法

イベントについて: MySQL 5.1 では、イベントの概念が導入され始めました。イベントは「時間ト...

データベースを削除して逃げる?xtraback を使用して MySQL データベースをバックアップする方法

1. mysqldump バックアップ方法では論理バックアップが使用されます。最大の欠点は、バック...

Vue elementUI フォームのネストされたテーブルと各行の検証の詳細な説明

目次エフェクト表示コードリンクキーコード表形式データコンポーネントのネスト検証方法リセット方法完全な...

JavaScriptはマウスの動きに追従するボックスを実装します

この記事では、マウスの動きを追跡するためのJavaScriptの具体的なコードを参考までに紹介します...

インデックスを設計する際の原則は何ですか? インデックスの障害を回避するにはどうすればよいでしょうか?

目次主キーインデックス頻繁にクエリされるフィールドのインデックスを作成する大きなフィールドのインデッ...

MySQL でタイムスタンプを日付に変換する例

序文職場で次のような状況に遭遇しました。ログ システムのテーブルでは、時間フィールドには日付データで...

Dockerリポジトリの一般的なコマンドの詳細な説明

ログイン dockerログインdocker login コマンドを実行し、ユーザー名、パスワード、メ...

MySQLログシステムの使い方に関する簡単なチュートリアル

目次序文1. エラーログ2. バイナリログ1. バイナリログを有効にする2. バイナリログ形式3. ...

<td></td> タグの境界線スタイルがブラウザに表示されない問題の解決方法

質問: 360ブラウザの互換モードなど、一部のブラウザでは、 <td style="...

vue 要素 el-transfer にドラッグ機能を追加

コア資産管理プロジェクトでは、el-transfer にドラッグ アンド ドロップによる並べ替えと、...

Javascript配列の重複排除のいくつかの方法の詳細な説明

目次アレイ重複排除1 2層forループ(バブルソートの2層ループ記述に類似) 2 ループとインデック...

JavaScript ベースのランダム点呼システムの実装

この記事では、ランダムロールコーラーを実装するためのJavaScriptの具体的なコードを参考までに...

Linux 型バージョン メモリ ディスク クエリ コマンド紹介

1. まず、Linux システムのバージョン内容について概要を説明します。 1. カーネルバージョン...

HTML の基礎_一般的なタグ、共通タグ、表

パート 1 HTML <html> -- 開始タグ<ヘッド>ウェブページ上の...