关于 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 实现自动化部署的完整攻略,同时给出了两个相关示例。