Docker Gitlab+Jenkins+Harborは永続的なプラットフォーム運用を構築します

Docker Gitlab+Jenkins+Harborは永続的なプラットフォーム運用を構築します

CI/CD の概要

CIワークフロー設計

Gitコードバージョン管理システムはコマンドラインでのみ管理できます

Gitlabはgitをベースにしたグラフィカルな管理ページを開発しました。企業はgitlabを使用してプライベートコードリポジトリを管理しています。

Github パブリックコード管理リポジトリ

GitLabの構築

Gitlabをビルドするには、まず作業ディレクトリを作成します。一部のデータは保存する必要があるためです。

[root@www ~]# mkdir -p /gitlab
[root@www ~]# cd /gitlab/
 
docker run -d \
 --name gitlab \
 -p 8443:443 \
 -p 9999:80 \
 -p 9998:22 \
 gitlab.config を /etc/gitlab にコピーします。
 -v /gitlab/logs:/var/log/gitlab \
 -v /gitlab/data:/var/opt/gitlab \
 -v /etc/localtime:/etc/localtime \
 --restart=常に\
 lizhenliang/gitlab-ce-zh:最新

9999はウェブポート、8443はウェブHTTPSポート、9998はSSHポートです

コンテナ化されたデータをローカルホストに永続化します。このイメージは、初期の中国語翻訳後に構築されました。デフォルトの公式イメージは英語です。これは英語です。このイメージは、データベースとメッセージキューを含めて約 1G と比較的大きく、カプセル化されたコンテンツが多数あります。

[root@www gitlab]# docker ログ 3396d5ccc518 
  - /opt/gitlab/bin/gitlab-ctl start postgresql を実行します。
+psql_host='/var/opt/gitlab/postgresql'

ログを通じて、postgresqlなどのコンポーネントを確認できます。

初回の訪問では、コンポーネントが多く、3〜5分待つ必要があるため、少し時間がかかる場合があります。

このページが表示されると、gitlab サービスは開始されているものの、他のコンポーネントが正常に開始されていない可能性があります。ここで4Gの物理メモリを与えるのがベストです。2Gしかないと正常に起動できません。約8分後には次のようになります

デフォルトのユーザー名は root です。ここで新しいパスワードを設定する必要があります。新しいパスワードは 8 文字以上で、qwerasdf に設定できます。パスワードを更新したら、root ユーザー名と qwerasdf パスワードでログインできます。

プライベートプロジェクト java-demo を作成する

コードをjava-demoリポジトリにプッシュする

別のマシンにgitをインストールし、プロジェクトのソースコードパッケージをアップロードします。

[root@localhost ~]# yum install git -y

[root@localhost ~]# tomcat-java-demo-master.zip を解凍します

Gitディレクトリを初期化する

[root@localhost ~]# cd tomcat-java-demo-master
[root@localhost tomcat-java-demo-master]# git init
/root/tomcat-java-demo-master/.git/ の空の Git リポジトリを初期化しました

このgitディレクトリはgit関連のデータを設定します。初期化が完了したら

[root@localhost tomcat-java-demo-master]# cd .git/
[root@localhost .git]# ls
ブランチ 設定 説明 HEAD フック 情報 オブジェクト 参照

Git設定ファイルを構成する

このコマンドはgitlabのアドレスを.git/config設定ファイルに書き込みます。

[root@localhost tomcat-java-demo-master]# git リモート追加 origin http://192.168.179.100:9999/root/java-demo.git
 
[root@localhost tomcat-java-demo-master]# cat .git/config gitlabのアドレスが書かれているのが分かります。後でコードを送信するときに設定ファイル[core]を読み込みます。
 リポジトリフォーマットバージョン = 0
 ファイルモード = true
 裸 = 偽
 logallrefupdates = true
