关于Jenkins + Docker + ASP.NET Core自动化部署的问题(避免踩坑)

  • Post category:Linux

关于 Jenkins+Docker+ASP.NET Core 自动化部署的问题,需要注意以下几个方面:

1. 准备环境

  • 安装 Jenkins:可在官网下载 Jenkins,按照提示完成安装。
  • 安装 Docker:可根据系统不同,在官网下载 Docker 适应版本,按照提示完成安装。
  • 准备 ASP.NET Core 项目:此处省略,假设已经存在 ASP.NET Core 项目。

2. 配置 Jenkins

  • 安装插件:打开 Jenkins 页面,进入“管理 Jenkins”-“插件管理”,安装 Docket Pipeline、Docker 和 Git 插件。
  • 配置 Docket 环境:打开 Jenkins 页面,进入“管理 Jenkins”-“管理节点”,找到需要配置的节点,编辑节点配置,在“环境变量”处添加环境变量DOCKER_HOST=tcp://localhost:2375
  • 创建 Jenkins 任务:在 Jenkins 页面上,点击“新建任务”,选择“流水线”,填写任务名称,在“Pipeline”处增加 pipeline 脚本如下:
pipeline {
    environment {
        DOCKER_TAG = "${env.BUILD_NUMBER}"
        DOCKER_IMAGE = 'aspnetcore-app'
        DOCKERFILE = 'Dockerfile'
    }
    agent {
        docker {
            image 'microsoft/dotnet:2.1-sdk'
            args '-v /var/run/docker.sock:/var/run/docker.sock'
        }
    }
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('Build') {
            steps {
                sh 'dotnet restore'
                sh 'dotnet build'
            }
        }
        stage('Test') {
            steps {
                sh 'dotnet test'
            }
        }
        stage('Dockerize') {
            steps {
                sh 'docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} -f ${DOCKERFILE} .'
            }
        }
        stage('Push') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'docker-credentials', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
                    sh 'docker login -u ${USERNAME} -p ${PASSWORD}'
                }
                sh 'docker push ${DOCKER_IMAGE}:${DOCKER_TAG}'
            }
      }
   }
}
  • 配置 Dockerfile:在 ASP.NET Core 项目的根目录中创建一个名为 Dockerfile 的文件,创建一个如下所示的 Dockerfile:
FROM microsoft/aspnetcore:2.0
COPY /bin/release/netcoreapp2.0/publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "YourProject.dll"]

3. 测试

  • 完成 Jenkins 配置后,在 Jenkins 任务页面,点击“构建”,查看构建结果。

示例

示例1:Docker Registry

如果需要使用 Docker Registry,可以参考以下 Jenkins Pipeline 配置:

pipeline {
    agent any
    options {
        timeout(time: 15, unit: 'MINUTES')
    }
    environment {
        DOCKER_REGISTRY_URL = "https://mydockerregistry.com"
        DOCKER_REGISTRY_CREDENTIALS = "myregistryid"
        DOCKER_IMAGE = "acme/myimage"
        DOCKER_TAG = "${env.BUILD_NUMBER}"
    }
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('Build') {
            steps {
                sh "docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} ."
            }
        }
        stage('Push') {
            steps {
                withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'myregistryid', usernameVariable: 'DOCKER_REGISTRY_USERNAME', passwordVariable: 'DOCKER_REGISTRY_PASSWORD']]) {
                    script {
                        docker.withRegistry("${DOCKER_REGISTRY_URL}", "${DOCKER_REGISTRY_USERNAME}", "${DOCKER_REGISTRY_PASSWORD}") {
                            sh "docker push ${DOCKER_IMAGE}:${DOCKER_TAG}"
                        }
                    }
                }
            }
        }
    }
}

示例2:Docker-compose

$ docker-compose -f docker-compose.yml build
$ docker-compose -f docker-compose.yml up -d
$ docker-compose -f docker-compose.yml restart

结语

以上就是使用 Jenkins+Docker+ASP.NET Core 实现自动化部署的完整攻略,同时给出了两个相关示例。