Docker+gitlab+jenkins は、ゼロから自動デプロイメントを構築します

Docker+gitlab+jenkins は、ゼロから自動デプロイメントを構築します

序文:

数日間の勉強と私自身の理解を経て、Docker+Jenkins の自動デプロイに関するチュートリアルをまとめました。不足している点がありましたら、さらにアドバイスをお願いします。ありがとうございます!

Docker の利点:

Docker を使用すると、開発者はアプリケーションと依存パッケージをポータブル コンテナーにパッケージ化し、それを一般的な Linux マシンに公開して仮想化を実現できます。 Docker は仮想化の方法を変え、開発者が自分の結果を直接 Docker に入れて管理できるようになりました。利便性とスピードはすでに Docker の最大の利点です。以前は数日、あるいは数週間かかっていたタスクも、Docker コンテナを使用すれば数秒で完了できます。
構造: クライアント → Docker_Host (ホスト) → ウェアハウス 3つの概念 コンテナ → イメージ → ウェアハウス

Jenkins を使用する理由:

従来のデプロイメント プロジェクトでは、プロジェクトが完了したら、コード リポジトリからローカルにコードをプルし、パッケージ化を完了してサーバーにアップロードし、プロジェクトの動作環境を構成して起動する必要があります。これには明らかに欠陥があります。開発中に存在するバグの中にはすぐには発見できないものもあり、後でバグを修正するときに連鎖反応が起こるリスクがあります。さらに、コードを修正した後は、それを再パッケージ化してサーバーにアップロードし、実行する必要があることがよくあります。プロジェクトが多数ある場合、このような反復的な機械的な操作に圧倒されてしまいます。
Jenkins を使用すると、真の自動デプロイメントを実現できます。コードが更新され、コード リポジトリにプッシュされると、Jenkins ビジュアル インターフェイスでビルド プロジェクトをクリックするだけで済みます。Jenkins は、設定したリポジトリ アドレスに従ってコードを自動的にプルし、自動的にパッケージ化して実行し、自動デプロイメントを完了します。


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

Docker を使用するには、CentOS カーネル バージョンが 3.10 以上である必要があります。このページの前提条件をチェックして、お使いの CentOS バージョンが Docker をサポートしているかどうかを確認してください。

1. uname -rコマンドで現在のカーネルバージョンを確認します。

uname -r は、

2. root権限でCentOSにログインします。 yum パッケージが最新バージョンに更新されていることを確認してください。

yum -y アップデート

3. 古いバージョンをアンインストールします(古いバージョンがインストールされている場合)

yum 削除 docker docker-common docker-selinux docker-engine

4. 必要なパッケージをインストールします。yum-util は yum-config-manager 機能を提供します。他の 2 つは devicemapper ドライバーの依存関係です。

yum インストール -y yum-utils デバイスマッパー永続データ lvm2

5. yumソースを設定する

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6. すべてのリポジトリのすべてのDockerバージョンを表示し、インストールする特定のバージョンを選択できます。

yum list docker-ce --showduplicates | sort -r

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

sudo yum install -y docker-ce #リポジトリでは安定リポジトリのみがデフォルトで有効になっているため、最新の安定バージョン 18.03.1 がここにインストールされます

8. 起動してブートに追加

systemctl start docker //dockerを起動する
systemctl enable docker //起動時に開始するように設定する

9. インストールが成功したかどうかを確認します (クライアントとサービス部分が存在する場合、Docker のインストールと起動が成功したことを示します)

docker バージョン

2. DockerでJenkinsをインストールする

1. リポジトリでJenkinsイメージを検索する

docker 検索 ジェンキンス        

jenkins は検索するイメージ名を示します。DESCRIPTION に jenkins が含まれるイメージも表示されます。

2. Jenkinsイメージをローカルイメージにプルする

docker pull ジェンキンス/ジェンキンス
ここでプルされたバージョンは jenkins/jenkins であることに注意してください。これは、以前の jenkins バージョンが 2.60 のみであったため、jenkins プラグインのインストールが失敗したためです。プル時にバージョンを指定できます。たとえば、docker pull java:8 は、プルされた java バージョンが 8 であることを意味します。バージョンを指定しない場合は、デフォルトで最新バージョンになります。

3. Jenkinsコンテナを起動する

docker run --name myjenkins -d -p 8081:8080 -p 8085:8085 jenkins/jenkins

–name myjenkinsはコンテナ名をmyjenkinsとして指定します
-dはバックグラウンドで実行することを意味します
-p 8081: 8080 は、Docker ホスト ポート (Docker を実行しているホスト) と Docker コンテナーで実行されているポート間のマッピングを示します。
8081 は DockerHost のポート、8080 はコンテナ内のポートです。8081 への外部アクセスは Docker コンテナのポート 8080 にアクセスできます。
jenkins/jenkins は、起動されたイメージが jenkins/jenkins であることを意味します。ローカル イメージは docker images を通じて表示できます。