[リモート「オリジン」]
 URL = http://192.168.179.100:9999/root/java-demo.git
 フェッチ = +refs/heads/*:refs/remotes/origin/*

この.はすべてを表し、現在のコードディレクトリを一時記憶領域に送信します

[root@localhost tomcat-java-demo-master]# git add .
[root@localhost tomcat-java-demo-master]# ls
db Dockerfile ライセンス pom.xml README.md src

現在の git リポジトリに送信します。これは、それ自体が git リポジトリであるためです (ローカルのリポジトリも git リポジトリです)

[root@localhost tomcat-java-demo-master]# git commit -m 'all'

リモートウェアハウスにプッシュすると、以前の構成ファイルが読み込まれます

[root@localhost tomcat-java-demo-master]# git プッシュオリジンマスター
'http://192.168.179.100:9999' のユーザー名: root
'http://[email protected]:9999' のパスワード: 
オブジェクトを数えています: 179、完了。
オブジェクトの圧縮: 100% (166/166)、完了。
オブジェクトの書き込み: 100% (179/179)、1.12 MiB | 0 バイト/秒、完了。
合計 179 (デルタ 4)、再利用 0 (デルタ 0)
リモート: デルタを解決中: 100% (4/4)、完了。
http://192.168.179.100:9999/root/java-demo.git へ
 * [新しいブランチ] master -> master

Jenkinsをデプロイする

[root@localhost jenkins]# ls
apache-maven-3.5.0-bin.tar.gz jdk-8u45-linux-x64.tar.gz
[root@localhost jenkins]# tar xf apache-maven-3.5.0-bin.tar.gz;tar xf jdk-8u45-linux-x64.tar.gz
[root@localhost jenkins]# mv jdk1.8.0_45 /usr/local/jdk
[root@localhost jenkins]# mv apache-maven-3.5.0 /usr/local/maven

これら 2 つのツールキットの目的は、Jenkins がそれらを使用できるようにすることです。Jenkins はコンテナーを使用してデプロイされるため、ホスト マシン上の 2 つの環境をコンテナーにマウントできます。 Maven JDK をマウントします。

Jenkins でイメージをビルドする必要があるため、docker build を使用する必要があります。つまり、docker の中に docker があり、つまり Jenkins で docker をビルドします。コンテナーに docker をインストールする方法を学習する必要はありません。ホストのコマンドとソケットをコンテナに直接マウントし、コンテナ内で直接 docker コマンドを使用できます。

-vはJenkinsのデータをディレクトリに保存することを意味します。JenkinsはJenkinsによって生成されたすべてのデータファイルを公式に保存します。

/var/jenkins_home

ディレクトリなので、このディレクトリのみを永続化する必要があります。Jenkins コンテナが削除された場合でも、データは回復できます。

使用する画像は最新バージョンであり、長期メンテナンスされた画像です

docker run -d --name jenkins -p 80:8080 -p 50000:50000 -u root \
  -v /opt/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  ディレクトリを /usr/bin/docker に変更します。
  -v /usr/local/maven:/usr/local/maven \
  -v /usr/local/jdk:/usr/local/jdk \
  -v /etc/localtime:/etc/localtime \
  --restart=常に\
  --name ジェンキンス ジェンキンス/ジェンキンス
 
[root@localhost jenkins]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
566d2ec85fe0 jenkins/jenkins "/sbin/tini -- /usr/…" 3 分前 3 分前にアップ 0.0.0.0:50000->50000/tcp、0.0.0.0:80->8080/tcp jenkins

ポート5000はマスタースレーブポートです

[root@localhost jenkins]# docker logs 566d2ec85fe0 ログを表示

クリックしてプラグインのインストールを選択します。ここでは、「プラグインはインストールされていません」を選択します。まず Jenkins をインストールしてから、必要なプラグインをインストールします。

Jenkins パイプラインの概念

• Jenkins Pipeline は、Jenkins での統合と継続的デリバリー パイプラインをサポートするプラグインのセットです。

• 特定の構文を使用して、単純なものから複雑なものまでさまざまなトランスポート パイプラインをパイプライン モデル化します。

• 宣言型: Groovy と同じ構文に従います。パイプライン { }

• スクリプト: Groovy のほとんどの機能をサポートし、非常に表現力豊かで柔軟なツールです。ノード { }

• Jenkinsパイプラインの定義は、Jenkinsfileと呼ばれるテキストファイルに書き込まれます。

まず、パイプライン プラグインをインストールし、パイプラインをモデル化するテキストを記述する必要があります。ここでは主に宣言型の構文を使用します。テキスト ファイルはどのようになっているでしょうか。

このファイルは Jenkins に何をすべきかを指示します。大きなステージは多くの小さなステージに分割されます。これらのステージはパイプラインに分割され、これらのステージがパイプラインを形成します。実行が完了するまで上から下の順に実行します。

パイプラインの書き方は大まかに以下のプロセスです

パイプラインを実装した後、

このテンプレートは、パイプラインの各ステップに応じて各ステップ テンプレートを出力します。かかった時間やログなど。これにより、問題を簡単に見つけることができ、表示も便利になります。

Jenkins パイプライン プラグインのインストールとパイプラインの使用

プラグインをインストールすると非常に遅くなります。どうすればスピードアップできますか? Jenkins がプラグインをダウンロードすると、いくつかのソースがあります。国内のソースは変更できます。高度なプラグインで変更するのは実際には無駄です。

[root@localhost jenkins]# cd /opt/jenkins_home/
[root@localhost jenkins_home]# ls
config.xml ノードモニター.xml
copy_reference_file.log ノード
hudson.model.UpdateCenter.xml プラグイン
アイデンティティキー.enc シークレットキー
jenkins.install.InstallUtil.lastExecVersion secret.key.それほど秘密ではない
jenkins.install.UpgradeWizard.state シークレット
jenkins.model.JenkinsLocationConfiguration.xml の更新
jenkins.telemetry.Correlator.xml ユーザーコンテンツ
ジョブ ユーザー
ログ戦争
[root@localhost jenkins_home]# cd アップデート/
[root@localhost 更新]# pwd
/opt/jenkins_home/アップデート
 
[root@localhost 更新]# ls

default.jsonは、プラグインhudson.tasks.Maven.MavenInstallerのソースを実際に書き込み、sedを使用してそれを変更します。

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && \

sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

清華ソースに変更して再起動すると有効になります

[root@localhost 更新]# docker で jenkins を再起動します

ジェンキンス

git と pipeline の両方をインストールします。コア キーがインストールされていれば、インストールの一部が失敗しても問題ありません。

プラグインのソースを置き換えた後、プラグインのインストールが大幅に高速化されました。新しいプロジェクトには追加のパイプライン オプションがあることがわかります。ここでは、パイプライン ビルドを選択します。

パイプライン
  エージェント
 
  ステージ {
    stage('1. コードを取得する') {
      手順 {
        echo 'プルコード'
      }
    }
        stage('2. コード コード コード コンパイル') {
      手順 {
        'コンパイル' をエコーし​​ます
      }
    }
        stage('3. コードの展開') {
      手順 {
        エコー「デプロイ」
      }
    }
  }
}

看板が見えますね

以下はコンソール出力です。特定のステージからビルドを実行するように指定することもできます。

次に、パイプラインを使用してプロセス設計を完了します。

git からコードをプルし、イメージをビルドします。ハーバーにプッシュしてから、docker にデプロイします。このスクリプトは再利用できます

#!/usr/bin/env グルーヴィー
 
レジストリを定義 = "reg.harbor.com"
defプロジェクト = "ようこそ"
def app_name = "デモ"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"
git_address を "http://192.168.179.100:9999/root/java-demo.git" に設定します
定義 docker_registry_auth = "c91491d9-91cd-4248-96c8-fc8cc00f7db4"
デフgit_auth = "86ebc99d-d3fc-4e6e-b938-db1f5a1f3642"
 
パイプライン
  エージェント
  ステージ {
    stage('プルコード'){
      手順 {
       チェックアウト([$class: 'GitSCM', ブランチ: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
      }
    }
 
    ステージ('コードのコンパイル'){
      手順 {
       sh """
        JAVA_HOME = /usr/local/jdk
        PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH
        mvn clean package -Dmaven.test.skip=true
        「」 
      }
    }
 
    stage('イメージのビルド'){
      手順 {
        withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
        sh """
         エコー '
          ${registry}/library/tomcat:v1 から
          ラベル マイタイナー lizhenliang
          rm -rf /usr/local/tomcat/webapps/* を実行します。
          ターゲット/*.war /usr/local/tomcat/webapps/ROOT.warを追加します。
         ' > Dockerファイル
         docker build -t ${image_name} を実行します。
         docker login -u ${ユーザー名} -p '${パスワード}' ${レジストリ}
         docker push ${image_name}
        「」
        }
      } 
    }
 
    stage('Dockerにデプロイ'){
      手順 {
       sh """
       tomcat-java-demo を実行します。
       docker コンテナを実行 -d --name tomcat-java-demo -p 88:8080 ${image_name}
       「」
      }
    }
  }
}

ここでブランチを入力するように求められていることがわかります。

パラメータ化されたビルド、変数名はシェルスクリプトまたはパイプラインで参照可能

      手順 {
        '${Branch}' をエコーし​​ます
      }

ハーバー認証情報を作成します。つまり、Jenkinを使用してDockerハーバーウェアハウスにアクセスするには、ユーザー名とパスワードを知る必要があります。

追加の認証情報 c91491d9-91cd-4248-96c8-fc8cc00f7db4 があることがわかります。認証情報はパイプライン スクリプト def docker_registry_auth = "c91491d9-91cd-4248-96c8-fc8cc00f7db4" で定義されています。これは Jenkins の認証情報です。

プラグインのgit認証情報86ebc99d-d3fc-4e6e-b938-db1f5a1f3642も必要です。パイプラインでdef git_auth = "86ebc99d-d3fc-4e6e-b938-db1f5a1f3642"を定義します。

パイプラインの一部のステートメントは、プルコードの生成など、自動的に生成できます。

パイプラインの一般的な枠組みを理解して、それを

チェックアウト([$class: 'GitSCM', ブランチ: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, 拡張機能: [], サブモジュール構成: [], userRemoteConfigs: [[credentialsId: '86ebc99d-d3fc-4e6e-b938-db1f5a1f3642', url: 'http://192.168.179.100:9999/root/java-demo.git']]])

コンパイルされたwarパッケージをプルして環境イメージに配置する

Mavenソースを設定します

ダウンロード: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-war-plugin/3.1.0/maven-war-plugin-3.1.0.jar (5.3 kB/s で 91 kB)

ダウンロード: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-web/2.0.1.RELEASE/spring-boot-starter-web-2.0.1.RELEASE.pom

これらはバックグラウンド出力で確認できます。コンパイルおよびビルド時に、Maven ソースはデフォルトのネットワークであり、比較的低速です。次に、プル速度を高速化するためにソースを変更する必要があります。ホストマシンでソースを変更します。これにより、対応する依存関係パッケージをプルするソースが定義されます。

[root@localhost ~]# vim /usr/local/maven/conf/settings.xml 
  <ミラー>
   <id>中央</id>
   <mirrorOf>中央</mirrorOf>
   <name>aliyun の達人</name>
   <url>https://maven.aliyun.com/repository/public</url>
  </ミラー>

変更後、コンテナを再起動して直接再構築する必要はありません。ビルドされたパッケージを確認できます。

[root@localhost ~]# ls /opt/jenkins_home/workspace/test-pipeline/target/ classes generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-archiver maven-status

ジョブはデータソース情報を保存します

[root@localhost ~]# ls /opt/jenkins_home/jobs/

テスト テストパイプライン

他のdckerホストにデプロイする必要がある場合は、sshプラグインのsshコマンドを使用するか、ansibleを使用して別のマシンでdockerコマンドを起動して実行し、コンテナを作成します。

話題外

ハーバーが HTTPS 認証を提供している場合は、証明書を Jenkins ホストの対応するディレクトリにコピーしてください。 JenkinsホストがDocker Harbor Warehouseにログインできることを確認します

[root@localhost ~]# mkdir -p /etc/docker/certs.d/reg.harbor.com
[root@localhost ~]# ls
anaconda-ks.cfg reg.harbor.com.pem
 
[root@localhost ~]# cp reg.harbor.com.pem /etc/docker/certs.d/reg.harbor.com/reg.harbor.com.crt
 
[root@localhost ~]# cat /etc/hosts
127.0.0.1 ローカルホスト ローカルホスト.ローカルドメイン ローカルホスト4 ローカルホスト4.ローカルドメイン4
::1 ローカルホスト ローカルホスト.ローカルドメイン ローカルホスト6 ローカルホスト6.ローカルドメイン6
192.168.179.102 reg.harbor.com
 
[root@localhost ~]# docker ログイン reg.harbor.com
既存の資格情報を使用して認証しています...
警告! パスワードは暗号化されずに /root/.docker/config.json に保存されます。
この警告を削除するには、資格情報ヘルパーを構成します。
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 
ログインに成功しました

永続的なプラットフォーム運用を構築するためのDocker Gitlab+Jenkins+Harborに関する上記の記事は、編集者が皆さんと共有するすべての内容です。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker+gitlab+jenkins は、ゼロから自動デプロイメントを構築します
  • CentOS での GitLab+Jenkins 継続的インテグレーション環境の設定 (Jenkins のインストール)
  • Docker+Jenkins+Gitlab+Djangoアプリケーションデプロイ実践の詳細な説明
  • フロントエンドアプリケーションのjenkins+gitlab+nginxデプロイメント
  • JenkinsはGitlabを統合し、自動デプロイメントの全プロセス記録を実現します

<<:  JavaScript を使用して動的に生成されるテーブルの詳細な説明

>>:  Unicodeの一般的な記号

推薦する

モバイル端末の適応により、px は自動的に rem に変換されます。

まずpostcss-pxtoremをインストールします: npm install postcss-p...

写真のプレビューとアップロード機能を実現するhtml+css+js

はじめに: Web ページを作成するときに、画像をアップロードする必要がある場合がよくあります。画像...

JavaScript配列の一般的なメソッドの概要

目次1. JavaScriptで配列を作成する方法2. 配列メソッドの概要3. 方法の詳細な説明1....

CSSの省略記号とパディングを組み合わせた場合の問題の詳細な説明

CSS によるテキストの切り捨てテキストを自動的に切り捨てるスタイル コードを実装するには、次のコー...

Docker コンテナにデプロイされた Django のタイムゾーンの問題

目次Django でのタイムゾーン設定USE_TZ=真USE_TZ=偽Linux コンテナでのタイム...

フレックスレイアウトでコンテナ内のコンテンツを維持するためのソリューションの詳細な説明

モバイル側では、フレックスレイアウトが非常に便利です。デバイスの幅に応じてコンテナの幅を自動的に調整...

ドラッグ可能で編集可能なガントチャートの詳細な説明(HighchartsはVueとReactで使用できます)

序文Excel は強力で、広く使用されています。 Web アプリケーションの登場と改善に伴い、ユーザ...

CSSインジェクションの知識の要約

最近のブラウザでは、CSS 内で JavaScript を実行することはできなくなりました。以前は、...

Mysql での結合操作

結合の種類1. 内部結合: 結合関係を持つ 2 つのテーブル内のフィールドは、結合関係を満たすレコー...

vue3 のコンポーネントの互換性のない変更の詳細な説明

目次機能コンポーネント非同期コンポーネントの書き方とdefineAsyncComponentメソッド...

WeChatミニプログラムをTencent Mapsに接続する2つの方法

最近、WeChat アプレットを作成しているのですが、いくつか問題が発生しました。インターネットでい...

Zabbix設定 DingTalkアラーム機能実装コード

必要Zabbix で DingTalk アラームを設定する方法は、Prometheus で Ding...

Angularの単一プロジェクトを複数プロジェクトにアップグレードするプロセス全体

目次序文開発環境新しいプロジェクトを作成するモバイルウェブプロジェクト角度付きJSONパブリックモジ...

見落としがちなVue.jsのAPIを詳しく解説

目次次のチェックv-model 構文シュガー.sync 修飾子$セット計算プロパティセット要約する次...

JavaScript フォーム検証の例

HTML フォームは、名前、電子メール アドレス、場所、年齢などのユーザー情報を収集するためによく使...