嗨,我正在学习为我的.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文件。我需要添加吗?有人可以帮我解决这个问题吗?任何帮助,将不胜感激。谢谢
答案 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。
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。