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

推薦する

js配列forEachインスタンスの詳細な使用方法

1. forEach() は map() に似ています。これも渡された関数に各要素を順番に適用します...

CentOS7 で MySQL のスケジュールされた自動バックアップを実装する方法

実稼働環境で起こる最も嬉しいことは、シナリオによっては、更新または削除時にパラメータを無視せざるを得...

Mysql5.7 で中国語の文字化けの問題を解決する

MySQL 5.7 を使用すると、Web ターミナル経由でデータベースに中国語の文字を書き込むと文字...

Docker で Maven プロジェクトをより速くビルドする

目次I. 概要2. 従来の多段階イメージ構築3. Buildkitを使用してイメージをビルドする4....

Xtrabackup を使用した MySQL バックアップ プロセスの詳細な説明

目次01 背景02 はじめに03 ワークフロー04 いくつかの質問05 ファイルをバックアップする0...

MySQL パフォーマンス チューニングについて知っておくべき 15 個の重要な変数 (要約)

序文: MYSQL は最も人気のある WEB バックエンド データベースです。最近、NOSQL がま...

Nginxを使ってサーバー内で複数コンテナの共存を実現する方法

背景Tencent Linux クラウド ホストがあり、その上に Docker (ServiceDo...

CSS で要素フローティングとクリアフローティングを実装する方法

フローティングの基礎標準ドキュメント フローでは、要素は塊級元素と行內元素の 2 種類に分けられます...

MySQLをインストールして設定し、ルートパスワードを変更する方法

1. インストールapt-get install mysql-server にはアカウントとパスワー...

Mac+IDEA+Tomcat の設定手順

目次1. ダウンロード2. インストールと解凍3. Tomcatを起動する4番目に、インストールが成...

Ubuntu 20.04 IPアドレスを変更する方法の例

例:本日、前回のオフィスコラボレーションプラットフォーム実験の続きをしていたところ、仮想マシンは以前...

ウェブページの広告デザインにおけるウェブデザインの寸法とルール

1. 800*600 未満の場合、Web ページの幅が 778 以内であれば、水平スクロール バーは...

SQL 挿入文の書き方の説明

方法 1: INSERT INTO t1(field1,field2) VALUE(v001,v00...

HTMLフォーム入力監視の詳細な理解

今日、入力イベントに関するブログ投稿を見て、気まぐれで関連情報を整理してみました。イベント:関数 c...

MySQL の準同期レプリケーションについての簡単な説明

導入MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQ...