如何使用docker在Jenkins中构建.net核心应用程序并将其推送到ECR?

时间:2019-09-27 04:53:46

标签: docker jenkins .net-core amazon-ecs

嗨,我正在学习为我的.net核心应用程序使用Jenkins和AWS构建管道。我在https://github.com/niranjan2020/JenkinsPipeLine创建了示例应用程序 我在本地下载Jenkins,并在端口8080上运行。我创建了用于创建Jenkins管道的Pipeline模板。

pipeline {
    agent any

    options {
        skipDefaultCheckout true
    }

    stages {
        stage('checkout') {
            steps {
                checkout scm
            }
        }

        stage('First Stage') {
            steps {
                echo "Yay! First stage is executed"
            }
        }
stage('Build') {
           agent {
              docker {
          image 'microsoft/dotnet:2.1-sdk'
          args '-u root:root'
        }
      }

      steps {
        sh 'apt update'
        sh 'apt install -y apt-transport-https'

        // sh 'echo "{\\\"buildNumber\\\":\\\"${BUILD_NUMBER}\\\", \\\"sha\\\":\\\"need to populate\\\"}" > Jenkins/buildinfo.json'
        sh 'echo Hi'
        sh 'chmod a+rw -R .'
        stash name: 'Jenkins-out', includes: 'Jenkins/out/**'
      }
    }
}
}

我想使用docker构建我的.net核心应用程序,并将映像放入ECR。使用上面的代码,我可以执行第一阶段,但是我不能执行第二阶段。

process apparently never started in C:\Program Files (x86)\Jenkins\workspace\ECS@2@tmp\durable-8251f4a8
(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)

我收到此错误消息。在上面的存储库中,我没有添加docker文件。我需要添加吗?有人可以帮我解决这个问题吗?任何帮助,将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

如果要在ECR上推送映像,则应将所有依赖项放入dockerfile中,就像在Jenkins中一样,您可以运行后记脚本,该后记脚本会在容器中为您安装依赖关系,但在AWS ECR中并非如此。您的Docker iamge应该能够在没有任何后脚本的情况下运行。

您的Dockerfile看起来像

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o output
# Runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/output .
ENTRYPOINT ["dotnet", "DotNetProject.dll"]

build-env将在第一个阶段构建您的应用,第二个阶段将在构建阶段复制该构建应用。

如果您在AWS VPC内使用Jenkins服务器,请将role分配给有权访问ECR的Jenkins服务器。

如果在外面跑,则喂credential

enter image description here

node {
  stage 'Checkout'
  git 'ssh://https://github.com/niranjan2020/JenkinsPipeLine'

  stage 'Docker build'
  docker.build('demo')

  stage 'Docker push'
  docker.withRegistry('https://1234567890.dkr.ecr.us-east-1.amazonaws.com', 'ecr:us-east-1:demo-ecr-credentials') {
    docker.image('demo').push('latest')
  }
}

使用您的ECR更新注册表URL。

您可以进一步检查here