【问题标题】:AWS CLI on windows dockerWindows docker 上的 AWS CLI
【发布时间】:2020-01-07 19:04:01
【问题描述】:

我正在开发 asp.net 应用程序。目前的计划是使用 ECS 在 AWS 中设置 CI 管道。所以基本上我现在创建了 2 个阶段。

场景:

我有一个基于 .NET Framework 4.6.2 的 ASP.NET Web API 应用程序。我需要使用 AWS 代码管道设置容器化 CI/CD 管道。

我最初只关注设置 CI,其中包括自动化源代码构建、单元测试以及将构建作为 docker 上传到 ECR 存储库。这将在下一阶段用于部署到 ECS 中。

目前进展及问题描述:

第 1 阶段:来源 此阶段已使用 GitHub webhook 成功配置。

第 2 阶段:构建 我使用 Microsoft docker ('mcr.microsoft.com/dotnet/framework/sdk:4.7.2') 作为构建环境映像。 这适用于构建和单元测试。

现在我需要构建 docker 映像并推送到 ECR 存储库。我创建了一个存储库并在本地完成了命令。我还在我的应用程序中启用了 docker 支持,所以 docker-compose 也在那里。

我在这里停下来,因为我没有任何继续的想法......

我当前的构建规范文件包含以下内容;

    version: 0.2

env:
  variables:
    PROJECT: aspnetapp
    DOTNET_FRAMEWORK: 4.6.2
phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
      - REPOSITORY_URI=727003307347.dkr.ecr.eu-west-1.amazonaws.com/ecr-repo-axiapp-cloud
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=aspnetapi
  build:
    commands:
      - echo Build started on `date`
      - nuget restore
      - msbuild $env:PROJECT.sln /p:TargetFrameworkVersion=v$env:DOTNET_FRAMEWORK /p:Configuration=Release /p:DeployIisAppPath="Default Web Site" /p:PackageAsSingleFile=false /p:OutDir=C:\codebuild\artifacts\ 
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
artifacts:
  files:
    - '**/*'
  base-directory: C:\codebuild\artifacts\

运行时,aws --version 出现错误。由此,我可以理解我们需要在构建服务器上安装 AWS CLI。为此,我正在创建一个自定义泊坞窗。我得到了一篇文章,并为此关注了同样的文章。

https://aws.amazon.com/blogs/devops/extending-aws-codebuild-with-custom-build-environments-for-the-net-framework/

从文章中,我有以下 DockerFile

    # escape=`

FROM microsoft/dotnet-framework:4.7.2-runtime

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

#Install NuGet CLI
ENV NUGET_VERSION 4.4.1
RUN New-Item -Type Directory $Env:ProgramFiles\NuGet; `
    Invoke-WebRequest -UseBasicParsing https://dist.nuget.org/win-x86-commandline/v$Env:NUGET_VERSION/nuget.exe -OutFile $Env:ProgramFiles\NuGet\nuget.exe

#Install AWS CLI
RUN Invoke-WebRequest -UseBasicParsing https://s3.amazonaws.com/aws-cli/AWSCLI64PY3.msi -OutFile AWSCLI64PY3.msi

# Install VS Test Agent
RUN Invoke-WebRequest -UseBasicParsing https://download.visualstudio.microsoft.com/download/pr/12210068/8a386d27295953ee79281fd1f1832e2d/vs_TestAgent.exe -OutFile vs_TestAgent.exe; `
    Start-Process vs_TestAgent.exe -ArgumentList '--quiet', '--norestart', '--nocache' -NoNewWindow -Wait; `
    Remove-Item -Force vs_TestAgent.exe; `
# Install VS Build Tools
    Invoke-WebRequest -UseBasicParsing https://download.visualstudio.microsoft.com/download/pr/12210059/e64d79b40219aea618ce2fe10ebd5f0d/vs_BuildTools.exe -OutFile vs_BuildTools.exe; `
    # Installer won't detect DOTNET_SKIP_FIRST_TIME_EXPERIENCE if ENV is used, must use setx /M
    setx /M DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1; `
    Start-Process vs_BuildTools.exe -ArgumentList '--add', 'Microsoft.VisualStudio.Workload.MSBuildTools', '--add', 'Microsoft.VisualStudio.Workload.NetCoreBuildTools', '--add', 'Microsoft.VisualStudio.Workload.WebBuildTools;includeRecommended', '--quiet', '--norestart', '--nocache' -NoNewWindow -Wait; `
    Remove-Item -Force vs_buildtools.exe; `
    Remove-Item -Force -Recurse \"${Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\"; `
    Remove-Item -Force -Recurse ${Env:TEMP}\*; `
    Remove-Item -Force -Recurse \"${Env:ProgramData}\Package Cache\"

# Set PATH in one layer to keep image size down.
RUN setx /M PATH $(${Env:PATH} `
    + \";${Env:ProgramFiles}\NuGet\" `
    + \";${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow\" `
    + \";${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\")

