Logo GitLab

GitLab CI: Gerando artefatos e criando imagem Docker

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.