AWS Codebuild“名为 '3.1' 的 dotnet 的未知运行时版本。此构建映像具有以下版本:2.2”

Posted

技术标签:

【中文标题】AWS Codebuild“名为 \'3.1\' 的 dotnet 的未知运行时版本。此构建映像具有以下版本:2.2”【英文标题】:AWS Codebuild "Unknown runtime version named '3.1' of dotnet. This build image has the following versions: 2.2"AWS Codebuild“名为 '3.1' 的 dotnet 的未知运行时版本。此构建映像具有以下版本:2.2” 【发布时间】:2021-08-09 09:35:34 【问题描述】:

我正在使用 codepipeline 行来构建和部署 - 从 github 拉取并部署到 fargate 容器 - 在 codebuild 中构建 dotnet 应用程序时,我遇到了这个错误。好难过。有谁知道为什么它认为我的应用是 dotnet 2.2?

这是一个全新的管道


[Container] 2021/05/20 05:54:31 Waiting for agent ping
[Container] 2021/05/20 05:54:33 Waiting for DOWNLOAD_SOURCE
[Container] 2021/05/20 05:54:34 Phase is DOWNLOAD_SOURCE
[Container] 2021/05/20 05:54:34 CODEBUILD_SRC_DIR=/codebuild/output/src177986340/src
[Container] 2021/05/20 05:54:34 YAML location is /codebuild/output/src177986340/src/config/buildspec.yml
[Container] 2021/05/20 05:54:34 No commands found for phase name: install
[Container] 2021/05/20 05:54:34 Processing environment variables
[Container] 2021/05/20 05:54:35 Selecting 'dotnet' runtime version '3.1' based on manual selections...
[Container] 2021/05/20 05:54:35 Phase complete: DOWNLOAD_SOURCE State: FAILED
[Container] 2021/05/20 05:54:35 Phase context status code: YAML_FILE_ERROR Message: Unknown runtime version named '3.1' of dotnet. This build image has the following versions: 2.2

我的 dockerfile 指向 3.1

FROM mcr.microsoft.com/dotnet/sdk:5.0 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 mcr.microsoft.com/dotnet/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet",  "user-bff.dll"]

我的构建规范指向 3.1

version: 0.2

phases:
  install:
    runtime-versions:
      dotnet: 3.1
  pre_build:
    commands:
      - cd code/
      - echo Logging in to Amazon ECR
      - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
      - IMAGE_URI="$REPOSITORY_URI:latest"
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build --tag "$IMAGE_URI"
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:latest

  post_build:
    commands:
      - echo Build completed on `date`
      - echo Push the latest Docker Image...
      - docker push "$IMAGE_URI"
      - printf '["name":"App","imageUri":"%s"]' "$IMAGE_URI" > images.json
artifacts:
  files: images.json

而我的 dotnet core 应用绝对是 3.1

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    <RootNamespace>user_bff</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="AWSSDK.SimpleSystemsManagement" Version="3.3.106" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="mysql.Data" Version="8.0.17" />
    <PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.17" />
    <PackageReference Include="Amazon.Extensions.Configuration.SystemsManager" Version="1.2.0" />
  </ItemGroup>
  
</Project>

【问题讨论】:

你的 CB 镜像版本是多少? Amazon Linux 2 x86_64 standard:3.0? aws/codebuild/amazonlinux2-x86_64-standard:1.0,我应该使用 3.0 吗? 解决了!移动到 3.0 修复了它。谢谢:) 很高兴听到它奏效了。如果您不介意,我可以提供包含更多详细信息和链接的答案? @Marcin 听起来不错! 【参考方案1】:

基于 cmets。

问题是由于使用了旧的运行时映像版本Amazon Linux 2 x86_64 standard:1.0 造成的,该版本不支持 dotnet 3.1。如AWS docs 中所列,仅以下版本支持 dotnet 3.1:

亚马逊 Linux 2 x86_64 标准:3.0

Amazon Linux 2 AArch64 标准:2.0

Ubuntu 标准:4.0

Ubuntu 标准:5.0

因此,解决方案是将镜像版本升级到Amazon Linux 2 x86_64 standard:3.0

【讨论】:

【参考方案2】:

从 Amazon Linux 2 x86_64 standard:1.0 迁移到 Amazon Linux 2 x86_64 standard:3.0 解决了这个问题!

【讨论】:

以上是关于AWS Codebuild“名为 '3.1' 的 dotnet 的未知运行时版本。此构建映像具有以下版本:2.2”的主要内容,如果未能解决你的问题,请参考以下文章

AWS Batch 与 AWS CodeBuild

无法将更改从 AWS CodeBuild 推送到 AWS CodeCommit

AWS CodePipeline 不遵守 CodeBuild 设置

使用 AWS CDK 创建用于构建 Docker 映像的 CodeBuild 项目

AWS codeBuild 不运行 .ebextension 配置

如何强制 CodeBuild (AWS) 失败?