【发布时间】:2020-12-24 03:59:26
【问题描述】:
我正在开发一个 gitlab CI/CD 项目,以将 asp.net core 应用程序构建到 docker 中。
目前我有两种可能的实现方式。第一个在Dockerfile 中有完整的逻辑,但我无法以这种方式可视化 Gitlab 中的阶段(构建、测试、发布)。所以我想把主要逻辑移到gitlab-ci.yml文件中。但现在困扰我的是我必须在 2 个地方(sdk:3.1,aspnet:3.1.1-alpine3.10)管理图像docker dotnet versions。通过build-arg 提供版本是个好主意还是有更优雅的解决方案?
.gitlab-ci.yml
stages:
- build
- test
- docker
build:
stage: build
image: mcr.microsoft.com/dotnet/core/sdk:3.1
only:
- master
script:
- cd src
- dotnet restore --interactive
- dotnet build --configuration Release
- dotnet publish --configuration Release --output ../publish/
artifacts:
paths:
- ./publish/*.*
expire_in: 1 week
tags:
- docker
test:
stage: test
image: mcr.microsoft.com/dotnet/core/sdk:3.1
only:
- master
script:
- cd src
- dotnet test --test-adapter-path:. --logger:"junit;LogFilePath=../../MyProject.xml"
artifacts:
paths:
- ./MyProject.xml
reports:
junit: ./MyProject.xml
tags:
- docker
docker:
stage: docker
image: docker:stable
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
only:
- master
script:
- docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" $CI_REGISTRY
- docker build --tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" --tag "$CI_REGISTRY_IMAGE:latest" --build-arg EXECUTABLE=Test.WebApi.dll .
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
- docker push "$CI_REGISTRY_IMAGE:latest"
tags:
- docker
Dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1.1-alpine3.10
ARG EXECUTABLE
WORKDIR /app
COPY /publish .
ENV ASPNETCORE_URLS "http://*:5000"
ENV ASPNETCORE_ENVIRONMENT "Staging"
CMD ["dotnet", "$EXECUTABLE"]
【问题讨论】:
标签: docker asp.net-core gitlab gitlab-ci