α¬ααααααΎααααΈααα½αααΆαααααΆααααααΆαααααααααα’αΆααααααΆααααααααααααα’ααααα αααααααΆα ααααΆααααααααΌαααΆααααα½α
αααα ααααΆα’αααα’αα·ααααααααΆααα’αααααααΆαααααααααααα α·ααα αΉααααΆαα αα ααΆαααα½ααα α ααα»α ααααααΆαααΆααααΆααα’αααΈααααΆααααααΆαααααααααα’αΆαααΆαα½αααΉαααααΆαααΆα ααΆαααααααααααααΌα αααααααα αααα αααα»α nuget ... α αΎαααΆααααΆαααααααΆαααΆαα±αααααα»ααααααα’ααααααααα αααα»αβααΆαβαααβα αβαααααΆααβααΆαβαααααβααΆ αααα»αβααα½αβααΆαβααααααβαααβαααα»αβααααααβαα½αβααααβαααα»αα
α’ααααααααααΉαααααΆαα’αααα’αααΈααΆααααα αααΆααΌαααααΆαααααΆααα½ααααα αΌα αα·αααΆαα ααα αΆαααΆαααααααααΆαααααααΆαααααααααααααΆαααααααΆαα .Net Core αα αααα»α GitLab ααΆαααααα»αααα―αααΆααα ααΆααααααα GitLab αα·αααΆααααα»ααααα αααααααΆααααααΎααα ααΆα αααΈα―ααααα αααα»α Azure DevOps α
VS Code ααααΌαααΆαααααΎααΆααα·ααΆααΆαα’αα·ααααααααΆαα½αααααααααααα
ααΆαααααΆααααααα
αααΈααΈ - ααΎααΆαα αααα’αααααΎααααα»α α αΎαα’αααΈαααΆαααααΆααααΎαααΆαααΈααααααα αΎαα¬αα ?
ααΎα’αααΈαα
ααΆ CI/CD α αΎαα ααα»α’αααΈααΆαααΆα’αααααααΌαααΆαααΆ - α’αααα’αΆα
google ααΆααΆααααΆαααΆααααα½αα αααααααα―αααΆαααααααααααΈααΈααΆαααααααα
ααΆααααααααααααααα
αααα»α GitLab
- α’αααα’αα·ααααααααααΎααΆαααααααααΆα α·ααααα ααΆααααααΆαα αααααΎαααααΎαααα αΌαααααΆααΆααααααα ααααα α¬ααΆααααααααΆααααααααα ααΆααααΆαα α¬αααα ααααΆα αΆααααααΎαααααααααα αΌαααααα,
- αα·α αα ααΆαααΆααα’ααααααΌαααΆαααααΎαααΎαααΈααΆαααααααα ααΆαααααααα αααααααααααα’αα»ααααΆαα±αααα½αααΆααααΌαααΆαααΆααα±ααααααΎαααΆααααα»αααα·αααααααΆααααααα±αα
- ααΆααα·α αα ααααΌαααΆααααα αααΆαααααΆααααΆααααααα½ααα
- ααααΆααααΆαααααΌαααΆαααααα·ααααα·ααΆααα - i.e. αααΆαααΆα‘αα ααΆαααΆαααΆααα’ααααααααΆααααΆααααααααΌαααΆααααα αα
- ααααα·αααΎααααΆααααΆααααΆααα (α§. αααΆαα αα ααΆαααα·α αα ααΆααα½αααααααΆααααΆααααΆααα) ααααααααα αΌααααααααΉαααα (ααααΎβααβαα αΌα),
- ααααα·αααΎααααΆααααΆαααΆααα’ααααααΌαααΆααααα ααααααααααα ααααααααα αΌααααααααααΌαααΆαα αΆαααα»αααΆααααααα
ααΌα αααα ααΎαααΆαα
- ααααα - αααα»ααααα·α αα ααΆααααααΆααααα αααΆααααΆααααΆααααα’αααα’αΆα αααααΎα ααΆααααα ααΌααααα αα ααΆαααααααΆαααΆαααααΆαααΆαααααΆααααα αααα ααααΆαααααααααα
- ααααΆααααΆα (ααΆα) - α’αααααΆαααααααααα αΌαααααα ααΆαααΆααα·α αα 1+
- ααΆααα·α αα (ααΆαβααΆα) ααΊααΆα―αααΆααααΆαααΆααα αααα»ααααααα ααΆααΆαααααααΈα (ααΆαααΆα) ααααααααααααΆαααΎαααααΎαααΆα ααΆαααααααααααΆααααΆαααααα»ααα/ααααΆαααααααΆααααααα»αα»ααΆα αα·αα αααΎααααα
ααΌα ααααα αΎα ααΆααα·α αα αα ααααααα α CI/CD α α»αααααΎααααΈαααααΎααααα»ααααα·α αα ααΆααααα’αα»αααααααααααΆαα αΆαααΆα αααΆααα’αααααααΆααααΆααααΆα ααΆααααα αα·αααααα»αααααΌα αα·αααααα»αα»ααΆαα
αα»ααααα αΆααααααΎαα α ααα»α’αααΈ?
- α ααα»α’αααΈ Gitlab?
αααααΆααααα ααααααααΆααααΆαααΆααΆαα αΆαααΆα αααΎααααΈαααααΎαααααΆααα―ααααααααΆααααααααααααα α·ααα αΉα αα½αααααααΌαααΆαααααα ααΎ GitHub α αΎααααα»αααΆαααΆαααααααα ααααΆααααΆαααααΆααα ααΆα₯ααα·ααααα ααα»αααααα αΌαααααααααααα ααΆαα·ααααααΆα ααα»αααααααααααΆαααααααΆαααααα»ααααα»αααΆαααααΆααααΈαα GitHub αααααα
- α ααα»α’αααΈααΆαααΆαα·α Azure DevOps Pipelines?
αααααΆααααα ααΈαααααΆααααααααΊααα - α ααααααΉααααααααΆααααΆααααααααΆαα·αααααΌαααΆαααΆαααΆαααΌααααΈααα ααΆααα½ααααα αΌαααΆαα½αα’ααααααααααααΆ git ααΆααααα - αααααΆαα α»α ααΈαααΈαα ααΆαααΆαα αΌααα SSH ααΎααααΈααααΎααΆαααααααααΆα α·ααααα ααΆααααααΆαα - ααααα αααααααααΌαααΆαααα‘αΎααααΆαααΆααααα½α αααααΈααΆαα·ααααααααΈααααΌαααααα
ααΈααΆααα αΆααααααΎαα α’αααΈαααα’αααααΆα αα·αα’αααΈαααα’αααα ααααΆα
ααΎαβααΆα:
- ααααΆαααα αααα»α GitLab α
ααΎαα ααααΆαα
- ααΆααα½αααααα»αααααΆαααααααααααααααα· αα·αααΆαααααΎααααααααααΆααααααΎαααα αΌαααααΆααΈαα½αα,
- ααΆααααΆααααα αααααααΆααααααΎαααα αΌαααααΆααΈαα½αα αα·αααΆααααα»ααα αα αααααααΆααΆααααααΆααααΆααααΆαααα½ααα αααα»αααΆαααααααααΆ
- ααΆαααααΎαααα αααααααΆααααααΎααα ααα·ααααααΆαα―ααααα αααα»α Azure DevOps,
- ααΆααααααΌααααα»αα―αααΆα αα·αααΆαααααα»αααααααΆααα αααα»αααααα GitLab,
- ααααΆααααααΆ !11
αααααΌαααΆααααααΆααα·αααααΆααΆααααααααααΈααΆαααααααΆααααΎααααΌαααααααΆααααααα
- ααααΆααααΆαααΈ 1 - ααΆααα½αααααα»αααααΆα
- ααΎααααααΌαααΌα ααααα»αααα―αααΆαααααααααΆααααα»αα»ααΆα
- ααααΆααααΆαααΈ 2 - ααΆαααααΎααααα
- ααΎαααα½αααΆαααααα»αα»ααΆαααΈααααΆααααΆαααΆαααα ααααΎαααΆαααΆααααα αααααΌααα·ααααααααααααααααααΌα
- ααααΆααααΆαααΈ 3 - ααΆααααααΎ
- αα·α αα ααΆαααΈ 1 - αααααΎααααα αα nuget α αΎαααααΎααΆαα Azure DevOps
- αα·α αα ααΆαααΈ 2 - ααΎααααααΌαααα αααααααΈ xmldoc αα αααα»αααΌαααααα α αΎααααααααΆαααΆαα αααα»α GitLab Pages
αααα αΆααααααΎα!
ααΆααααααΌαααΆαααααααα ααΆαααααααα
αααα»ααααα αααααΈ
-
αααααΎαααααΈαα αααα»α
Microsoft Azure -
αα
Azure DevOps -
ααΎααααααΎαααααααααααΈαα½α
- ααααα - ααΆαα½αα
- ααΆαααΎαααΎα - ααΆαα½αα
-
αα αααα’αααα α»α ααΎαααΌαα»ααααααΎα ααααααααΉαααααΌαααΆααααααΎα α αΎαα’αααααΉαααααΌαααΆααααααΌααααααα ααΆαααααααααααααΆα αα ααΎαααααααα α’αααα’αΆα αα·ααα»αααΆαααααα·αα αΆαααΆα ααααα αΌααα ααΆααααΆαααααααααααα (αααααΆαααααααααα»ααααααΈαα ααΆαααααα -> αα·αααααΆαααΌαα -> αααα»αααααΆαααα Azure DevOps)
-
α αΌααα ααΆαα Attrifacts α α»α Create feed
- αααα αΌααααααααααα
- ααααΎαααΎαααΆαααΎαααΎα
- αααααΈα αα½ααααα
αΌααααα
ααααΈαααααααΆααΆαααααΌαα
ααΌα
ααααβαααααβαα·αβααααβααααΆαβαα
βααΆβααααΌαβαα»αααααα’αα
-
α α»α Connect to feed ααααΎαααΎα Visual Studio α αααααααααααΈαααα»αααα‘αΎααααΆαααΈα
-
α αΌααα ααΆααααΆααααααααααΈ ααααΎαααΎα Personal Access Token
-
αααααΎααα·αα·ααααααααΆα αΌαααααΎααααΈα
- ααααα - ααααΆα
- α’αααααΆα - αα αα α»αααααα
- ααΆααα»ααααΆαα’αα·ααααΆ 1 ααααΆαα
- αα·ααΆαααΆα - ααΆαααα
ααα
αα/α’αΆα αα·αααααα
-
α αααααα·αα·ααααααααΆαααααΆααααααΎα - αααααΆααααΈαααα’α½α αααΌαα»αααααΌαααΆααα·α αααααααΉααα·αααΆα
-
α αΌααα ααΆααααΆααααααααααΆαααα αααα»α GitLab ααααΎαααΎαααΆαααααα CI/CD
-
αααααΈααααα»αα’ααα ααααααααααΈαα½α
- ααααα - ααΆαα½ααααααααΆαα ααααα (ααΉαααΆααα αααα»ααααααΆααααααααΆ)
- ααααα - αααααΆαααααΆααα αΌαααααΎααΈαααΆααααααΈ 9
- ααααΎαααΎαα’ααααααΆαααα»α
ααααααα ααααΆααααααααΆαα»αα
αααα»ααααα ααααααααααααααααα ααΆαααααααα
ααΆαααααΆαααΎα ααΆαααααααα
ααΆαααααααα CI/CD αα
αααα»α GitLab ααααΎα―αααΆα .gitlab-ci.yml
ααΈα«αααααααΆααα α’αααα’αΆα
αααααααααΌαααααΆααα
α―αααΆαααααα
αααα»αααΆααααααααααΆαα ααα»αααααααα»αααααΈαααααΆαα·αα
αΆαααΆα
αααα
ααΌα
αααα’αααα’αΆα
ααΎαααΎαααΈααααααααααα α―αααΆαααΆαααΆαααααααα
ααΆαααααααααααα»ααααααα YAML
. α―αααΆααααα’α·αα’αααΈαααααα’αΆα
ααααΌαααΆααααα»ααα
ααααα·αααααΌαααααΆαααααααα
ααΆαααααααα αα·ααα
ααααα·αααΈαα½αααααααααΆααα
ααΆααααΌα ααΎααααααααααααααΆαααα
ααΌαααΆα docker αα
αααα»αα―αααΆαααααααα
ααΆαααααααα αααααΆααα·α
αα
ααΉαααααΌαααΆαα’αα»ααααα αααααΆααααΏααααααΎαααααΎα
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?
α’αααΈααααααααΆαααΊα‘αΌααΈαα - ααΆαααααΆαααΎα α’ααααααααΆα (ααα½ααα»αααααΌααααα»αααΆαααααα·ααααα·ααααααΈααα·α
αα
ααΆα αα·ααααααααα 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
ααΎαααα½αααΆααααααααααα·αααΆααα»αααΆααα·ααα ααα»αααααααΆαααΆααααα ααααααααα αΌααααααααααΉαααααΌαα
ααΆαααα‘αΎαααα
αααααΆαααααΆααα·ααααααΆααααΆαααααααααααααΌαααΆααααααΆαααααααΆαααα·α αα ααΆαααΆαα½ααα ααααααααα αΌααααααααΉα αααΆααααααα ααααΌαααΆαααααα·ααααα·ααΆααααααααααΆαααααααααΆα α·αααααααΌαααΆααα»ααα ααααΆααα αααααΆαααααα·ααααααΆα₯αα·ααΆαααααα ααααΆαααΆααΌαα ααΎαααΉααααα αααααααααααΉααααααΆαααα·α αα ααΆαα
αααααα’αΆα
ααααΌαααΆαααααααα
ααΆααααααααααΆααΈαααααααα 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
ααΆααααααΆ ααΆαααΆα nuances αα½αα ααα½ααααααΆαααααΆααααααΎαααΉαααααΎα±ααααΆααααααααΆαααα»αααααΆαααααα·α α
- ααΎαβα
ααβααΆαβααΆαβαααααΎαβα
ααβαα·αβαααβαααααΎαβααααΆααβααα α»αβαα ααΌα
ααααβααΎαβααααααβαα
βααΆαααβαααααΆβααΈαα½αα
-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+%)/
αα ααΈαααααΎαααα½αααΆααααα·αα·ααΈαααααΆαααααααΆααααααΆαααααααααααααα»αα
ααααααααααΆααααα αα αα·αα―αααΆα
αααααααΆαααΆααααΈαααααΌαααΆααααααααααααααΆααααααΆααααΆαα α»ααααααααααααααααα αΌαααααα - α αΆααααΆααααΈααΆααα½αααααα»αααααΆ αα·αααΆαααΆαααααααΆαααααααα»ααα ααΎαα’αΆα α αααααααααΆααα·ααααααααααΎαααΆαα½ααα·αααααα
ααΆααααΌα αα·α αΆαααΆααΆααααααααΆααα ααααααααα ααα
-
ααααα·αααΎαααααααα·αααΆαα―αααΆαααααααα ααΆαααααααα nuet (
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 DevOpsgitlab 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 Pages)α- ααααααΈαα
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 pipelinesα
αααα»αααΆααααααΎαααααΆααααααΆαα½ααααααΆααααααααΆαααα
ααΆααα―αααΆααα
ααΎαααα·ααΆ
![ΠΡΠΈΠΌΠ΅Ρ Ρ Shields.io](https://img.shields.io/badge/custom-badge-blue)
Azure DevOps Artifacts ααα’αα»ααααΆαα±ααα’ααααααααΎαααααΆααααααΆαααααΆαααααα ααααΆαα½αααΉαααααα α»αααααααααα»αα ααΎααααΈααααΎααΌα ααααα αααα»αααααααα ααΎααα ααααα Azure DevOps α’αααααααΌαα α»α ααΎαααααΎαααααΆααααααΆαααααΆαααααα αααααααΆαααααΎαααΎαα αΎαα αααααααααΆαααααΆααα α»ααααααα
ααΆαααααααααΆααααααααα’αΆα
ααΆαααααα·α αααααααααΆαααααααα ααΆααααααααααΌαα
ααααααα»ααααααααΆαααααααα ααΆαααααααα αα·ααααααααα―αααΆα αααα»αααΆααα½ααααααααα·ααααα½αα±ααα αΆααα’αΆαααααααα½ααααα YAML - ααΆαααααΎααααΆαααααααα‘αΎααα·αα
ααΌα
αααα’αααα’αΆα
ααΎαααΎαααΈααΆααααααααΆααα·α
αα
αα½αααααΆααα’ααααΆαααΆαααααΆα windows
αα
α―αααααα·ααΈααα α αΎαααααΌαααΆαααααα
ααααααααααΎαααα
αΌαααααΆααααΌαααΆαααααΎαα
αα/αααααΎα (ααΎααααααα―αααΆα)α α
αΌαααααααααΆαα
ααααααααααΎαααΉαααααΎα‘αΎααα·αα
.common_tags: &common_tags
tags:
- windows
.common_only: &common_only
only:
- merge_requests
- master
α αΎαα₯α‘αΌααααααΎαα’αΆα αααα αΌαααααααααααΆααααααΆαααΈαα»ααα αααα»αααΆααα·αααααΆααΆααα·α αα α
build job:
<<: *common_tags
<<: *common_only
ααααααααααααααΌαααα αΆααααααΎααααα ααα»α ααΎααααΈαα»αα±ααααααααΆαααΆααΆαα·α αα ααΆαα
αααααααα αα
αα ααααααααΎααααα αααα½α α’αααα ααααααα·αα·αααααΎαααΆαααααΌααααααΆααααΆααααααααΆ α αΎααα αααα»αα’ααααααΆααααααα½ααα α―αααΆααααααα; αα ααααααααΆααααΎαααααΆαααααα ααΆαααααααααααααΆααΆαααααααααα ααααααααα»αααααΌαααΆααααααΎαα‘αΎαα ααΆααααααΆααΎααααΈαααααΎααααα ααααΆαα½αααααααααΈα’αααααααΌαααααΎαα αα α»ααααααααΆαααΆαα αααα»αα―αααΆαααααααα¬ααααααΆααααΆααΆα’αΆαα»ααααααααααΆααααΆααααααααΆα
α αΌααααααααααααΈααααΆααααΆαα½αααααααααα - α’αα»ααααΆαα±αααααααΌα ααΈααα αααα»αααααααΆααααΆα αα·αααΆαααα·α αααααααααΎααααα αα α αΎααααααααααααααααΆαα ααααααΆαααΆαα»αα ααΆααΆααα·αααΆαα α’αααα’αΆα αααααααα·ααααααααααα αααα»αα―αααΆααααααα α αΎααα·αα·αααααΎααα»ααααααΆααααααΎααΈαα½αα ααα»ααααα’αααααα’αΆα ααααΎααΆααΆααα αααα»αααααααααα αΌαααααα ααααααααΌααααααααα ααααΈααα·αα α αΎαααααααΆααααΆααΆααααα’αΆαα»ααααααααααΆααααΆααααααααΆα
α
αΌαααΎααααααααααΆααααα·αααΎααΆα 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
αα·αααααααααΆααα½αααααα»αααααΆαααααα
αααααΆαααΉααααΉααα
αααα»αααααααΆαααααααα’αααααααααΆααααααα±αααα
αααα»αααΆααααααΆα
ααα»α
αααααΆααααΈα αααΆαααααααα ααααααααααα α¬αα½ααααααααα»αααΆααααααααΆαααααα ααααΆααααα α»ααα αααα»α powershell αααα»αααααα α αΎααααα ααααΆααΆαααΎαααααΎαααΆααα·αααααααααΈαααΈαα ααΎαααα½αααΆαααΆαααααααα ααΆααααααααααΆαααααα½ααααααΆααααααααααααααα·αααααα·α αα ααΆααααααΆααα
ααΆααΆααα·αααΆαα GitLab CI / CD ααΆαααααααααΌααααΌααΆα αα·αααΆαααααααα
αααα»αααΆαααΆα αΆααααΌα
ααΆαααααΆααααΈααΆαα’αΆαααΆαααααΆαααα -
ααααΎα αααααΎα ααΆααααα ααααΎααααΆαα αα·ααααα½ααα·αα·ααααααααα·ααΈααααα’ααααααααααααααααααα·
α₯α‘αΌαααααααααΆαααΊααΎααααΈααααααα ααΆααααααααααααααααααΆααααΆαααααααΆααααααα·ααΈαα Azure αααααααΎ Pulumi αα·ααααααααα·ααΆααΆαααααα αααααααααααααααα· αααααΉαααααΌαααΆααααααααααααα αααα»αα’ααααααααααΆααα
ααααα: www.habr.com