O GitLab CI é uma super ferramenta para integração contínua e entrega contínua que está disponível no mercado com uma cota mensal de uso gratuito bem satisfatório. Além disso, ao criar um repositório no mesmo pode utilizar o registro de container de próprio GitLab que permite que o mesmo seja privado diferentemente do DockerHub que nos permite a inserção de apenas um container privado.
image: mcr.microsoft.com/dotnet/sdk:latest
variables:
OBJECTS_DIRECTORY: 'obj'
NUGET_PACKAGES_DIRECTORY: '.nuget'
SOURCE_CODE_PATH: '*/*/'
cache:
key: "$CI_JOB_STAGE-$CI_COMMIT_REF_SLUG"
paths:
- '$SOURCE_CODE_PATH$OBJECTS_DIRECTORY/project.assets.json'
- '$SOURCE_CODE_PATH$OBJECTS_DIRECTORY/*.csproj.nuget.*'
- '$NUGET_PACKAGES_DIRECTORY'
policy: pull-push
stages:
- build
- test
- deploy
build:
script:
- 'dotnet publish -c Release --no-restore'
artifacts:
paths:
- bin/
before_script:
- 'dotnet restore --packages $NUGET_PACKAGES_DIRECTORY'
tests:
stage: test
script:
- 'dotnet test --no-restore'
deploy:
stage: build
image: docker:19.03.12
needs:
- build
services:
- docker:19.03.12-dind
script:
- 'docker login registry.gitlab.com -u $USER -p $PASS'
- 'docker build -t registry.gitlab.com/AUTOR REPOSITORIO/REPOSITORIO .'
- 'docker push registry.gitlab.com/AUTOR REPOSITORIO/REPOSITORIO'
Os comandos corretos para docker build e docker push podem ser copiados da pagina de Registro de Container do repositório no próprio GitLab;
Outra observação importante é que diferente do que eu fiz no meu exemplo, ao invés de passar a sua senha no docker login
, é recomendado gerar um token de sua conta e realizar o login através do mesmo.
Feito isso, você já tem o gitlab-ci.yaml para seu projeto em .NET prontinho para rodar.