# Install Targeting Packs
RUN @('4.0', '4.5.2', '4.6.2', '4.7.2') `
    | %{ `
        Invoke-WebRequest -UseBasicParsing https://dotnetbinaries.blob.core.windows.net/referenceassemblies/v${_}.zip -OutFile referenceassemblies.zip; `
        Expand-Archive -Force referenceassemblies.zip -DestinationPath \"${Env:ProgramFiles(x86)}\Reference Assemblies\Microsoft\Framework\.NETFramework\"; `
        Remove-Item -Force referenceassemblies.zip; `
    }

我尝试使用该命令下载 AWS CLI。

  1. 如果我的理解正确,请帮我更新 Dockerfile 以安装 AWS CLI。
  2. 那么我是否需要在构建服务器中也安装 docker for windows?

【问题讨论】:

    标签: amazon-web-services docker asp.net-web-api aws-cli amazon-ecs


    【解决方案1】:

    我已经做到了。请找到更新后的 docker 文件

        # escape=`
    
    FROM microsoft/dotnet-framework:4.7.2-runtime
    
    SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
    #Install NuGet CLI
    ENV NUGET_VERSION 4.4.1
    RUN New-Item -Type Directory $Env:ProgramFiles\NuGet; `
        Invoke-WebRequest -UseBasicParsing https://dist.nuget.org/win-x86-commandline/v$Env:NUGET_VERSION/nuget.exe -OutFile $Env:ProgramFiles\NuGet\nuget.exe
    
    #Install AWS CLI
    RUN Invoke-WebRequest -UseBasicParsing https://s3.amazonaws.com/aws-cli/AWSCLI64PY3.msi -OutFile AWSCLI64PY3.msi; `
        Start-Process "msiexec.exe"  -ArgumentList '/i', 'AWSCLI64PY3.msi', '/qn', '/norestart' -Wait -NoNewWindow; `
        Remove-Item -Force AWSCLI64PY3.msi; `
    
    
    # Install VS Test Agent
        Invoke-WebRequest -UseBasicParsing https://download.visualstudio.microsoft.com/download/pr/12210068/8a386d27295953ee79281fd1f1832e2d/vs_TestAgent.exe -OutFile vs_TestAgent.exe; `
        Start-Process vs_TestAgent.exe -ArgumentList '--quiet', '--norestart', '--nocache' -NoNewWindow -Wait; `
        Remove-Item -Force vs_TestAgent.exe; ` 
    
    # Install VS Build Tools
        Invoke-WebRequest -UseBasicParsing https://download.visualstudio.microsoft.com/download/pr/12210059/e64d79b40219aea618ce2fe10ebd5f0d/vs_BuildTools.exe -OutFile vs_BuildTools.exe; `
        # Installer won't detect DOTNET_SKIP_FIRST_TIME_EXPERIENCE if ENV is used, must use setx /M
        setx /M DOTNET_SKIP_FIRST_TIME_EXPERIENCE 1; `
        Start-Process vs_BuildTools.exe -ArgumentList '--add', 'Microsoft.VisualStudio.Workload.MSBuildTools', '--add', 'Microsoft.VisualStudio.Workload.NetCoreBuildTools', '--add', 'Microsoft.VisualStudio.Workload.WebBuildTools;includeRecommended', '--quiet', '--norestart', '--nocache' -NoNewWindow -Wait; `
        Remove-Item -Force vs_buildtools.exe; `
        Remove-Item -Force -Recurse \"${Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\"; `
        Remove-Item -Force -Recurse ${Env:TEMP}\*; `
        Remove-Item -Force -Recurse \"${Env:ProgramData}\Package Cache\"
    
    # Set PATH in one layer to keep image size down.
    RUN setx /M PATH $(${Env:PATH} `
        + \";${Env:ProgramFiles}\NuGet\" `
        + \";${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow\" `
        + \";${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\")
    
    # Install Targeting Packs
    RUN @('4.0', '4.5.2', '4.6.2', '4.7.2') `
        | %{ `
            Invoke-WebRequest -UseBasicParsing https://dotnetbinaries.blob.core.windows.net/referenceassemblies/v${_}.zip -OutFile referenceassemblies.zip; `
            Expand-Archive -Force referenceassemblies.zip -DestinationPath \"${Env:ProgramFiles(x86)}\Reference Assemblies\Microsoft\Framework\.NETFramework\"; `
            Remove-Item -Force referenceassemblies.zip; `
        }
    

    【讨论】:

      猜你喜欢
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 2020-10-06
      相关资源
      最近更新 更多