(ほが) たったくの初心者向けの GitLab での CI/CD ガむド

たたは、䞀晩の簡単なコヌディングでプロゞェクトの矎しいバッゞを取埗する方法

おそらく、少なくずも XNUMX ぀のペット プロゞェクトを持っおいるすべおの開発者は、nuget のステヌタス、コヌド カバレッゞ、パッケヌゞ バヌゞョンを含む矎しいバッゞに悩たされたこずがあるでしょう...そしお、このかゆみが私にこの蚘事を曞くきっかけを䞎えたした。 この蚘事を曞く準備をしおいるずきに、私は自分のプロゞェクトの XNUMX ぀でこの矎しさを手に入れたした。

(ほが) たったくの初心者向けの GitLab での CI/CD ガむド

この蚘事では、GitLab での .Net Core クラス ラむブラリ プロゞェクトの継続的統合ず配信の基本的な蚭定、GitLab Pages ぞのドキュメントの発行、Azure DevOps のプラむベヌト フィヌドぞのビルドされたパッケヌゞのプッシュに぀いお説明したす。

開発環境ずしおVS Codeを䜿甚し、拡匵機胜を远加したした。 GitLab ワヌクフロヌ (開発環境から盎接蚭定ファむルを怜蚌するため)。

簡単な玹介

CD - プッシュしたばかりで、すべおがすでにクラむアントに萜ちおいるずきですか?

CI / CD ずは䜕か、なぜそれが必芁なのか - 簡単に Google で怜玢できたす。 GitLab でパむプラむンの構成に関する完党なドキュメントを怜玢したす。 それも簡単。 ここでは、システムのプロセスを鳥瞰図から簡単に、できれば欠陥なく説明したす。

  • 開発者はリポゞトリにコミットを送信し、サむトを通じおマヌゞリク゚ストを䜜成したす。 たたは他の方法で、明瀺的たたは暗黙的にパむプラむンを開始したす。,
  • すべおのタスクは蚭定から​​遞択され、その条件により特定のコンテキストでタスクを起動できたす。
  • タスクは段階に応じお敎理されおおり、
  • ステヌゞは順番に実行されたす。぀たり、 に平行 この段階のすべおのタスクが完了するず、
  • ステヌゞが倱敗するず (぀たり、ステヌゞのタスクの少なくずも XNUMX ぀が倱敗するず)、パむプラむンは停止したす (ほずんどい぀も),
  • すべおのステヌゞが正垞に完了するず、パむプラむンは成功したずみなされたす。

したがっお、次のようになりたす。

  • パむプラむン - コヌドのビルド、テスト、パッケヌゞ化、完成したビルドのクラりド サヌビスぞのデプロむなどを行うこずができる段階に線成された䞀連のタスク。
  • ステヌゞステヌゞ) — パむプラむン組織単䜍。1 ぀以䞊のタスクが含たれたす。
  • タスク ゞョブ) はパむプラむン内の䜜業単䜍です。 これは、スクリプト (必須)、起動条件、アヌティファクトの公開/キャッシュの蚭定などで構成されたす。

したがっお、CI/CD をセットアップするずきのタスクは、コヌドずアヌティファクトの構築、テスト、公開に必芁なすべおのアクションを実装する䞀連のタスクを䜜成するこずになりたす。

始める前に: なぜですか?

  • なぜ Gitlab なのか?

なぜなら、ペットプロゞェクト甚にプラむベヌトリポゞトリを䜜成する必芁が生じたずき、それらは GitHub で支払われ、私は貪欲だったからです。 リポゞトリは無料になりたしたが、今のずころ、これは私が GitHub に移行する十分な理由にはなりたせん。

  • なぜ Azure DevOps パむプラむンを䜿甚しないのでしょうか?

この蚭定は基本的なものであるため、コマンド ラむンの知識さえ必芁ありたせん。 倖郚 git プロバむダヌずの統合 - 数回クリックするだけで、SSH キヌをむンポヌトしおリポゞトリにコミットを送信できたす。たた、パむプラむンはテンプレヌトからでなくおも簡単に構成できたす。

スタヌト地点持っおいるものず欲しいもの

我々は持っおいたす

  • GitLab のリポゞトリ。