例:
1. Docker ホストとコンテナ間のポート マッピングを設定する必要があるため、コンテナ内のポートに外部から直接アクセスすることはできません。複数のマッピングを設定できます。
プロジェクトは後でデプロイする必要があるため、プロジェクトのポート番号 -p 8085:8085 を事前に構成します。未構成のままにして、後でポート マッピング ファイルを変更することもできます。
2. 実際には、プル操作の 2 番目のステップを省略して、コンテナを直接起動することもできます。Docker はまず、このイメージがローカル イメージにあるかどうかを確認します。ない場合は、DockerHub ウェアハウスに移動してダウンロードします。


3. Jenkinsへのログインの初期化操作

1. Jenkins インターフェイスにアクセスします。たとえば、仮想マシンの IP が 192.168.199.188 の場合、192.168.199.188:8081 と入力して Enter キーを押すと、次のインターフェイスが表示されます。

ここに画像の説明を挿入

Jenkinsがインストールされているコンテナに入る

docker exec -it myjenkins bash // 指定されたコンテナに入ります。myjenkins はコンテナを起動したときにコンテナに指定した名前を表します。cat /var/jenkins_home/secrets/initialAdminPassword` // パスワードを表示し、パスワードをコピーしてテキスト ボックスに貼り付けます。

操作図:

ここに画像の説明を挿入

2. プラグインをインストールします。ここでは、Jenkins が推奨するプラグインをインストールします。

推奨プラグインをインストールするにはクリックしてください:

ここに画像の説明を挿入

3. インストールが進行中です。しばらくお待ちください。インストールが完了したら、[続行] をクリックします。

ここに画像の説明を挿入

4. 管理者ユーザーを作成するか、管理者アカウントを直接使用して続行します。

ここに画像の説明を挿入

5. インスタンス構成が直接保存されます。

ここに画像の説明を挿入

6. Jenkins の使用を開始します。

ここに画像の説明を挿入

7. Jenkins ホームページにアクセスします。

ここに画像の説明を挿入

4. グローバルツール構成(構成環境)

システム管理 - グローバルツール構成をクリックします

1. JDK を構成する: 自動インストールをキャンセルし (JDK 環境は通常コンテナ内にインストールされます)、docker コンテナに入り、 echo $JAVA_HOMEを使用して JDK インストール パスを取得し、そのパスを JAVA_HOME テキスト ボックスにコピーします。

ここに画像の説明を挿入

2. Mavenの設定: 名前を指定して自動的にインストールし、「保存」をクリックします。

ここに画像の説明を挿入

5. Mavenプラグインをインストールするシステム管理 – プラグイン管理をクリックします

ここに画像の説明を挿入

6. 自動展開を完了するための新しいタスクを作成する

1.ホームページに戻り、「新しいタスク」をクリックしてMavenプロジェクトをビルドします。

ここに画像の説明を挿入

2. [OK] をクリックしてホームページに戻ります。SpringBoot_AutoTest1 という追加のタスクが見つかりました (上記のタスクは前のものなので無視してください)

ここに画像の説明を挿入

3. プロジェクト名SpringBoot_AutoTest1をクリック --> [構成]をクリック

3.1 ソース コード管理 (Git リポジトリ アドレスを設定すると、Jenkins がリモート リポジトリからコードをプルします):

ここに画像の説明を挿入

3.2 ビルド構成 (Jenkin はコードを取得した後、パッケージ化コマンドを自動的に実行します):

ここに画像の説明を挿入

3.3 シェル スクリプトを構成します (Jenkins のパッケージ化が完了すると、シェル スクリプトが自動的に実行され、プロジェクトが開始され、自動デプロイが実現されます)。その後、保存します。

ここに画像の説明を挿入

添付のシェルスクリプト:

#!/bin/bash
# #!/bin/bash は、こ​​のスクリプトが /bin/bash を使用して解釈および実行することを意味します。このうち、#! は特別なインジケータであり、その後にこのスクリプトを解釈するシェル パスが続きます。 Bash はシェルの 1 つのタイプにすぎません。sh、csh、ksh、tcsh など、他にも多くのシェルがあります。
# #!/bin/bash は最初の行にのみ配置できます。その後に #! がある場合は、コメントとしてのみ扱われます。

#サービス名 SERVER_NAME = SpringBoot_AutotTest

