แแ แ แแแแ แแแแฆแแ แแแแแแ แกแแแแแ แแ แแแจแแแแ แแฅแแแแ แแ แแแฅแขแแกแแแแก แแแ แขแแแ แแแแแ แแแแก แแ แ แกแแฆแแแแก
แแแแแ, แงแแแแ แแแแแแแแแ แก, แ แแแแแกแแช แแฅแแก แแแแแแฃแ แแ แแ แจแแแแฃแ แ แชแฎแแแแแแแแก แแ แแแฅแขแ แ แแฆแแช แแแแแแขแจแ, แแฅแแก แฅแแแแแ แแแแแแ แกแแแแแ แแ แแแจแแแแแก แจแแกแแฎแแ แกแขแแขแฃแกแแแแ, แแแแแก แแแคแแ แแแ, แแแแแขแแก แแแ แกแแแแแ nuget-แจแ... แแ แแ แฅแแแแแแ แแแแแซแแ แแแแแฌแแ แ แแก แกแขแแขแแ. แแแก แแแกแแฌแแ แแ แแแแแแแแแแกแแก, แฉแแแก แแ แ-แแ แ แแ แแแฅแขแจแ แแแแแฆแ แแก แกแแแแแแแ:
แแก แกแขแแขแแ แแแแแชแแแแ GitLab-แจแ .Net Core แแแแกแแก แแแแแแแแแแแก แแ แแแฅแขแแก แฃแฌแงแแแขแ แแแขแแแ แแชแแแกแ แแ แแแฌแแแแแแก แซแแ แแแแ แแแงแแแแแแก, GitLab-แแก แแแแ แแแแแ แแแแฃแแแแขแแชแแแก แแแแแฅแแแงแแแแแก แแ Azure DevOps-แจแ แฉแแจแแแแแฃแแ แแแแแขแแแแก แแแ แซแ แแ แฎแแ แแแแแขแแแแก.
VS Code แแแแแแงแแแแแแแ แ แแแแ แช แแแแแแแแ แแแแก แแแ แแแ แแแคแแ แแแแแแ
แแแแแ แจแแกแแแแแ
CD - แแก แแแจแแ แแ แแก, แ แแแแกแแช แแฅแแแ แฃแแ แแแแ แแแซแฃแแแ แแ แงแแแแแคแแ แ แฃแแแ แแแแชแ แแแแแแขแก?
แ แ แแ แแก CI/CD แแ แ แแขแแ แแญแแ แแแแแ แแก - แจแแแแซแแแแ แแแ แขแแแแ แแแซแแแแแ แแฃแแแ. แแแแแแ แกแ แฃแแ แแแแฃแแแแขแแชแแ GitLab-แจแ แแแแกแแแแแแแแก แแแแคแแแฃแ แแชแแแก แจแแกแแฎแแ
- แแแแแแแแแ แ แแแแแแแแก commit-แก แกแแชแแแจแ, แฅแแแแก แจแแ แฌแงแแแก แแแแฎแแแแแก แกแแแขแแก แแแจแแแแแแ, แแ แกแฎแแ แแแแ, แแจแแแ แแ แแ แแ แแแแ แแฌแงแแแก แแแแกแแแแแก,
- แงแแแแ แแแแแแแแ แแ แฉแแฃแแแ แแแแคแแแฃแ แแชแแแแแ, แ แแแแแก แแแ แแแแแแช แกแแจแฃแแแแแแก แแซแแแแก แแแ แแแจแแแแแก แแแชแแแฃแ แแแแขแแฅแกแขแจแ,
- แแแแแแแแแแ แแ แแแแแแแแฃแแแ แแแแ แแขแแแแแแก แแแฎแแแแแ,
- แแขแแแแแ แจแแกแ แฃแแแแฃแแแ แ แแแ แแแแแแ - แ.แ. แแแ แแแแแฃแ แแ แแ แแขแแแแก แงแแแแ แแแแแแแแ แแแกแ แฃแแแแฃแแแ,
- แแฃ แแขแแแ แแแ แแแฎแแ แฎแแ (แแแฃ, แกแชแแแแก แแ แ-แแ แแ แแแแชแแแ แแแแแช แแแ แแแฎแแ แฎแแ), แแแแกแแแแแ แฉแแ แแแแ (แแแแฅแแแก แงแแแแแแแแก),
- แแฃ แงแแแแ แแขแแแ แฌแแ แแแขแแแแ แแแกแ แฃแแแ, แแแแกแแแแแ แฌแแ แแแขแแแฃแแแ แแแแแแแ.
แแแ แแแแ, แฉแแแ แแแแฅแแก:
- แแแแกแแแแแ - แแขแแแแแแ แแแแแแแแฃแแ แแแแชแแแแแแก แแแแ แแแ, แ แแแแแแจแแช แจแแแแซแแแแ แจแแฅแแแแ, แจแแแแแฌแแแ, แจแแคแฃแแแ แแแแ, แแแแแแแแกแแ แแแ แแแแกแขแ แฃแฅแชแแ แฆแ แฃแแแแแแ แกแแ แแแกแแ แแ แ.แจ.
- แแขแแแ (แแขแแแ) โ แแแแกแแแแแแก แแ แแแแแแแชแแฃแแ แแ แแแฃแแ, แจแแแชแแแก 1+ แแแแชแแแแก,
- แแแแแแแแ (แกแแแฃแจแแ) แแ แแก แกแแแฃแจแแ แแ แแแฃแแ แแแแกแแแแแจแ. แแแ แจแแแแแแ แกแแ แแแขแแกแแแ (แกแแแแแแแแฃแแ), แแแจแแแแแก แแแ แแแแแแกแแแ, แแ แขแแคแแฅแขแแแแก แแแแแฅแแแงแแแแแก/แฅแแจแแ แแแแก แแแ แแแแขแ แแแแกแแแ แแ แแ แแแแแ แกแฎแแแแแ.
แจแแกแแแแแแกแแ, CI / CD แแแงแแแแแแกแแก แแแแแแแแ แแแแแ แแแแ แแแแชแแแแแแก แแแแ แแแแก แจแแฅแแแแแ, แ แแแแแแช แแฎแแ แชแแแแแแก แงแแแแ แกแแญแแ แ แแแฅแแแแแแแก แแแแแกแ แแ แแ แขแแคแแฅแขแแแแก แจแแกแแฅแแแแแแ, แขแแกแขแแ แแแแกแ แแ แแแแแฅแแแงแแแแแกแแแแก.
แแแฌแงแแแแแแ: แ แแขแแ?
- แ แแขแแ Gitlab?
แแแแก แแแแ, แ แแ แ แแแแกแแช แกแแญแแ แ แแแฎแแ แจแแแแฃแ แ แชแฎแแแแแแแแก แแ แแแฅแขแแแแกแแแแก แแแ แซแ แกแแชแแแแแแก แจแแฅแแแ, แแแ แแแแแฎแแแแแแ GitHub-แแ แแ แแ แแแงแแแ แฎแแ แ. แกแแชแแแแแ แฃแคแแกแ แแแฎแแ, แแแแ แแ แฏแแ แฏแแ แแแแ แแก แแ แแ แแก แกแแแแแ แแกแ แแแแแแ, แ แแ แแแแแแแขแแแ GitHub-แจแ.
- แ แแขแแ แแ แ Azure DevOps Pipelines?
แ แแแแแ แแฅ แแแ แแแแขแ แ แแแแแแแขแแ แฃแแแ - แแ แซแแแแแแก แกแขแ แแฅแแแแก แชแแแแ แแ แช แแ แแ แแก แกแแญแแ แ. แแแขแแแ แแชแแ แแแ แ git แแ แแแแแแแ แแแแแ - แ แแแแแแแแ แแแฌแแแแฃแแแแแ, SSH แแแแแแจแแแแก แแแแแ แขแ แกแแชแแแจแ แแแแแแแฃแแแแแแแก แแแกแแแแแแแแ - แแกแแแ, แแแแกแแแแแแก แแแแคแแแฃแ แแชแแ แแแ แขแแแแ แฎแแแแ แแฃแแแแช แจแแแแแแแแแ แแ แ.
แกแแฌแงแแกแ แแแแแชแแ: แ แ แแแฅแแก แแ แ แ แแแแแ
แฒฉแแแ แแแแฅแแก:
- แกแแชแแแ GitLab-แจแ.
แฒฉแแแ แแแแแแ:
- แแแขแแแแขแฃแ แ แจแแแ แแแ แแ แขแแกแขแแ แแแ แแแแแแฃแแ แจแแ แฌแงแแแก แแแแฎแแแแแกแแแแก,
- แจแแฅแแแแแ แแแแแขแแแ แงแแแแแ แจแแ แฌแงแแแก แแแแฎแแแแแกแแแแก แแ แฃแแแซแแแแ แแแกแขแแ แก, แแ แแแ แแแแ, แ แแ แแ แกแแแแแก แแแ แแแแฃแแ แฎแแแ commit แจแแขแงแแแแแแแแจแ,
- แฉแแจแแแแแฃแแ แแแแแขแแแแก แแแแแแแแ แแแ แซแ แแ แฎแแ Azure DevOps-แจแ,
- แแแแฃแแแแขแแชแแแก แจแแแ แแแ แแ แแแแแฅแแแงแแแแ GitLab แแแแ แแแแแ,
- แกแแแแแ แแ แแแจแแแแ!11
แแฆแฌแแ แแแ แแแแฎแแแแแแ แแ แแแแฃแแแ แแฅแชแแแ แแแแกแแแแแแก แจแแแแแ แแแแแแก:
- แแขแแแ 1 - แจแแแ แแแ
- แฉแแแ แแแแ แแแแแ แแแแก, แแแฅแแแงแแแแ แแแแแแแแแ แคแแแแแแก แแ แขแแคแแฅแขแแแแ
- แแขแแแ 2 - แขแแกแขแแ แแแ
- แฉแแแ แแแฆแแแ แแ แขแแคแแฅแขแแแก แแจแแแแแแแแแก แแขแแแแแแ, แแแขแแ แแแ แขแแกแขแแแก, แแแแ แแแแแ แแแแแก แแแคแแ แแแก แแแแแชแแแแแก
- แแขแแแ 3 - แฌแแ แแแแแ
- แแแแชแแแ 1 - แจแแฅแแแแแ nuget แแแแแขแ แแ แแแแแแแแแ Azure DevOps-แจแ
- แแแแแแแแ 2 - แฉแแแ แแแแ แแแแแ แกแแแขแก xmldoc-แแแ แกแแฌแงแแก แแแแจแ แแ แแแฅแแแงแแแแ แแแก GitLab แแแแ แแแแแ
แฒแแแแฌแงแแ!
แแแแคแแแฃแ แแชแแแก แจแแแ แแแแแ
แแแแแ แแจแแแแก แแแแแแแแแ
-
แจแแฅแแแแแ แแแแแ แแจแ
Microsoft Azure -
แฒฌแแแ
Azure DevOps -
แฉแแแ แแฅแแแแ แแฎแแ แแ แแแฅแขแก
- แกแแฎแแแ - แแแแแกแแแแ แ
- แฎแแแแแแแแ - แแแแแกแแแแ แ
-
แ แแแแกแแช แแแแฌแแแแฃแแแแ แฆแแแแแแ Create, แแ แแแฅแขแ แจแแแฅแแแแแ แแ แแฅแแแ แแแแแแแกแแแแ แแแแแแ แแแก แแแแ แแแ. แแ แแแแ แแแ แจแแแแซแแแแ แแแแแ แแแ แแ แแกแแญแแ แ แคแฃแแฅแชแแแแ แแ แแแฅแขแแก แแแ แแแแขแ แแแแ แแแแแกแแแแ (แฅแแแแ แแแฃแแ แกแแแจแ แแแ แชแฎแแแ -> แแแแแฎแแแแ -> Azure DevOps Services แแแแแ)
-
แแแแแแแ Atrifacts-แแ, แแแแฌแแแแฃแแแ แแ แฎแแก แจแแฅแแแแแ
- แจแแแงแแแแแ แฌแงแแ แแก แกแแฎแแแ
- แแแ แฉแแแ แฎแแแแแแแแ
- แแแฎแกแแแแ แแแแแจแแแ แฉแแ แแแ แแแแแขแแแ แกแแแ แแ แกแแฏแแ แ แฌแงแแ แแแแแแแ, แ แแแ แฌแงแแ แ แแ แแแแแแฅแชแแก แแแแแแกแแงแ แแ แแฃแแแข แแแแแแ
-
แแแแฌแแแแฃแแแ แแแแแแจแแ แแแ แจแแกแแแแฎแแ, แแแ แฉแแแ Visual Studio, แแแแแแแแ แแ Source Machine Setup แแแแแแแแ
-
แแแแแแแ แแแแแ แแจแแก แแแ แแแแขแ แแแจแ, แแแ แฉแแแ แแแ แกแแแแแฃแ แ แฌแแแแแแก แแแจแแแ
-
แจแแฅแแแแแ แแฎแแแ แฌแแแแแแก แแแจแแแ
- แกแแฎแแแ - แแแแแแแแฃแ แ
- แแ แแแแแแแชแแ - แแแแแแแแ แ
- แซแแแแจแแ แแแฅแกแแแฃแ 1 แฌแแแ
- แกแคแแ แ - แจแแคแฃแแแ/แฌแแแแแฎแแ แแ แฌแแ แ
-
แแแแแแแแ แแ แจแแฅแแแแแ แแแขแแแ - แแแแแแฃแ แ แคแแแฏแ แแก แแแฎแฃแ แแแก แจแแแแแ, แแแแจแแแแแแแ แแแฃแฌแแแแแแแ แแฅแแแแ
-
แแแแแแแ GitLab-แแก แกแแชแแแแก แแแ แแแแขแ แแแแ, แแแ แฉแแแ CI / CD แแแ แแแแขแ แแแ
-
แแแแคแแ แแแแแ แชแแแแแแแแก แแแแแ, แแแแแแขแแ แแฎแแแ
- แกแแฎแแแ - แแแแแกแแแแ แ แกแแแ แชแแแแแก แแแ แแจแ (แฎแแแแแกแแฌแแแแแ แแฅแแแแ แแ แซแแแแแแก แแแ แกแจแ)
- แฆแแ แแแฃแแแแ - แฌแแแแแแก แแแจแแแ แแ-9 แแฃแแฅแขแแแแ
- แแแ แฉแแแ แแแฆแแแ แชแแแแแ
แแก แแกแ แฃแแแแก แฌแแแแกแฌแแ แแแแคแแแฃแ แแชแแแก.
แแแแคแแแฃแ แแชแแแก แฉแแ แฉแแก แแแแแแแแแ
แแแแฃแแแกแฎแแแแแ, CI/CD แแแแคแแแฃแ แแชแแ GitLab-แจแ แแงแแแแแก แคแแแแก .gitlab-ci.yml
แกแแชแแแแก แซแแ แแแแ. แแฅแแแ แจแแแแซแแแแ แแแแงแแแแ แแ แคแแแแแก แแแแแแแแฃแ แ แแแ แกแแชแแแแก แแแ แแแแขแ แแแจแ, แแแแ แแ แแ แจแแแแฎแแแแแจแ แแก แแ แแ แแก แแฃแชแแแแแแแ.
แ แแแแ แช แแแคแแ แแแแแแแแ แฎแแแแแ, แคแแแแ แจแแแชแแแก แแแแคแแแฃแ แแชแแแก แคแแ แแแขแจแ YAML
. แแแแฃแแแแขแแชแแ แแฌแแแแก แแแคแแ แแแชแแแก, แแฃ แ แแแแแ แแแกแแฆแแแแแ แจแแแซแแแแ แจแแแชแแแแแก แแแแคแแแฃแ แแชแแแก แแแแ แแแแแแ แแ แแแแแแฃแ แฉแแแแแฃแ แแแแแแ.
แแแ แแแ แ แแแจแ, แแแแคแแแฃแ แแชแแแก แคแแแแจแ แแแแแแแขแแ แแแฃแแ แแแแแ แแก แกแฃแ แแแแ, แ แแแแแจแแช แจแแกแ แฃแแแแแ แแแแแแแแแแ. แแแแกแแแแแก แฉแแแ แแแแฃแแแแ
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
แ แฉแแแ แแแแแแฃแ แแ แแ แแแแแแแแแก แแแแแขแแแ แแกแ, แ แแ แ แแแแกแแช แแแแแแแฃแแแแแแ แแแแแแแแแแแ, แแแแกแแแแแ แแแแฌแงแแแ. แแฎแแ แแแแแ แแแแแแแขแแ แชแแ แแแแ แแแแแแแแ แกแแฉแแแแแแแแ:
dummy job:
script:
- echo ok
แแแฌแงแแแ แแแแแแแชแแแก, แแแฆแแแ แจแแขแงแแแแแแแแก, แ แแ แงแแแแแคแแ แ แแแ แแแแแ, แแแกแ แฃแแแแ แแแแแแแฃแแแแแก, แแแฎแแแแ, แแฃแงแฃแ แแแ แจแแแแแแแก แกแแแขแแ... แแ แแแฆแแแ แกแแ แแแขแแก แจแแชแแแแแก - bash: .PSVersion: command not found
. wtf?
แงแแแแแคแแ แ แแแแแแฃแ แแ - แกแขแแแแแ แขแฃแแแ, runners (แแแกแฃแฎแแกแแแแแแแแ แแแแแแแแแก แกแแ แแแขแแแแก แจแแกแ แฃแแแแแแ แแ แแแฌแแแแแฃแแแ 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
แแแแแฆแแ แแ แ แแแแกแแแฃแแ แแแแ แคแฃแแฅแชแแแแแแฃแ แ, แแแแ แแ แแแแแช แกแฌแแ แ แแแแกแแแแแ.
แขแ แแแแ แแแแก แแแงแแแแแ
แแแแก แแแแ, แ แแ แแ แชแแ แแ แแแแชแแแแกแแแแก แแ แแ แแก แแแแแแแแฃแแ แขแ แแแแ แแก แคแแแขแ แแแ, แแแแกแแแแแ แแฅแแแแ แกแ แฃแแแ แฃแแแ แจแแกแ แฃแแแแก แงแแแแ แฏแแ แแ, แ แแแแกแแช commit แแแแแแแก แกแแชแแแจแ. แแแแแแแแ แแก แแ แแ แแก แแแแแแแ แกแแกแฃแ แแแแ แฅแชแแแ, แฉแแแ แแแแแงแแแแแ แแแแชแแแแแแก แขแ แแแแ แแแแก แคแแแขแ แแแก.
แคแแแขแ แแแแก แแแแคแแแฃแ แแชแแ แจแแกแแซแแแแแแแ แแ แคแแ แแแขแจแ: only/except
แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแแคแแแฃแ แแ แแ แคแแแขแ แแแ แขแ แแแแ แแแแก แแแฎแแแแแ (merge_request
, แแแแแแแแแ - แแแแแแก แแแแแแแแแก, แ แแแแแแช แฃแแแ แจแแกแ แฃแแแแก แงแแแแ แฏแแ แแ, แ แแแแกแแช pull แแแแฎแแแแ แแฅแแแแแ แแ แงแแแแ แฏแแ แแ, แ แแแแกแแช commits แแแแแแแแแ แคแแแแแแจแ, แ แแแแแแช แแ แแก แฌแงแแ แ แจแแ แฌแงแแแก แแแแฎแแแแแจแ) แแ แคแแแแแแแแแก แกแแฎแแแแแ (แ แแแฃแแแ แฃแแ แแแแแแแแฅแแแแแแแก แแแแแงแแแแแแก แฉแแแแแแ); 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
แแฃแแแแ แแแแ, แแ แแก แ แแแแแแแแ แแแฃแแแกแ, แ แแก แแแแแช แฉแแแ แแแ แแแแฃแแฌแแแแ แแแแแ แแฃแแแแ แแ แซแแแแแแแก.
- แฉแแแ แแแแแแ แแแแแจแแแแแก build แแ แแ แ แแแแแ แแแแก แแแแกแขแ แฃแฅแชแแ, แแแแขแแ แแแแแขแแแ แแแแแแฃแ แแ แซแแแแแแก
-c Release
- แขแแกแขแแ แแแแกแแก แฉแแแ แแแแแแ แจแแแแแ แแแแ แแแแแก แแแคแแ แแแก แแแแแชแแแแแ, แแแแขแแ แฃแแแ แฉแแแ แแแ แแแคแแ แแแก แแแแแแแแขแแ แ แขแแกแขแแก แแแแแแแแแแแแจแ:
- แแแแแแขแแ แแแแแขแ แงแแแแ แกแแขแแกแขแ แแแแแแแแแแแจแ
coverlet.msbuild
:dotnet add package coverlet.msbuild
แแ แแแฅแขแแก แกแแฅแแฆแแแแแแแ - แแแแแแขแแ แขแแกแขแแก แแแจแแแแแก แแ แซแแแแแแก
/p:CollectCoverage=true
- แแแแแแขแแ แแแกแแฆแแแ แกแแขแแกแขแ แแแแแแแแแก แแแแคแแแฃแ แแชแแแจแ แแแคแแ แแแก แจแแแแแแแแก แแแกแแฆแแแแ (แแฎ. แฅแแแแแ)
- แแแแแแขแแ แแแแแขแ แงแแแแ แกแแขแแกแขแ แแแแแแแแแแแจแ
- แแแแแก 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+%)/
แแฅ แฉแแแ แแแฆแแแ แกแขแแขแแกแขแแแแก แฎแแแแก แแแแแแแ แแแคแแ แแแ.
แแแแแแฅแแแงแแแ แแแแแขแแแ แแ แแแแฃแแแแขแแชแแ
แแ แแแ แแแฅแแแแแแ แแแแแแแแแแ แแแแกแแแแแแก แแแแ แแขแแแแ - แแแก แจแแแแแ, แ แแช แแฌแงแแแ แแ แขแแกแขแแแ แแแแแ แ, แฉแแแ แจแแแแแซแแแ แแแแฃแแแแ แแ แฉแแแแ แแแแแแแแ แแแแแ แแกแแคแแแแก.
แแแ แแแ แ แแแจแ, แแแแแฎแแแแ แแแแแขแแก แฌแงแแ แแแ แแแแแฅแแแงแแแแ:
-
แแฃ แแ แแแฅแขแก แแ แแฅแแก nuget แแแแคแแแฃแ แแชแแแก แคแแแแ (
nuget.config
), แจแแฅแแแแแ แแฎแแแ:dotnet new nugetconfig
แฒ แแกแแแแก: แกแฃแ แแแก แจแแแซแแแแ แแ แฐแฅแแแแแก แฉแแฌแแ แแก แฌแแแแแ แแแแแแแฃแ (แแแแฎแแแ แแแแแกแ แแ แแแแฅแแแแก) แแแแคแแแฃแ แแชแแแแแ. แแแแกแแแแแก, แ แแ แแ แแแแแญแแ แแ แจแแชแแแแแแ, แฉแแแ แฃแแ แแแแ แแฅแแแแ แแฎแแ แแแแแแฃแ แแแแคแแแฃแ แแชแแแก แแ แแแแฃแจแแแแแ แแแกแแแ.
- แแแแแ แแแแแแแขแแ แแแแแขแแก แแฎแแแ แฌแงแแ แ แแแแแแฃแ แแแแคแแแฃแ แแชแแแจแ:
nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
name
- แแแแแแแแ แแแ แฌแงแแ แแก แกแแฎแแแ, แแ แ แแ แแขแแแฃแแurl
- แฌแงแแ แแก URL แกแขแแแแแแแ "แแแแแ แแจแแแแก แแแแแแแแแ", แแ.6organization
- แแ แแแแแแแชแแแก แกแแฎแแแ Azure DevOps-แจแgitlab variable
- แชแแแแแแก แกแแฎแแแ GitLab-แจแ แแแแแขแแแฃแแ แฌแแแแแแก แแแจแแแ ("แแแแแ แแจแแแแก แแแแแแแแแ", แแ. 11). แแฃแแแแ แแแแ, แคแแ แแแขแจแ$variableName
-StorePasswordInClearText
- แฐแแแ แแแแ แแแก แแแแแ แฌแแแแแแแ แแแ แซแแแฃแแ แจแแชแแแแแก แแแแ แแแก แแแแแ (แแ แแ แแแ แแแ แแแแ, แแแแช แแ แ แแแแแ แแแแแแฏแแแก )- แจแแชแแแแแแแก แจแแแแฎแแแแแจแ, แจแแแซแแแแ แกแแกแแ แแแแแ แแงแแก แแแแแขแแแ
-verbosity detailed
- แแแแแขแแก แแแแแแแแ แฌแงแแ แแแ:
nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
- แฉแแแ แแแแแแแแแ แงแแแแ แแแแแขแก แแแแแแแแ แ แแแ แแฅแขแแ แแแแแ, แแกแ แ แแ
*.nupkg
. name
- แแแแแ แกแแคแแฎแฃแ แแแแ.key
- แแแแแกแแแแ แ แฎแแแ. Azure DevOps-แจแ, Connect to feed แคแแแฏแแ แแจแ, แแแแแแแแ แงแแแแแแแแก แแ แแก แฎแแแaz
.-skipduplicate
- แแ แแแกแแฆแแแแก แแแ แแจแ แฃแแแ แแ แกแแแฃแแ แแแแแขแแก แแแแแแแแแก แแชแแแแแแแกแแก, แฌแงแแ แ แแแแแ แฃแแแแก แจแแชแแแแแก409 Conflict
; แแแกแแฆแแแแ, แแแแแแแแ แแแแแขแแแแแฃแแ แแฅแแแแ.
- แฉแแแ แแแแแแแแแ แงแแแแ แแแแแขแก แแแแแแแแ แ แแแ แแฅแขแแ แแแแแ, แแกแ แ แแ
แแฎแแ แแแแแ แแแแแงแแแแ แแแแฃแแแแขแแชแแแก แจแแฅแแแ:
- แแแ แแแ แ แแแจแ, แกแแชแแแจแ, แกแแแแแแกแขแ แ แคแแแแแแจแ, แฉแแแ แแแฌแแ แแแแแ docfx แแ แแแฅแขแก. แแแแกแแแแแก แแแฃแจแแแ แแ แซแแแแแ root-แแแ
docfx init
แแ แแแขแแ แแฅแขแแฃแแแ แแแแงแแแแ แกแแแจแแแแแแ แแแแฃแแแแขแแชแแแก แซแแ แแแแแ แแแ แแแแขแ แแแ. แแ แแแฅแขแแก แแแแแแแแฃแ แ แแแงแแแแแแก แแแขแแแฃแ แ แแฆแฌแแ แแแฅ .- แแแแคแแแฃแ แแชแแแกแแก แแแแจแแแแแแแแแแ แแแแแแแแแแ แแแขแแแแแแก แแแแแแแแ
..public
- GitLab แแแแฃแแแกแฎแแแแแ แแฆแแแก แกแแฏแแ แ แกแแฅแแฆแแแแแก แจแแแแแแกแก แกแแชแแแแก แซแแ แจแ, แ แแแแ แช แแแแ แแแแแก แฌแงแแ แ. แแแแขแแ แ แแ แแ แแแฅแขแ แแแแแแแกแแแแ แกแแชแแแจแ แฉแแแแแฃแ แกแแฅแแฆแแแแแจแ - แแแแแแขแแ แแแแแกแแแแแ แแแแแแแ แแแฆแแ แแแแแแ.
- แแแแคแแแฃแ แแชแแแกแแก แแแแจแแแแแแแแแแ แแแแแแแแแแ แแแขแแแแแแก แแแแแแแแ
- แแแแแ แแแแแแแขแแแแ แชแแแแแแแแแ GitLab-แจแ.
- แแแแแแขแแ แแแแแแแแ แแแแกแแแแแแก แแแแคแแแฃแ แแชแแแจแ
pages
(แ แแแแ แแแ แแแฃแแ แกแแขแงแแ แกแแแขแแก แแแแแฅแแแงแแแแแก แแแแชแแแแแแกแแแแก GitLab แแแแ แแแแแ):- แกแแ แแแขแ:
nuget install docfx.console -version 2.51.0
- แแแแแแกแขแแแแ แแ docfx; แแแ แกแแ แแแแแแแแฃแแแ แแแแกแแแแแก, แ แแ แฃแแ แฃแแแแแงแแก แแแแแขแแก แแแกแขแแแแชแแแก แแแแแ แกแฌแแ แ..docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json
- แแแแฃแแแแขแแชแแแก แจแแแ แแแแแ
- แแแแแซแแก แแ แขแแคแแฅแขแแแ:
- แกแแ แแแขแ:
pages:
# snip
artifacts:
paths:
- public
แแแ แแแฃแแ แแแแ แแกแแ docfx-แแก แจแแกแแฎแแ
แแแ แ, แแ แแแฅแขแแก แแแงแแแแแแกแแก, แแ แแแแแแฃแกแขแ แแแแฃแแแแขแแชแแแก แแแแแก แฌแงแแ แ, แ แแแแ แช แแแแแฌแงแแแขแแก แคแแแแ. แแแแแแ แ แแแแฃแกแ แแ แแก แแก, แ แแ แแแแฃแแแแขแแชแแ แแฅแแแแแ แกแแขแแกแขแ แแ แแแฅแขแแแแกแแแแกแแช. แแฃ แแก แแ แแ แแก แกแแญแแ แ, แจแแแแซแแแแ แแแแงแแแแ แแก แแแแจแแแแแแแ แแแแแซแแ metadata.src
:
{
"metadata": [
{
"src": [
{
"src": "../",
"files": [
"**/*.csproj"
],
"exclude":[
"*.tests*/**"
]
}
],
// --- snip ---
},
// --- snip ---
],
// --- snip ---
}
metadata.src.src: "../"
- แแแแแแแแ แจแแแแ แแแแ แแ แแ แกแแคแแฎแฃแ แแ แแแฆแแ แแแแแแแ แdocfx.json
, แแแแขแแ แจแแแแแแแแจแ, แแแ แแฅแขแแ แแแจแ แฎแแก แซแแแแ แแ แแฃแจแแแแก.metadata.src.files: ["**/*.csproj"]
- แแแแแแแฃแ แ แแแแฃแจแ, แฉแแแ แแแแ แแแแแ แงแแแแ C # แแ แแแฅแขแก แงแแแแ แแแ แแฅแขแแ แแแแแ.metadata.src.exclude: ["*.tests*/**"]
- แแแแแแแฃแ แ แแแแฃแจแ, แแแแแ แแชแฎแแ แงแแแแแคแแ แ แกแแฅแแฆแแแแแแแแแแ.tests
แกแแแแฃแ แจแ
แฅแแแขแแขแแแ
แแกแแแ แแแ แขแแแ แแแแคแแแฃแ แแชแแแก แจแแฅแแแ แจแแกแแซแแแแแแแ แแฎแแแแ แแแฎแแแแ แกแแแแจแ แแ แ แแแแแแแแ แคแแแฏแแ แงแแแแจแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแแชแแแ แจแแแแแฌแแแ แแแแแก แแจแแแแแ แแ แขแแกแขแแแแก แฉแแแแ แแแ, แแฎแแแ แแแแแขแแก แแจแแแแแ, แแแแฃแแแแขแแชแแแก แแแแแฎแแแแ แแ แแแแแ แแแแแแแ แแแแฎแแ แแ. แกแแแแแ แแ แแแจแแแแ แแ แแแฅแขแแก 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-แจแ CI/CD แแแ แแแแขแ แแแจแ Gtntral แแแแกแแแแแแแแก แแแแแจแ:
แแ แจแแแฅแแแแ แแแฏแ แแแแขแคแแ แแแแ แแแแฃแแแแขแแชแแแก แแแฃแแแ
![ะัะธะผะตั ั Shields.io](https://img.shields.io/badge/custom-badge-blue)
Azure DevOps Artifacts แแกแแแ แกแแจแฃแแแแแแก แแแซแแแแ แจแแฅแแแแ แกแแแแแ แแ แแแจแแแแ แแแแแขแแแแกแแแแก แฃแแฎแแแกแ แแแ แกแแแ. แแแแกแแแแแก, Azure DevOps แกแแแขแแก แฌแงแแ แแจแ, แแฅแแแ แฃแแแ แแแแญแแ แแ แจแแ แฉแแฃแแ แแแแแขแแกแแแแก แแแฏแแก แจแแฅแแแแก แแ แแแแแแแแ แแ แแแ แแแ แแแแก แแแ แแแ แแแ:
แกแแแแแแแแก แแแแแขแแแ
แฎแแแก แฃแกแแแแก แกแแแ แแ แแแแคแแแฃแ แแชแแแก แคแ แแแแแแขแแแก
แแแแคแแแฃแ แแชแแแก แฌแแ แแกแแก แแ แแแแฃแแแแขแแชแแแก แซแแแแแกแแก, แฌแแแแฌแงแแ YAML-แแก แกแแแแขแแ แแกแ แแแแกแแแแก - แคแ แแแแแแขแแแแก แฎแแแแฎแแ แแแแแงแแแแแแก.
แ แแแแ แช แแแแแแแแแก แแแ แแแแขแ แแแแแแ แฎแแแแแ, แงแแแแ แแแแแแแก แกแญแแ แแแแ แขแแแ windows
runner-แแ แแ แแแแฅแแแแแแแ, แ แแแแกแแช แจแแ แฌแงแแแก แแแแฎแแแแ แแแแแแแแแ แแแกแขแแ แก/แจแแฅแแแแแก (แแแ แแ แแแแฃแแแแขแแชแแแกแ). แแแแแ แแก แแแแแแแขแแ แคแ แแแแแแขแก, แ แแแแแกแแช แฎแแแแฎแแ แแแแแแแงแแแแแ:
.common_tags: &common_tags
tags:
- windows
.common_only: &common_only
only:
- merge_requests
- master
แแฎแแ แฉแแแ แจแแแแแซแแแ แฉแแแกแแแ แแแ แ แแแแแชแฎแแแแแฃแแ แคแ แแแแแแขแ แแแแแแแแแก แแฆแฌแแ แแจแ:
build job:
<<: *common_tags
<<: *common_only
แคแ แแแแแแขแแแแก แกแแฎแแแแแ แฃแแแ แแฌแงแแแแแแก แฌแแ แขแแแแ, แ แแแ แแ แแงแแก แแแแแแ แขแแแฃแแ, แ แแแแ แช แแแแแแแแ.
แแแแแขแแก แแแ แกแแแ แแแ
แแแแแขแแก แจแแฅแแแแกแแก แจแแแแแแแแแ แแแแฌแแแแก แแ แซแแแแแแก แฎแแแแก แแแแแแ แแแแแแแก, แฎแแแ แแแแ แแ แงแแคแแแก แจแแแแฎแแแแแจแ แแ แแแฅแขแแก แคแแแแแแก; แ แแแแกแแช แแก แแแฃแแแแก แแแ แกแแแก แแแแแซแก, แแก แแฆแแแก แแแก แแแแจแแแแแแแแก, แ แแแแ แช แจแแแฃแจแแแแแฃแแ แแแแแขแแก แแแ แกแแแก. แแ แแแแแ, แ แแ แแฎแแแ แแแ แกแแแ แแแแแขแแก แแกแแแแแแ, แแฅแแแ แฃแแแ แแแแแแฎแแแ แแแ แแ แแแฅแขแแก แคแแแแจแ แแ แแแแแกแชแแ แแแ แแ แซแแแแแแก แฎแแแแก แแ แแฃแแแแขแแ.
แแแแแ แแแแแแแขแแ แแแแแ แแ แแ Wishlist - แแแ แกแแแก แแชแแ แ แแ แ แ แแชแฎแแ แแงแแก แแแแแขแแก แแแแแแก แฌแแแ แแ แแแ แแฆแ แแ แแแแแแแขแแ แฌแแแแกแฌแแ แ แแแแแจแแแแแก แแแ แกแแแแ. แ แ แแฅแแ แฃแแแ, แแฅแแแ แจแแแแซแแแแ แแแแแแขแแ แแก แแแแแชแแแแแ แแ แแแฅแขแแก แคแแแแจแ แแ แจแแแแแฌแแแ แงแแแแแ แฌแแ แแแแแแก แฌแแ - แแแแ แแ แแฅแแแ แแกแแแ แจแแแแซแแแแ แแแแก แแแแแแแแ แแแแกแแแแแจแ, แจแแแแ แแแแ แแแแแขแแก แแแ แกแแ แแแแขแแฅแกแขแแแแ แแ แแแแแแขแแแแ แแแ แแ แซแแแแแแก แฎแแแแก แแ แแฃแแแแขแจแ.
แแแแแ แจแแแแแแฎแแแแ, แ แแ แแฃ commit แจแแขแงแแแแแแแ แจแแแชแแแก แแกแแแแก แฎแแแก 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
แแ แแแแชแ แแ แแแแแแแ แแแ แแแแแขแแแแก แแฌแงแแแแก commit แจแแขแงแแแแแแแแจแ แแแชแแแฃแแ แกแขแ แแฅแแแแก แแแแแแกแฌแ แแแแ.
แกแแแ แแ แฏแแแจแ
แแแแฎแแแแแแ แแแฎแแแแ แ แกแแแแแก แแ แกแแแแแก แแแฎแแ แฏแแแก แจแแแแแ แแแแคแแแฃแ แแชแแแก แแแฌแแ แแแ, แแแแแแแแ แแ powershell-แจแ แแแแแ แแแแกแ แแ, แจแแกแแซแแแ, แ แแแแแแแแ แฌแแ แฃแแแขแแแแแ แแแจแแแแแก แจแแแแแ, แแแแแฆแแ แแแ แขแแแ แแแแคแแแฃแ แแชแแ แ แฃแขแแแฃแแ แแแแชแแแแแแก แแแขแแแแขแแแแชแแแกแแแแก.
แ แ แแฅแแ แฃแแแ, GitLab CI / CD แแแแ แแ แฃแคแ แ แแ แชแแแ แแ แแ แแแแแแฎแ แแแแ, แแแแ แ แแก แจแแแซแแแแ แฉแแแแแก แแ แกแแฎแแแแซแฆแแแแแแแก แฌแแแแแฎแแแก แจแแแแแ -
แแฅแแแแ แแแแแแแชแแแแแก แแแขแแแแขแฃแ แแ แแฆแแแฉแแแ, แจแแฅแแแ, แขแแกแขแแ แแแ, แแแแแ แแแ แแ แแแแแขแแ แแแแ
แแฎแแ แแแแแแแแ แแแแกแแแแแแก แแแแคแแแฃแ แแชแแ Azure-แจแ แแแแแแแชแแแแแก แแแแแแแแแแกแแแแก, Pulumi-แแก แแแแแงแแแแแแ แแ แกแแแแแแ แแแ แแแแก แแแขแแแแขแฃแ แแ แแแแกแแแฆแแ แแกแแแแก, แ แแช แแแแแแแแ แกแขแแขแแแจแ แแฅแแแแ แแแแฎแแแฃแแ.
แฌแงแแ แ: www.habr.com