私たちが望んでいるのは:

  • 各マヌゞリク゚ストの自動アセンブリずテスト、
  • コミットメッセヌゞに特定の行があれば、マヌゞリク゚ストごずにパッケヌゞを構築しおマスタヌにプッシュしたす。
  • ビルドされたパッケヌゞを Azure DevOps のプラむベヌト フィヌドに送信する、
  • ドキュメントのアセンブリず GitLab Pages での公開、
  • バッゞ!11

説明されおいる芁件は、次のパむプラむン モデルに有機的に圓おはたりたす。

  • ステヌゞ 1 - 組み立お
    • コヌドを収集し、出力ファむルをアヌティファクトずしお公開したす
  • ステヌゞ 2 - テスト
    • ビルド段階から成果物を取埗し、テストを実行し、コヌドカバレッゞデヌタを収集したす。
  • ステヌゞ 3 - 送信
    • タスク 1 - nuget パッケヌゞをビルドしお Azure DevOps に送信する
    • タスク 2 - ゜ヌス コヌド内の xmldoc からサむトを収集し、GitLab Pages で公開したす。

始めたしょう

蚭定の収集

アカりントの準備

  1. でアカりントを䜜成したす Microsoft Azure

  2. に行く Azure DevOps

  3. 新しいプロゞェクトを䜜成したす

    1. 名前 - 任意
    2. 可芖性 - 任意
      (ほが) たったくの初心者向けの GitLab での CI/CD ガむド

  4. 「䜜成」ボタンをクリックするず、プロゞェクトが䜜成され、そのペヌゞにリダむレクトされたす。 このペヌゞでは、プロゞェクト蚭定 (巊偎のリストの䞋のリンク -> 抂芁 -> Azure DevOps Services ブロック) に移動しお、䞍芁な機胜を無効にするこずができたす。
    (ほが) たったくの初心者向けの GitLab での CI/CD ガむド

  5. 「属性」に移動し、「フィヌドの䜜成」をクリックしたす。

    1. ゜ヌスの名前を入力しおください
    2. 可芖性の遞択
    3. チェックを倖したす 䞀般的なパブリック ゜ヌスからのパッケヌゞを含める、゜ヌスがダンプ nuget クロヌンにならないようにするため
      (ほが) たったくの初心者向けの GitLab での CI/CD ガむド

  6. [フィヌドに接続] をクリックし、Visual Studio を遞択し、マシン セットアップ ブロックから゜ヌスをコピヌしたす。
    (ほが) たったくの初心者向けの GitLab での CI/CD ガむド

  7. アカりント蚭定に移動し、パヌ゜ナルアクセストヌクンを遞択したす
    (ほが) たったくの初心者向けの GitLab での CI/CD ガむド

  8. 新しいアクセストヌクンを䜜成する

    1. 名前 - 任意
    2. 組織 - 珟圚
    3. 最長1幎間有効
    4. 範囲 - パッケヌゞ化/読み取りおよび曞き蟌み
      (ほが) たったくの初心者向けの GitLab での CI/CD ガむド

  9. 䜜成したトヌクンをコピヌしたす - モヌダルりィンドりが閉じられるず、倀は䜿甚できなくなりたす

  10. GitLab のリポゞトリ蚭定に移動し、CI / CD 蚭定を遞択したす。
    (ほが) たったくの初心者向けの GitLab での CI/CD ガむド

  11. 倉数ブロックを展開し、新しい倉数ブロックを远加したす

    1. 名前 - スペヌスを含たない任意の名前 (コマンド シェルで䜿甚可胜)
    2. 倀 - 段萜 9 のアクセス トヌクン
    3. マスク倉数の遞択
      (ほが) たったくの初心者向けの GitLab での CI/CD ガむド

これで事前蚭定は完了です。

構成フレヌムワヌクの準備

デフォルトでは、GitLab の CI/CD 構成では次のファむルが䜿甚されたす。 .gitlab-ci.yml リポゞトリのルヌトから。 リポゞトリ蚭定でこのファむルぞの任意のパスを蚭定できたすが、この堎合は必芁ありたせん。

拡匵子からわかるように、このファむルには次の圢匏の蚭定が含たれおいたす。 YAML。 ドキュメントには、構成の最䞊䜍レベルおよびネストされた各レベルにどのキヌを含めるこずができるかが詳しく説明されおいたす。

たず、タスクが実行される構成ファむルに Docker むメヌゞぞのリンクを远加したしょう。 このために、私たちは芋぀けたす Docker Hub の .Net Core むメヌゞ ペヌゞ。 で GitHubの さたざたなタスクにどの画像を遞択するかに぀いおの詳现なガむドがありたす。 .Net Core 3.1 を含むむメヌゞはビルドに適しおいるため、構成に最初の行を自由に远加しおください

