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 がCyberDog 2をリリース、オープンソース率80%以上 ChatGPTの1日コスト約70万ドル、OpenAIが破産寸前の可能性 瞑想ソフトが上場へ、「中国初のLinux人」が設立 Apache Doris 2.0.0版正式リリース: ブラインド テストのパフォーマンスが 10 倍向上、より統合され多様な超高速分析エクスペリエンス Linux カーネル (v0.01) のオープン ソース コード解釈の最初のバージョン Chrome 116 が正式リリース