Как собрать ядро ​​.net в Jenkins с помощью Docker и перенести его в ECR? - PullRequest
0 голосов
/ 27 сентября 2019

Привет! Я учусь строить конвейер, используя Jenkins и AWS для моего основного приложения .net.Я создал образец приложения на https://github.com/niranjan2020/JenkinsPipeLine Я скачал Jenkins на своем локальном компьютере и работал через порт 8080. Я создал шаблон Pipeline для создания конвейера Jenkins.

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/**'
      }
    }
}
}

Я хочу собрать свое основное приложение .net с помощью docker и поместить образ в 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 Ответ

1 голос
/ 27 сентября 2019

Если вы хотите поместить изображение в ECR, вы должны поместить каждую зависимость в ваш докер-файл, как в Jenkins, вы можете запустить postscript, который устанавливает зависимости для вас в контейнерах, но это не так в 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 создаст ваше приложение на первом этапе, а второй скопируетприложение для сборки на этапе сборки.

Если вы используете сервер Jenkins в AWS VPC, присвойте роль серверу Jenkins, который имеет доступ к ECR.

, если он работает снаружи, тогдавведите учетные данные .

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')
  }
}

, обновите URL реестра с помощью ECR.

, который вы можете проверитьдалее здесь .

...