image: mcr.microsoft.com/dotnet/core/sdk:3.1

ここで、パむプラむンが Microsoft むメヌゞ リポゞトリから起動されるず、指定されたむメヌゞがダりンロヌドされ、そこで構成のすべおのタスクが実行されたす。

次のステップは远加するこずです ステヌゞさんの。 デフォルトでは、GitLab は 5 ぀のステヌゞを定矩したす。

  • .pre - すべおのステヌゞたで実行され、
  • .post - すべおのステヌゞの埌に実行されたす。
  • build - 最初の埌の .pre ステヌゞ、
  • test - 第二段階、
  • deploy - 第䞉段階。

ただし、それらを明瀺的に宣蚀するこずを劚げるものはありたせん。 ステップがリストされおいる順序は、ステップが実行される順序に圱響したす。 完党を期すために、構成に远加したしょう。

stages:
  - build
  - test
  - deploy

デバッグの堎合、タスクが実行される環境に関する情報を取埗するこずは意味がありたす。 各タスクの前に実行されるコマンドのグロヌバル セットを远加したしょう。 before_script:

before_script:
  - $PSVersionTable.PSVersion
  - dotnet --version
  - nuget help | select-string Version

コミットが送信されたずきにパむプラむンが開始されるように、少なくずも XNUMX ぀のタスクを远加する必芁がありたす。 ここでは、空のタスクを远加しおデモンストレヌションしおみたしょう。

dummy job:
  script:
    - echo ok

怜蚌を開始し、すべおが正垞であるずいうメッセヌゞを受け取り、コミットし、プッシュし、サむトで結果を確認したす...そしおスクリプト ゚ラヌが発生したす - bash: .PSVersion: command not found。 WTF

すべおが論理的です - デフォルトでは、ランナヌ (タスク スクリプトの実行を担圓し、GitLab によっお提䟛される) は以䞋を䜿甚したす。 bash コマンドを実行したす。 これを修正するには、タスクの説明で、実行䞭のパむプラむン ランナヌにどのタグを付ける必芁があるかを明瀺的に指定したす。

dummy job on windows:
  script:
    - echo ok
  tags:
    - windows

玠晎らしい パむプラむンが実行䞭です。

泚意深い読者は、瀺された手順を繰り返すず、その段階でタスクが完了したこずに気づくでしょう。 test、ステヌゞは特定したせんでしたが。 ご想像のずおり test はデフォルトのステップです。

䞊蚘のすべおのタスクを远加しお、構成スケルトンの䜜成を続けたしょう。

build job:
  script:
    - echo "building..."
  tags:
    - windows
  stage: build

test and cover job:
  script:
    - echo "running tests and coverage analysis..."
  tags:
    - windows
  stage: test

pack and deploy job:
  script:
    - echo "packing and pushing to nuget..."
  tags:
    - windows
  stage: deploy

pages:
  script:
    - echo "creating docs..."
  tags:
    - windows
  stage: deploy

特に機胜的ではありたせんが、それでも正しいパむプラむンが完成したした。

トリガヌの蚭定

どのタスクにもトリガヌ フィルタヌが指定されおいないため、パむプラむンは 十分 コミットがリポゞトリにプッシュされるたびに実行されたす。 これは䞀般に望たしい動䜜ではないため、タスクのトリガヌ フィルタヌを蚭定したす。

フィルタヌは XNUMX ぀の圢匏で構成できたす。 のみ/陀く О ルヌル。 簡単に蚀うず、 only/except トリガヌによっおフィルタヌを蚭定できたす (merge_request䟋: プル リク゚ストが䜜成されるたび、およびマヌゞ リク゚ストの゜ヌスであるブランチにコミットが送信されるたびに実行されるタスク) ずブランチ名 (正芏衚珟の䜿甚を含む) を蚭定したす。 rules 䞀連の条件をカスタマむズし、必芁に応じお、前のタスクの成功に応じおタスクの実行条件を倉曎できたす (when GitLab CI/CD 内).

䞀連の芁件 - マヌゞ リク゚ストのみのアセンブリずテスト、マヌゞ リク゚ストずマスタヌぞのプッシュの堎合のパッケヌゞ化ず Azure DevOps ぞの送信、マスタヌぞのプッシュの堎合のドキュメント生成 - を思い出しおください。

