ネットワーク全体で最も詳細な Jenkins が GitLab ブランチと連携して自動的にマージ/作成 (超微細な組織化)


序文

GitFlow ワークフローの概要

Gitflow ワークフローは、プロジェクト リリースに関する厳密な分岐モデルを定義します。比較的複雑ですが、大規模プロジェクトを管理するための堅牢なフレームワークを提供し、大規模プロジェクトのリリースとメンテナンスの管理に非常に適しています。

開発サイクル全体を通じて、master ブランチと detect ブランチは常に存在しており、master ブランチは安定したブランチ、develop ブランチは比較的安定したブランチとみなすことができます。

機能開発はフィーチャー ブランチで実行され、プレス リリースはリリース ブランチで実行され、バグ修正はホットフィックス ブランチで実行されます。これにより、現場でのさまざまな種類の開発作業の結合や干渉も効果的に回避されます。コードレベル。

GitFlow ワークフローの最適化

ホットフィックスとリリースの結果はマスターと開発にマージする必要があります。なぜですか? それらの変更結果はその後の開発とメンテナンスに影響し続けるため、コードの一貫性を確保するためにそれらをマージする必要があります。

オンライン プロジェクトでバージョンをロールバックする必要がある場合、または単に反復バージョンを記録する必要がある場合、多くの場合、次のように master ブランチにタグを付けます。

機能リリース: release_20190101_その月のバージョン数
バグ修正: hotfix_20190101_修正数
この記事は GitFlow ワークフローに基づいており、Jenkins を使用して GitLab と連携して次の自動化タスクを実現します。

master ブランチのコードが更新されると、コードは自動的に Development ブランチにマージされ、
master ブランチのコードが更新されると、master ブランチの送信で自動的にタグ付けされます。

Jenkins自動タスクジョブの作成

Jenkins は Java で書かれたオープンソースの継続的統合ツールで、Git と通信し、Git のマージ イベントやプッシュ イベントをリッスンし、単体テストの実行など、Jenkins の指定されたタスク (ジョブ) の実行をトリガーできます。

さらに、コードが変更されると、パッケージングのデプロイメント、パフォーマンス テスト、インターフェイス テスト、モニタリング、ログ分析などがトリガーされる可能性があります。

プロジェクトのリリースのあらゆる側面は、手動介入をあまり必要とせずに自動的に完了できるため、繰り返しのプロセスが減り、時間と作業負荷が節約されます。

Jenkins ジョブの作成方法

参考までに、自動タスク Jenkins Job の作成プロセスを以下に示します。作成プロセスは次のとおりです。

まず、タスクを作成し、名前を入力し、「フリースタイル ソフトウェア プロジェクトを構築する」を選択して、「OK」をクリックします。

ここに画像の説明を挿入します

一般: プロジェクト名と説明を入力します。ラベル式は Jenkins 管理で構成されたノード (コンテナー、ノード) です。ラベル式は Docker のグループです。複数の異なるジョブが同時に実行される場合、並列処理を実現できます。

ここに画像の説明を挿入します

ソース コード管理: リポジトリ URL に GitLab のプロジェクト アドレスを入力します。

構築するブランチ ここでのブランチ指定子は、Jenkins ジョブがトリガーされたときに Jenkins によって自動的にプルされるコードのブランチです。マスターなどの固定の指定ブランチを入力することも、正規表現を記述することもできます。

あるいは、入力することもできます${gitlabSourceBranch}に記入されている場合${gitlabSourceBranch}、git からマージ リクエストのソース ブランチを読み取ることを意味します。この変数を使用すると、ジョブの「今すぐビルド」をクリックしてジョブを実行することはできません。これは、この変数を読み取ることができず、トリガーできるのはgitプッシュイベント。

具体的な選択は、アプリケーションのシナリオに基づいて行うことができます。

ここに画像の説明を挿入します

