CI メカニズムを使用して jar 依存関係ツリーを制御する | JD Cloud テクニカル チーム

1. 現状と課題

jar の競合のトラブルシューティングに取り組んだことを覚えていますか?

jar パッケージの更新によってもたらされる未知の jar の導入と変更を効果的に制御するために、依存関係を表示し、問題のトラブルシューティングを行うために依存関係ツリーをよく使用します。通常、問題が発生すると、受動的に分析してトラブルシューティングを行います。このとき、人件費は巨大でシステムも古い。問題はありますが、後悔はありません。

2. 理由を分析する

JAR パッケージの依存関係は変化しており、目に見えないため、JAR の競合に起因する問題が頻繁に発生し、R&D はその変化に毎回注意を払うことができません。

3. 行動を起こす

「アジャイル」思考を採用し、小さなステップを踏み、jar パッケージの依存関係の変化を毎日定期的に監視することで、リスクを事前に回避し、未知の問題を積極的に明らかにできます。

テクノロジーが問題を解決、CI/CD 機能により研究開発コストが削減、毎日 23:00 に自動実行、すべての研究開発が毎日 jar ドキュメントの変更に注意を払う ~

—— 依存関係ツリーをgitのバージョン管理用のファイルとして利用すると同時に、CI上に保持してjarの依存関係の変更を自動制御することで、依存関係の変更を即座に発見できるようにしています。パイプラインは、依存関係ツリーが毎日最新であることを確認するために、依存関係ツリーのスキャンを毎日定期的にトリガーします。変更が見つかると、ドキュメントの変更がすぐに開始されます。R&D が mr に注意を払うとき、次のことを確認できます。前日に誰が何を変更したかを把握し、jar パッケージを効果的に管理します。

4. 実際の手順

4.1 メイクファイルの作成

ルート ディレクトリ: doc/dependency-tree.txt 空のファイル

メイクファイル

dependency-tree:
	@mvn clean -U package -Dmaven.test.skip=true dependency:tree -Dverbose -DoutputFile=target/dependency-tree.txt --settings settings.xml
	@grep -v 'omitted for' wms-outbound-web/target/dependency-tree.txt | grep -vw "tests" | grep -vw "test" | sed -e 's/TEST-SNAPSHOT/SNAPSHOT/g' > doc/dependency-tree.txt
	@git add doc/dependency-tree.txt
	@git commit -m "fix: [CI make dependency-tree]依赖树变更"
	@git push origin HEAD:master


設定.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings
        xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
        xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <localRepository>./maven/repository</localRepository>
    <profiles>
        <profile>
            <id>Repository</id>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>local private nexus</name>
                    <url>***</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <id>central</id>
                    <name>libs-releases</name>
                    <url>***</url>
                </repository>
                <repository>
                    <snapshots>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                    <id>snapshots</id>
                    <name>libs-snapshots</name>
                    <url>***</url>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>***</activeProfile>
    </activeProfiles>
</settings>



4.2 gitignore ファイルを変更する

  • gitignore コンテンツを追加
/maven

4.3 竹の設定

タイミング トリガー パイプライン (マスター パイプライン) 構成を選択します

「ダウンロード コード」アトムと「Maven ビルド」アトムの間にアトムを追加します:「カスタム スクリプト」(この順序である必要があります)

シェルコードブ​​ロック:

cd ${globalParams.system.APP_IDENTIFIER}
make
  • プロセス制御の選択: 続行失敗 (理由: CI 変更コードにはミスター レビューが必要なため、レビュー メカニズムによりプッシュが失敗しますが、問題ありません)

4.4 コーディングの設定

xn_testdev_ci アカウントのマスター権限を追加し、同時に保護ブランチ リスト権限に追加します



5. 効果を実感する

5.1 竹の丸太

実行後、ログが成功したことを確認できます。プッシュしてレビューを開始するだけです

5.2 MRレコードのコーディング

Bamboo アカウント「Test Development_Continuous Integration」によって開始された mr を表示して確認できます (依存関係ツリー ファイルの変更のみ)。

6. パフォーマンスの向上

2021/10/19 から現在まで、このプラクティスでは42 件の依存関係の変更が見つかりそのうち 7 件でコードの問題が見つかりました (研究開発はリアルタイムで処理されています。そうでない場合、未知の依存関係の変更はそれぞれ 1 件を超える研究開発コストに相当します)。

効率定量化シミュレーション:2021/10/19~現在



改善前(/人・日)

効率化後(/人・日)

jarパッケージの競合問題が初めて発生

2 (問題の瓶が半年前から導入されていたことが本日判明、人的調査に莫大な費用がかかる)

0.1 (異常は事前に発見され、処理されており、初期コストは非常に低く、この競合は回避されます)

jar パッケージの競合問題が 2 度目に発生する

2.5 (明日、mvn 依存関係ツリーを 1 つずつチェックする必要があることがわかり、jar がより早く導入され、コストがより大きいことがわかります)

0.5 (競合はすぐに発生します。ドキュメントの git 履歴を分析して、変更を直接見つけて導入します)

jar パッケージの競合問題が 3 度目に発生しました

3 (何日も経ってから、問題のjarが導入されたタイミングが追跡できなくなり、依存関係が混沌としていたことが判明したため、お互いに問い合わせてリコールするしか研究開発できませんでした)

0.5 (上記と同じ、ドキュメント git 履歴の配置に変更が導入されています)

……

……

……

jar パッケージの競合問題が n 回以上発生した場合、総コストの計算

>2*n

<0.5*n

 



7. 簡単な概要

[jar パッケージの競合] は、すべてのコード リポジトリとすべての研究者にとって問題です。

  • 「問題を回避し、リスクを事前に回避できれ」その後の「保守コストは必然的に削減され、日々のパフォーマンスは向上します」
  • CI/CD メカニズムを使用して、jar パッケージの依存関係ツリーは doc ファイルとして git で管理および制御され、変更ごとにスナップショットが記録され、「アジャイル」思考に従って依存関係が自動的にスキャンされます (サイクルは 23 です)。毎日 :00) と依存関係が自動的にスキャンされます。まずは見つけて対処し、もう受け身にならず、率先して攻撃しましょう。

著者: JD Logistics の Zhou Yiru

出典: JD Cloud 開発者コミュニティによる Yuanqishuo Tech からの転載。出典を明記してください

 

インド国防省が自社開発した Maya OS は、Windows Redis 7.2.0 を完全に置き換えるもので、最も広範囲にわたるバージョンの 7-Zip 公式 Web サイトが、Baidu によって悪意のある Web サイトであると特定されました 。 Xiaomi がCyber​​Dog 2をリリース、オープンソース率80%以上 ChatGPTの1日コスト約70万ドル、OpenAIが破産寸前の可能性 瞑想ソフトが上場へ、「中国初のLinux人」が設立 Apache Doris 2.0.0版正式リリース: ブラインド テストのパフォーマンスが 10 倍向上、より統合され多様な超高速分析エクスペリエンス Linux カーネル (v0.01) のオープン ソース コード解釈の最初のバージョン Chrome 116 が正式リリース
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4090830/blog/10096538