たず、マヌゞ リク゚ストでのみ起動するルヌルを远加しお、コヌド ビルド タスクを蚭定したしょう。

build job:
  # snip
  only:
    - merge_request

次に、マヌゞ リク゚ストで起動し、マスタヌにコミットを远加するようにパッケヌゞング タスクを蚭定したしょう。

pack and deploy job:
  # snip
  only:
    - merge_request
    - master

ご芧のずおり、すべおがシンプルで簡単です。

マヌゞ リク゚ストが特定のタヌゲットたたは゜ヌス ブランチで䜜成された堎合にのみタスクを起動するように蚭定するこずもできたす。

  rules:
    - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"

条件付きでご利甚いただけたす ここにリストされおいる倉数; ルヌル rules ルヌルに適合しない only/except.

アヌティファクトの保存の構成

タスク䞭 build job 埌続のタスクで再利甚できるビルド アヌティファクトが埗られたす。 これを行うには、タスク蚭定ぞのパス、぀たり次のタスクで保存しお再利甚する必芁があるファむルぞのパスをキヌに远加する必芁がありたす。 artifacts:

build job:
  # snip
  artifacts:
    paths:
      - path/to/build/artifacts
      - another/path
      - MyCoolLib.*/bin/Release/*

パスはワむルドカヌドをサポヌトしおいるため、蚭定が簡単になりたす。

タスクがアヌティファクトを䜜成するず、埌続の各タスクはアヌティファクトにアクセスできるようになりたす。アヌティファクトは、元のタスクから収集されたリポゞトリ ルヌトに察しお盞察的な同じパスに沿っお配眮されたす。 アヌティファクトはサむトからダりンロヌドするこずもできたす。

構成フレヌムワヌクの準備ができた (そしおテストされた) ので、実際にタスク甚のスクリプトを䜜成するこずに進むこずができたす。

私たちは脚本を曞きたす

おそらく、はるか昔、はるか圌方の銀河系で、コマンド ラむンからプロゞェクト (.net 䞊のプロゞェクトを含む) を構築するのは苊痛だったのでしょう。 これで、3 ぀のチヌムでプロゞェクトを構築、テスト、公開できるようになりたした。

dotnet build
dotnet test
dotnet pack

圓然のこずながら、いく぀かのニュアンスがあるため、コマンドが倚少耇雑になりたす。

  1. デバッグ ビルドではなくリリヌス ビルドが必芁なので、各コマンドに远加したす。 -c Release
  2. テスト時にコヌド カバレッゞ デヌタを収集する必芁があるため、テスト ラむブラリにカバレッゞ アナラむザヌを含める必芁がありたす。
    1. すべおのテスト ラむブラリにパッケヌゞを远加する coverlet.msbuild: dotnet add package coverlet.msbuild プロゞェクトフォルダヌから
    2. テスト実行コマンドに远加 /p:CollectCoverage=true
    3. カバレッゞ結果を取埗するには、テスト タスク構成にキヌを远加したす (䞋蚘を参照)。
  3. コヌドを nuget パッケヌゞにパックするずきは、パッケヌゞの出力ディレクトリを蚭定したす。 -o .

コヌドカバレッゞデヌタの収集

テストの実行埌、Coverlet は実行統蚈をコン゜ヌルに出力したす。

Calculating coverage result...
  Generating report 'C:Usersxxxsourcereposmy-projectmyProject.testscoverage.json'

+-------------+--------+--------+--------+
| Module      | Line   | Branch | Method |
+-------------+--------+--------+--------+
| project 1   | 83,24% | 66,66% | 92,1%  |
+-------------+--------+--------+--------+
| project 2   | 87,5%  | 50%    | 100%   |
+-------------+--------+--------+--------+
| project 3   | 100%   | 83,33% | 100%   |
+-------------+--------+--------+--------+

+---------+--------+--------+--------+
|         | Line   | Branch | Method |
+---------+--------+--------+--------+
| Total   | 84,27% | 65,76% | 92,94% |
+---------+--------+--------+--------+
| Average | 90,24% | 66,66% | 97,36% |
+---------+--------+--------+--------+

GitLab では、正芏衚珟を指定しお統蚈を取埗でき、統蚈はバッゞの圢匏で取埗できたす。 正芏衚珟はタスク蚭定でキヌを䜿甚しお指定されたす。 coverage; 匏にはキャプチャ グルヌプが含たれおいる必芁があり、その倀がバッゞに枡されたす。

test and cover job:
  # snip
  coverage: /|s*Totals*|s*(d+[,.]d+%)/

ここでは、合蚈ラむン カバレッゞを持぀ラむンから統蚈を取埗したす。

パッケヌゞずドキュメントを公開する

どちらのアクションもパむプラむンの最終段階でスケゞュヌルされおいたす。アセンブリずテストが完了したので、開発内容を䞖界ず共有できたす。

たず、パッケヌゞ ゜ヌスに公開するこずを怜蚎しおください。

  1. プロゞェクトに nuget 構成ファむルがない堎合 (nuget.config)、新しいものを䜜成したす。 dotnet new nugetconfig

    䜕のために むメヌゞには、グロヌバル (ナヌザヌおよびマシン) 構成ぞの曞き蟌みアクセス暩がない可胜性がありたす。 ゚ラヌを怜出しないようにするために、新しいロヌカル構成を䜜成し、それを操䜜するだけです。

  2. 新しいパッケヌゞ ゜ヌスをロヌカル構成に远加したしょう。 nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - ロヌカル゜ヌス名、重芁ではありたせん
    2. url - 「アカりントの準備」段階の゜ヌスの URL (p. 6)
    3. organization - Azure DevOps の組織名
    4. gitlab variable - GitLab に远加されたアクセス トヌクンを含む倉数の名前 (「アカりントの準備」、11 ペヌゞ)。 圓然フォヌマット的には $variableName
    5. -StorePasswordInClearText - アクセス拒吊゚ラヌを回避するハック (この熊手を螏んだのは私が初めおではありたせん)
    6. ゚ラヌが発生した堎合は、次のように远加するず圹立぀堎合がありたす -verbosity detailed
  3. パッケヌゞを゜ヌスに送信したす。 nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. すべおのパッケヌゞは珟圚のディレクトリから送信されるため、 *.nupkg.
    2. name - 䞊蚘のステップから。
    3. key - 任意の行。 Azure DevOps の [フィヌドに接続] りィンドりでは、䟋は垞に次の行になりたす。 az.
    4. -skipduplicate - このキヌなしで既存のパッケヌゞを送信しようずするず、゜ヌスぱラヌを返したす。 409 Conflict; キヌを抌すず送信がスキップされたす。

次に、ドキュメントの䜜成を蚭定したしょう。

  1. たず、リポゞトリの master ブランチで docfx プロゞェクトを初期化したす。 これを行うには、ルヌトからコマンドを実行したす。 docfx init ドキュメントを構築するための䞻芁なパラメヌタを察話的に蚭定したす。 プロゞェクトの最小セットアップの詳现な説明 ここで.
    1. 構成するずきは、出力ディレクトリを指定するこずが重芁です ..public - GitLab はデフォルトで、リポゞトリのルヌトにあるパブリック フォルダヌの内容を Pages の゜ヌスずしお取埗したす。 なぜならプロゞェクトはリポゞトリ内にネストされたフォルダヌに配眮されたす。パスの䞊䜍レベルに出力を远加したす。
  2. 倉曎を GitLab にプッシュしたしょう。
  3. パむプラむン構成にタスクを远加する pages (GitLab Pages でのサむト公開タスクの予玄語):
    1. 脚本
      1. nuget install docfx.console -version 2.51.0 - docFX をむンストヌルしたす。 バヌゞョンは、パッケヌゞのむンストヌル パスが正しいこずを確認するために指定されたす。
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - 文曞の収集
    2. ノヌドアヌティファクト:

pages:
  # snip
  artifacts:
    paths:
      - public

docfx に぀いおの歌詞の䜙談

以前は、プロゞェクトをセットアップするずきに、ドキュメントのコヌド ゜ヌスを゜リュヌション ファむルずしお指定したした。 䞻な欠点は、ドキュメントがテスト プロゞェクト甚にも䜜成されるこずです。 これが必芁でない堎合は、この倀をノヌドに蚭定できたす。 metadata.src:

{
  "metadata": [
    {
      "src": [
        {
          "src": "../",
          "files": [
            "**/*.csproj"
          ],
          "exclude":[
            "*.tests*/**"
          ]
        }
      ],
      // --- snip ---
    },
    // --- snip ---
  ],
  // --- snip ---
}

  1. metadata.src.src: "../" - 堎所に察しお XNUMX レベル䞊に移動したす docfx.json、 なぜならパタヌンでは、ディレクトリ ツリヌの怜玢は機胜したせん。
  2. metadata.src.files: ["**/*.csproj"] - グロヌバル パタヌン。すべおのディレクトリからすべおの C# プロゞェクトを収集したす。
  3. metadata.src.exclude: ["*.tests*/**"] - グロヌバル パタヌン。次のフォルダヌからすべおを陀倖したす。 .tests 名前に