ビルド トリガー: 以下のスクリーンショットで指定されているのは、プッシュ イベントが発生し、ターゲット ブランチがマスターである場合にのみ、このジョブがトリガーされることです。これは、ニーズに応じて特別に構成できます。

名前でブランチをフィルターする: ターゲット ブランチがマスターである場合にのみジョブをトリガーします。

ここに画像の説明を挿入します

ビルド環境とビルド: ビルド環境の最初の項目をチェックするということは、各ビルドが開始される前にワークスペースをクリアすることを意味します。自動化スクリプトは、ビルド中にシェル コマンドの実行で構成できます。

これらのスクリプトをプロジェクトのルート ディレクトリまたは GitLab リポジトリに配置して、スクリプトを統一的に管理できます (スクリプトの例は記事の最後に添付されています)。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ビルド後の操作 (編集可能な電子メール通知): 電子メール リマインダーを構成するために使用されます。

拡張電子メール発行者を無効にする: チェックすると、電子メールは送信されません。
プロジェクト受信者リスト: 受信者アドレス。複数の受信者の電子メール アドレスはカンマで区切られます。
プロジェクト返信先リスト: 返信を許可されているユーザーのアドレス。デフォルト;コンテンツ タイプ: 電子メール ドキュメントのタイプ、 $DEFAULT_REPLYTOHTML
およびその他の形式を設定できます;
デフォルトの件名: デフォルトの電子メールのタイトル; も使用できます$DEFAULT_SUBJECT;
デフォルトのコンテンツ: デフォルトの電子メールのコンテンツ、ここに HTML ファイルを記述し、いくつかの変数を参照できますJenkins 内; デフォルトのコンテンツを使用することもできます : $DEFAULT_CONTENT;
ビルド ログの添付: 送信された電子メールにログが含まれるかどうか。
トリガーの設定に注意する必要があり、通常はジョブの実行が失敗したときにメールを送信するように設定されています。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

Jenkins ジョブと Git の関係

GitLab プロジェクトの設定で以下に示す構成を見つけます: 「アクティブ」にチェックを入れ、Git Push または mr の作成/更新/マージ時にトリガーされる指定された Jenkins URL を指定します。プロジェクト名はジョブ名、ユーザー名、 Jenkins で設定されているパスワードです。これは、jenkins のアカウントとパスワードです。

ここに画像の説明を挿入します

全体的な段階的なレビュー

GitLab でプロジェクトを準備する;
Jenkins と関連する GitLab プラグインをインストールする;
Jenkins の GitLab アクセス許可を構成する;
ステップ 1 のプロジェクト プロジェクトに対応する Jenkins 上でジョブを作成する;
GitLab プロジェクトで Jenkins を構成する;
のソース コードを変更するプロジェクトを作成して On GitLab に送信し、
Jenkins ビルド タスクが構成されたスクリプトをトリガーするかどうかを確認します。

スクリプトの例

以下は、マスター ブランチ コードが更新された後にマスター ブランチの送信に自動的にタグを付けるスクリプトの例です。これは参照のみを目的としています: (タグ ラベルの
命名規則: リリース_現在の日付_今月のバージョン_現在の四半期のバージョン_今年のバージョン)

#!/bin/sh
echo **********************************Start********************************
date
# 获取最近一次远程 master 提交的 commit id
sha1=`git rev-parse remotes/origin/master^{
     
     commit}`
# 获取姓名及邮箱,来配置git提交者信息
name=`git show --pretty=%an $sha1 | awk 'NR==1{print}'`
email=`git show --pretty=%ce $sha1 | awk 'NR==1{print}'`
echo '################# 当前提交人信息:'
echo $name 
echo $email 
git config --global user.name $name
git config --global user.email $email