#ソース jar パス。mm パッケージ化が完了したら、ターゲット ディレクトリ内の jar パッケージ名を war パッケージとして選択し、war パッケージを Tomcat に移動することもできます。
JAR_NAME=jekins-0.0.1-SNAPSHOT


#ターゲット パッケージは、jar パッケージのディレクトリを生成します。JAR_PATH=/var/jenkins_home/workspace/SpringBoot_AutotTest/target #特定のパッケージの場所に基づいて、プロジェクトを一度ビルドし、ログを通じてパッケージ化されたディレクトリを表示できます。#パッケージ化後、iar パッケージを jar パッケージが実行されるディレクトリに移動します。JAR_WORK_PATH=/var/jenkins_home/workspace/SpringBoot_AutotTest/target

echo "クエリプロセスID-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo "プロセス ID を取得: $PID"
echo "プロセスを終了"
$PIDのID
する
-9 $id を殺す
echo "$id を強制終了しました" 
終わり
echo "終了プロセスが完了しました"

#jarパッケージを実行ディレクトリにコピーします_

echo"jar パッケージを実行ディレクトリにコピーします:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
echo "jar パッケージの完全なコピー"
$JAR_WORK_PATH をコピーする
#ファイルの権限を変更する chmod 755 $JAR_NAME.jar

# フロントデスクの起動 #java -jar $JAR_NAME.jar

#バックグラウンド起動 BUILD_ID=dontKillMe nohup java -jar $JAR_NAME.jar &

docker+gitlab+jenkins でゼロから自動デプロイメントを構築する方法についての記事はこれで終わりです。docker+gitlab+jenkins による自動デプロイメントの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • DockerはJenkinsを構築し、プロジェクトのパッケージ化とデプロイの手順を自動化します
  • Docker+jenkins+python3環境を使用して非常に詳細なチュートリアルを構築する
  • Dockerはjenkins+mavenコード構築および展開プラットフォームを構築します
  • Docker で Jenkins サービスを構築する例
  • Docker環境でJenkinsを設定すると、タスクをビルドするときにコンソールログに文字化けした中国語の文字が表示されます
  • Dockerを使用したJenkins自動化ツールの実装

<<:  MySQL CHARとVARCHARの選択方法

>>:  ウェブサイトのユーザビリティを向上させる10のヒント

推薦する

ノードをMySQLデータベースに接続する際に発生する問題と解決策

今日、MySQL の新しいバージョン (8.0.21) をインストールしましたが、ノード フレームワ...

HTML は、Web ページの作成者が学習して習得しなければならないものです。

HTML を学ぶメリットは何ですか? 1: ウェブサイトやブログのウェブ構造を簡単に変更できます。...

DockerにMySQL 8.0をインストールする方法

環境: MacOS_Cetalina_10.15.1、Mysql8.0.18、Docker_2.0....

Html、sHtml、XHtml の違いのまとめ

たとえば、<u>には終了文字がなく、ブラウザはそれを認識します。 SHTML は Ser...

Vue2.x - アンチシェイクとスロットリングの使用例

目次ユーティリティ: vue での使用:説明する:画像安定化:スロットル:ユーティリティ: // 手...

MySQL5.7 並列レプリケーションの原理と実装

データ操作とメンテナンスに少しでも知識のある人なら、MySQL 5.5 以前では再生に単一の SQL...

データベース接続プール Druid の使用手順

総合的なパフォーマンス、信頼性、安定性、スケーラビリティ、使いやすさなどの要素に基づいて、最適なデー...

Nodeイベントループの包括的な理解

目次ノードイベントループイベントループ図メインスレッドイベントループタイマーキューの仕組み投票キュー...

Dockerイメージ送信コマンドcommitの動作原理と使い方の詳細な説明

ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを D...

Docker コンテナでネットワーク リクエストが遅くなる問題の解決策

Docker の使用中に、いくつかの問題が発見されました。npm install や bundle ...

Vue で手ぶれ補正を実装するためのサンプルコード

手ぶれ防止: 繰り返しのクリックによるイベントのトリガーを防止まず、揺れとは何でしょうか? 震えるの...

HTML要素を非表示にするいくつかの方法

1. CSSを使用するコードをコピーコードは次のとおりです。スタイル="display:n...

今日、私は非常に奇妙なクリックの問題に遭遇し、自分で解決しました

...こんな感じで、今日はポップアップウィンドウを作ろうと思ったのですが、バックエンド PHP によ...

MySql 範囲内の検索時にインデックスが有効にならない理由の分析

1 問題の説明この記事では、確立された複合インデックスをソートし、レコード内の非インデックス フィー...

React で複数の setStates が何回呼び出されるのでしょうか?

目次1. 2 つの setState を何回呼び出すのですか? 2. 2 つの setState の...