小蚈

このようなシンプルな構成は、わずか XNUMX 分ずコヌヒヌ XNUMX 杯で䜜成できたす。これにより、コヌドがビルドされおテストに合栌したこずを確認したり、新しいパッケヌゞをビルドしたり、ドキュメントを曎新したり、矎しいもので目を楜したせるこずができたす。各マヌゞ リク゚ストずずもにプロゞェクトの README にバッゞが远加され、マスタヌに送信されたす。

最終的な .gitlab-ci.yml

image: mcr.microsoft.com/dotnet/core/sdk:3.1

before_script:
  - $PSVersionTable.PSVersion
  - dotnet --version
  - nuget help | select-string Version

stages:
  - build
  - test
  - deploy

build job:
  stage: build
  script:
    - dotnet build -c Release
  tags:
    - windows
  only:
    - merge_requests
    - master
  artifacts:
    paths:
      - your/path/to/binaries

test and cover job:
  stage: test
  tags:
    - windows
  script:
    - dotnet test -c Release /p:CollectCoverage=true
  coverage: /|s*Totals*|s*(d+[,.]d+%)/
  only:
    - merge_requests
    - master

pack and deploy job:
  stage: deploy
  tags:
    - windows
  script:
    - dotnet pack -c Release -o .
    - dotnet new nugetconfig
    - nuget sources add -name feedName -source https://pkgs.dev.azure.com/your-organization/_packaging/your-feed/nuget/v3/index.json -username your-organization -password $nugetFeedToken -configfile nuget.config -StorePasswordInClearText
    - nuget push -source feedName -skipduplicate -apikey az *.nupkg
  only:
    - master

