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をインストールし、プロジェクトのソースコードパッケージをアップロードします。
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 プッシュオリジンマスター '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によって生成されたすべてのデータファイルを公式に保存します。
ディレクトリなので、このディレクトリのみを永続化する必要があります。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はマスタースレーブポートです
クリックしてプラグインのインストールを選択します。ここでは、「プラグインはインストールされていません」を選択します。まず 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を使用してそれを変更します。
清華ソースに変更して再起動すると有効になります
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"を定義します。 パイプラインの一部のステートメントは、プルコードの生成など、自動的に生成できます。 パイプラインの一般的な枠組みを理解して、それを
コンパイルされたwarパッケージをプルして環境イメージに配置する Mavenソースを設定します
これらはバックグラウンド出力で確認できます。コンパイルおよびビルド時に、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> </ミラー> 変更後、コンテナを再起動して直接再構築する必要はありません。ビルドされたパッケージを確認できます。
ジョブはデータソース情報を保存します
他の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を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: JavaScript を使用して動的に生成されるテーブルの詳細な説明
まずpostcss-pxtoremをインストールします: npm install postcss-p...
はじめに: Web ページを作成するときに、画像をアップロードする必要がある場合がよくあります。画像...
目次1. JavaScriptで配列を作成する方法2. 配列メソッドの概要3. 方法の詳細な説明1....
CSS によるテキストの切り捨てテキストを自動的に切り捨てるスタイル コードを実装するには、次のコー...
目次Django でのタイムゾーン設定USE_TZ=真USE_TZ=偽Linux コンテナでのタイム...
モバイル側では、フレックスレイアウトが非常に便利です。デバイスの幅に応じてコンテナの幅を自動的に調整...
序文Excel は強力で、広く使用されています。 Web アプリケーションの登場と改善に伴い、ユーザ...
最近のブラウザでは、CSS 内で JavaScript を実行することはできなくなりました。以前は、...
結合の種類1. 内部結合: 結合関係を持つ 2 つのテーブル内のフィールドは、結合関係を満たすレコー...
目次機能コンポーネント非同期コンポーネントの書き方とdefineAsyncComponentメソッド...
最近、WeChat アプレットを作成しているのですが、いくつか問題が発生しました。インターネットでい...
必要Zabbix で DingTalk アラームを設定する方法は、Prometheus で Ding...
目次序文開発環境新しいプロジェクトを作成するモバイルウェブプロジェクト角度付きJSONパブリックモジ...
目次次のチェックv-model 構文シュガー.sync 修飾子$セット計算プロパティセット要約する次...
HTML フォームは、名前、電子メール アドレス、場所、年齢などのユーザー情報を収集するためによく使...