# 获取 merge 的源分支前缀
function getOriginPrefix(){
    
    
  # 获取分支所属
  info_sha1=`git show $sha1 | grep 'Merge:' | cut -d' ' -f3`
  info_branch=`git branch -r --contains $info_sha1`
  # 判断是否 hotfix 分支
  isHotfix=`echo "${info_branch}" | grep 'origin/hotfix'`
  if [ -n "$isHotfix" ]; then 
    echo 'hotfix'
  else
    echo 'release'
  fi
}
originBra=$(getOriginPrefix)
echo '################# 获取的源分支前缀为:' $originBra

# 获取最近一次创建的标签
latestTag=`git for-each-ref --sort=-taggerdate --format "%(tag)" refs/tags | grep $originBra | head -n 1`
# 获取最近标签的年
latestYear=`echo "${latestTag}" | awk -F_ '{print substr($2,1,4)}'`
# 获取最近标签的月
latestMonth=`echo "${latestTag}" | awk -F_ '{print substr($2,5,2)}'`
# 获取最近标签的季度
latestQuarter=`echo "${latestMonth}" | awk '{print int(($0-1)/3)+1}'`

# 获取当年
currentYear=`date +%Y`
# 获取当月
currentMonth=`date +%m`
# 获取当日
currentDay=`date +%Y%m%d`
# 获取当前季度
currentQuarter=`echo $currentMonth | awk '{print int(($0-1)/3)+1}'`

# 计算当月版本号
if [ $latestMonth -eq $currentMonth ]; then 
  currentMonthVersion=`echo "${latestTag}" | awk -F_ '{print $3+1}'`
else
  currentMonthVersion='1'
fi

# 计算当季度版本号
if [ $latestQuarter -eq $currentQuarter ]; then 
  currentQuarterVersion=`echo "${latestTag}" | awk -F_ '{print $4+1}'`
else
  currentQuarterVersion='1'
fi

# 计算当年版本号
if [ $latestYear -eq $currentYear ]; then 
  currentVersion=`echo "${latestTag}" | awk -F_ '{print $5+1}'`
else
  currentVersion='1'
fi

# 获取最终标签名 
newVersion=$originBra'_'$currentDay'_'$currentMonthVersion'_'$currentQuarterVersion'_'$currentVersion

# 创建标签
git tag -a $newVersion -m '提交人: '$name
git push origin --tags
newTag=`git tag -l | grep $newVersion`
echo '################# 最近创建的标签为:' $latestTag
echo '################# 自动计算的标签为:' $newVersion
echo '################# 自动创建的标签为:' $newTag
echo **********************************End**********************************
以下は、私がまとめた 2023 年の最も包括的なソフトウェア テスト エンジニア学習ナレッジ アーキテクチャ システム図です。

1. Python プログラミングの入門から習熟まで

画像の説明を追加してください

2. インターフェース自動化プロジェクトの実践

画像の説明を追加してください

3. Web自動化プロジェクトの実戦

画像の説明を追加してください

4. アプリ自動化プロジェクトの実践

画像の説明を追加してください

5. 一流メーカーの履歴書

画像の説明を追加してください

6. DevOps システムのテストと開発

画像の説明を追加してください

7. 一般的に使用される自動テストツール

画像の説明を追加してください

8. JMeter パフォーマンス テスト

画像の説明を追加してください

9. まとめ(最後にちょっとしたサプライズ)

失敗の影で自信が曖昧にならないように、あらゆる努力が成功への一歩となります。闘いに耐え、不動を貫けば、あなたは自分自身の輝きと栄光を創造するでしょう。自分を信じてください、勝利は遠くありません!

闘争は霧を切り裂く確固たる灯火であり、勇敢に前進することが困難を克服する鍵である。努力を続ければ、夢は未来への道を照らします。自分の力を信じて頑張れば、無限の可能性が生まれます!

苦難や試練の中で強靭な精神力を養い、風雨やプレッシャーに負けずに強い意志を研ぎ澄ます。自分の能力を信じて勇敢に前進すれば、自分を超え、人生の輝かしい章が開かれます。

おすすめ

転載: blog.csdn.net/csdnchengxi/article/details/133350367