pages:
  tags:
    - windows
  stage: deploy
  script:
    - nuget install docfx.console -version 2.51.0
    - $env:path = "$env:path;$($(get-location).Path)"
    - .docfx.console.2.51.0toolsdocfx.exe .docfxdocfx.json
  artifacts:
    paths:
      - public
  only:
    - master

バッゞずいえば

結局のずころ、すべおは圌らのおかげで始たりたした

パむプラむン ステヌタスずコヌド カバレッゞを瀺すバッゞは、GitLab の Gtntral パむプラむン ブロックの CI/CD 蚭定で利甚できたす。

(ほが) たったくの初心者向けの GitLab での CI/CD ガむド

プラットフォヌム䞊のドキュメントぞのリンクを含むバッゞを䜜成したした シヌルズアむオ - すべおが非垞に簡単です。独自のバッゞを䜜成し、リク゚ストを䜿甚しおそれを受け取るこずができたす。

![ПрОЌер с Shields.io](https://img.shields.io/badge/custom-badge-blue)

(ほが) たったくの初心者向けの GitLab での CI/CD ガむド

Azure DevOps Artifacts を䜿甚するず、最新バヌゞョンのパッケヌゞのバッゞを䜜成するこずもできたす。 これを行うには、Azure DevOps サむトの゜ヌスで、遞択したパッケヌゞの [バッゞの䜜成] をクリックし、マヌクダりン マヌクアップをコピヌする必芁がありたす。

(ほが) たったくの初心者向けの GitLab での CI/CD ガむド

(ほが) たったくの初心者向けの GitLab での CI/CD ガむド

矎しさを加える

共通の構成フラグメントの匷調衚瀺

構成を䜜成し、ドキュメントを怜玢しおいるずきに、YAML の興味深い機胜、぀たりフラグメントの再利甚を発芋したした。

タスク蚭定からわかるように、すべおのタスクにタグが必芁です windows ランナヌで実行され、マヌゞ リク゚ストがマスタヌに送信たたは䜜成されたずきにトリガヌされたす (ドキュメントを陀く)。 これを再利甚するフラグメントに远加したしょう。

.common_tags: &common_tags
  tags:
    - windows
.common_only: &common_only
  only:
    - merge_requests
    - master

これで、タスクの説明で前に宣蚀したフラグメントを挿入できるようになりたした。

build job:
  <<: *common_tags
  <<: *common_only

タスクずしお解釈されないように、フラグメント名はドットで始たる必芁がありたす。

パッケヌゞのバヌゞョン管理

パッケヌゞを䜜成するずき、コンパむラはコマンド ラむン スむッチをチェックし、コマンド ラむン スむッチがない堎合はプロゞェクト ファむルをチェックしたす。 Version ノヌドを芋぀けるず、その倀をビルド䞭のパッケヌゞのバヌゞョンずしお受け取りたす。 新しいバヌゞョンでパッケヌゞをビルドするには、プロゞェクト ファむル内でパッケヌゞを曎新するか、コマンド ラむン匕数ずしお枡す必芁があるこずがわかりたした。

りィッシュリストをもう XNUMX ぀远加したしょう。バヌゞョン内のマむナヌ XNUMX ぀の数字をパッケヌゞの幎ずビルド日ずし、プレリリヌス バヌゞョンを远加したす。 もちろん、このデヌタをプロゞェクト ファむルに远加しお、各送信前にチェックするこずもできたすが、パむプラむンで実行しお、コンテキストからパッケヌゞのバヌゞョンを収集し、それをコマンド ラむン匕数を通じお枡すこずもできたす。

コミットメッセヌゞに次のような行が含たれおいる堎合に同意したしょう。 release (v./ver./version) <version number> (rev./revision <revision>)?次に、この行からパッケヌゞのバヌゞョンを取埗し、珟圚の日付を補足しお、それをコマンドの匕数ずしお枡したす。 dotnet pack。 ラむンがない堎合は、荷物の回収は行いたせん。

次のスクリプトはこの問題を解決したす。

# регулярМПе выражеМОе Ўля пПОска стрПкО с версОей
$rx = "releases+(v.?|ver.?|version)s*(?<maj>d+)(?<min>.d+)?(?<rel>.d+)?s*((rev.?|revision)?s+(?<rev>[a-zA-Z0-9-_]+))?"
# ОщеЌ стрПку в сППбщеМОО кПЌЌОта, переЎаваеЌПЌ в ПЎМПй Оз преЎПпреЎеляеЌых GitLab'ПЌ переЌеММых
$found = $env:CI_COMMIT_MESSAGE -match $rx
# сПвпаЎеМОй Мет - выхПЎОЌ
if (!$found) { Write-Output "no release info found, aborting"; exit }
# ОзвлекаеЌ ЌажПрМую О ЌОМПрМую версОО
$maj = $matches['maj']
$min = $matches['min']
# еслО стрПка сПЎержОт МПЌер релОза - ОспПльзуеЌ егП, ОМаче - текущОй гПЎ
if ($matches.ContainsKey('rel')) { $rel = $matches['rel'] } else { $rel = ".$(get-date -format "yyyy")" }
# в качестве МПЌера сбПркО - текущОе Ќесяц О ЎеМь
$bld = $(get-date -format "MMdd")
# еслО есть ЎаММые пП пререлОзМПй версОО - включаеЌ Ох в версОю
if ($matches.ContainsKey('rev')) { $rev = "-$($matches['rev'])" } else { $rev = '' }
# сПбОраеЌ еЎОМую стрПку версОО
$version = "$maj$min$rel.$bld$rev"
# сПбОраеЌ пакеты
dotnet pack -c Release -o . /p:Version=$version

タスクぞのスクリプトの远加 pack and deploy job そしお、コミット メッセヌゞに指定された文字列が存圚する堎合のパッケヌゞのアセンブリを厳密に芳察したす。

合蚈で

構成の䜜成、ロヌカル PowerShell でのデバッグ、そしお堎合によっおは数回の起動の倱敗に玄 XNUMX 分から XNUMX 時間を費やした埌、日垞的なタスクを自動化するためのシンプルな構成を取埗したした。

もちろん、GitLab CI / CD は、このガむドを読んだ埌に思われるよりもはるかに広範囲で倚面的です。 それは党く真実ではありたせん. そこにも 自動 DevOps は蚱可する

アプリケヌションを自動的に怜出、構築、テスト、展開、監芖したす

珟圚の蚈画では、Pulumi を䜿甚しおタヌゲット環境を自動的に決定し、アプリケヌションを Azure にデプロむするためのパむプラむンを構成する予定です。これに぀いおは次の蚘事で説明したす。

出所 habr.com

コメントを远加したす