Gitlab CI Docker 和 Aspnetcore 运行时版本问题



我有一个aspnet核心mvc项目放在GitLab下,它使用DockerFile来容器化docker镜像。现在我想通过构建和测试 2 个阶段来利用 GitLab CI 功能。

我的计划是构建是用于docker build命令;test是docker pull and run命令。我已经完成了大部分 .gitlab.ci.yml 代码,但我在测试阶段遇到了问题。

看起来 gitlab 共享运行器码头工人映像 dotnet cli 版本低于我的预期版本。这是输出:

It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.App', version '2.2.0' was not found.
- Check application dependencies and target a framework version installed at:
/usr/share/dotnet/
- Installing .NET Core prerequisites might help resolve this problem:
https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
- The .NET Core framework and SDK can be installed from:
https://aka.ms/dotnet-download
- The following versions are installed:
2.1.15 at [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]

这是我的Dockerfile

FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
# override the request to 5000
ENV ASPNETCORE_URLS=http://+:5002 
# override to 5002
EXPOSE 5002 
ENTRYPOINT ["dotnet", "ASPNetApp_2.dll"]

这是我的.gitlab.ci.yml

image: docker:latest
stages:
- build
- test
services:
- docker:dind
variables:
IMAGE_NAME: ${CI_REGISTRY}/${CI_PROJECT_PATH}
build:
only:
- master
- develop
before_script:
- apk update && apk add bash
- chmod +x ./function.sh
- . function.sh
- get_image_tag
- echo $TAG
- docker login registry.gitlab.com -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}
script:
- docker build -t $IMAGE_NAME:$TAG .
- docker push $IMAGE_NAME:$TAG
after_script:
- docker logout ${CI_REGISTRY}
stage: build
tags:
- docker
test:
stage: test
before_script:
- apk update && apk add bash
- apt-get install aspnetcore-runtime-2.2
- chmod +x ./function.sh
- . function.sh
- get_image_tag
- echo $TAG
- docker login registry.gitlab.com -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}
script:
- docker pull microsoft/dotnet:2.2-aspnetcore-runtime
- docker pull $IMAGE_NAME:$TAG
- docker run -p 5002 $IMAGE_NAME:$TAG -it
after_script:
- docker logout ${CI_REGISTRY}
function.sh
#!/bin/bash
function get_image_tag(){
if [ "$CI_COMMIT_REF_SLUG" == "master" ]; then
export TAG="latest";
else
export TAG=$CI_COMMIT_REF_SLUG;
fi
}

我一直在尝试sudo apt-getapt-getapk add,但没有希望,有什么建议吗?

所以我设法让它使用以下配置。

  1. 将图像和服务放入舞台部分。
build:
image: docker:latest
services:
- docker:dind
...
test:
image: docker:latest
services:
- docker:dind
- microsoft/dotnet

通过这样做,GitLab CI 运行器能够获取最新的 Microsoft dotnet 环境,并且能够让 Docker 运行

最新更新