Jenkins 构建自动化 .NET Core 发布镜像
Jenkins 构建自动化 .NET Core 发布镜像
导读
在本章中,将介绍如何在 Linux 下使用 Docker 部署、启动 Jenkins,编写脚本,自动化构建 .NET Core 应用,最终将 .NET Core 应用打包为 Docker 镜像。
部署 Jenkins
请提前在 Linux 上安装 Docker,在 Linux 中,我们使用 Docker 启动 Jenkins,这样可以避免手动安装大量依赖以及污染本地环境,也便于快速启动和故障恢复。
安装 Docker 完毕后,使用
docker version
检查 Docker 版本,Docker 版本不能为 1.x、3.x 这种版本,请升级到 18.x 以上版本。一般在 Ubuntu 系统中,下载安装的是最新版本,但是在 Centos 中因为默认镜像源中的版本比较旧, 安装 Doker 版本较低,需要手动添加新版本的镜像源再升级。
因为会使用到容器提供环境,以及使用 Docker 打包 .NET Core 程序为 Docker 镜像,所以需要在 Jenkins 容器中映射 Docker 的 .sock
文件,以便在容器中,还能使用 Docker 命令。
在宿主机中创建 /var/jenkins_home
目录,用于备份 Jenkins 中的数据。
在 Linux 中使用 Docker 启动 Jenkins ,其命令如下:
docker run \
-u root \
-itd \
-p 8080:8080 \
-p 50000:50000 \
-v /var/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
启动后,使用 docker logs {容器ID}
查看日志获取 Jenkins 登录密码,其密码是一串哈希字符串,例如:1abc12445adcf
。
最后打开 8080
端口,即可访问 Jenkins。
安装插件
登录 Jenkins 后,会提示安装推荐的插件,请根据提示安装推荐的插件,推荐安装的插件列表如下:
Folders Plugin
OWASP Markup Formatter Plugin
Build Timeout
Credentials Binding Plugin
Timestamper
Workspace Cleanup
Ant
Gradle
Pipeline
GitHub Branch Source Plugin
Pipeline: GitHub Groovy Libraries
Pipeline: Stage View
Git plugin
SSH Build Agents
Matrix Authorization Strategy Plugin
PAM Authentication
LDAP
Email Extension
Mailer Plugin
Localization: Chinese (Simplified)
另外为了提供容器打包支持等,需要另外手工安装以下插件。
# 提供 Docker 支持(必装)
docker
Docker Pipeline
docker-build-step
# 可视化设计流水线脚本的工具(必装)
Blue Ocean
# 提供对 gitlab 支持,如果不使用可以不安装
gitlab
# 提供 Git 参数化和钩子触发构建支持,不需要可以不安装
Git Parameter
Generic Webhook Trigger
拉取镜像
这里介绍一下我们后面要用到的两个镜像。
拉取一个 .NET Core SDK,每次启动流水线时,都会启动一个 .NET Core SDK 容器,为我们提供构编译、发布 .NET Core 程序的环境。
docker pull mcr.microsoft.com/dotnet/sdk:3.1
拉取一个 ASP.NET Core Runtime,用于制作应用镜像的基础镜像。
docker pull mcr.microsoft.com/dotnet/aspnet:3.1
镜像列表:
mcr.microsoft.com/dotnet/aspnet 3.1 ac199e8d6dff 2 weeks ago 208MB
mcr.microsoft.com/dotnet/sdk 3.1 82e2a34647f0 2 weeks ago 710MB
制作 Jenkinsfile 脚本
笔者贴心地给各位同学准备了 Demo 项目,请到 https://github.com/whuanle/DotNetCoreJenkinsDemo 仓库,fork 到你的仓库,后续我们使用这个 ASP.NET Core 的 Demo 程序实践流程。
在项目文件中,可以找到一个 Jenkinsfile 文件,此文件为我们定义流水线的步骤。
我们看一下简单的 Jenkinsfile 模板:
pipeline {
stages {
stage('Build') {
steps {
echo 'Building..'
}
}
stage('Test') {
steps {
echo 'Testing..'
}
}
stage('Deploy') {
steps {
echo 'Deploying....'
}
}
}
}
stages
中,定义流水线的阶段,在模板中,一个定义了三个阶段,分别是 Build
、Test
、Deploy
。
每个阶段都可以定义多个步骤(steps
),每个步骤中都可以执行多个不同类型的 step。
stage('Test') {
steps {
echo 'Testing..'
}
}
demo 中的 Jenkinsfile 比较简单,我们可以找个 Publish
阶段的内容看一下:
stage('Publish') {
steps {
sh 'dotnet publish src/WebDemo -c Release'
}
}
其实很简单,每个步骤执行 shell 命令就行,我们可以使用 sh '...'
表示此步骤要执行的 shell 命令。
接着我们看一下 Jenkinsfile 开头的两部分内容。
// 全局环境变量
environment {
IMAGENAME = 'webdemo' // 镜像名称
IMAGETAG = '1.0.0' // 镜像标签
APPPORT = '8089' // 应用占用的端口
APPDIR = '/opt/app' // 应用工作的目录
}
agent {
docker {
image 'mcr.microsoft.com/dotnet/sdk:3.1'
args '-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker'
}
}
environment
中,可以定义此次构建过程的环境变量。
agent
则是节点选择器,可以选择在何种环境下启动流水线,有 node
、docker
等类型。
构建流水线
登录到 Jenkins 网页后台,在左侧菜单栏中点击 New Item
,开始创建流水线。
Jenkins 有多种流水线风格,还可以通过添加插件,来加入更多的流水线类型,我们主要了解 Freestyle project 、Pipeline、Multibranch Pipeline 即可。
Freestyle project
Freestyle project流水线 使用上比较自由,不需要对项目做更改即可创建流水线,可以添加很多选择、配置。如果流程需要变化,改动比较麻烦。
Pineline、Multibranch Pipeline
他们都可以同时处理多个分支,这两种都是依赖于项目中的 Jenkinsfile 文件。Multibranch Pipeline 好处是可以同时检查多个分支,为每个分支创建构建Job,而 Pipeline 会把多个分支放到一个 Job 中。
点击 New Item
,创建流水线,选择 Mutibranch Pipline。
添加 Git 源代码 仓库方式,我们可以自由选择一种类型,建议使用 Single repository & branch
。
由于我们没有添加密钥,所以 Jenkins 无法访问你的 Github 仓库,所以需要添加一个可访问的密钥。
找一台已经安装了 git 的电脑,生成公钥私钥,为 Jenkins 和 GitHub 之间提供加密连接。
执行命令:
ssh-keygen -t rsa -b 2048 -C "email@example.com"
根据提示,填写要存放密钥的路径,如
D:/id_rsa
。执行命令后,会生成两个文件,
id_rsa
、id_rsa.pub
,复制 id_rsa (私钥)中的内容到 Jenkins 中。然后把
id_rsa.pub
(公钥)的内容添加到 Github 你的账号中。
你可以使用多种方式添加认证方式,最简单、安全的是密钥,我们可以选择 Secret file
,然后上传私钥,或者使用别的方式,这里就不赘述了。
然后选择要发布的分支,最后直接保存即可。
然后回到主界面,打开 我们创建的流水线,点击 Build Now
,即可启动流水线。
构建成功截图:
在 Linux 服务器上,查看镜像列表:
root@localhost ~ 19:54:20 # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
webdemo 1.0.0 79b636ddef73 2 minutes ago 208MB
可以看到,已经自动打包应用为镜像,其镜像名称和版本号,都可以在 Jenkinsfile 中设置。
观察
我们可以在构建界面中,观察每个步骤的日志。
在 Open Blue Ocean 中,有更加好看的 UI 和方便的工具。
可视化设计流水线步骤。
观察构建过程。
Jenkins 构建自动化 .NET Core 发布镜像的更多相关文章
- 通过jenkins构建服务,并发布服务,修改Jenkins以Root用户运行
通过jenkins构建服务,并发布服务,修改Jenkins以Root用户运行 其他博文:从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布 Jenkins注册中心 一 ...
- Jenkins构建自动化脚本执行无界面解决方法
场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...
- Jenkins构建自动化任务
前言 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 一.环境配置 1.切换到jenkins ...
- 二.jenkins构建自动化任务
1,新建任务 打开jinkens, 选择 [新建] -->[输入要构建的项目名称]-->[构建一个自由风格的软件项目]-->[OK] 2, 配置 根据自己的需要选择配置,如下: 代 ...
- Jenkins构建自动化--实例一
1.新建任务 2.配置任务 3.构建任务 5.构建完成后,可以点击任务名称查看结果
- asp.net core + jenkins 实现自动化发布
由于部署个人博客系统的服务器只有2G内存,每次利用jenkins编译,发布的时候jenkins老是挂,因此新买了一台轻量应用服务器,专门用于个人博客系统的持续发布任务,下面讲解如何利用jenkins实 ...
- Docker:使用Jenkins构建Docker镜像
Docker 彭东稳 1年前 (2016-12-27) 10709次浏览 已收录 0个评论 一.介绍Jenkins Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从 ...
- 【Gitlab+Jenkins+Ansible】构建自动化部署
说明: Gitlab.Jenkins.生产服务器.测试服务器上都需要安装Git. 一.安装Gitlab 1.主机配置 IP: 10.10.10.105 OS: CentOs7. Gitlab版本:gi ...
- 自定义构建基于.net core 的基础镜像
先说一个问题 首先记录一个问题,今天在用 Jenkins 构建项目的时候突然出现包源的错误: /usr/share/dotnet/sdk/2.2.104/NuGet.targets(114,5): e ...
随机推荐
- Java_接口
接口 接口中的方法全都是抽象方法,用来指定一些规则,让子类去重写.接口的作用主要体现在一下两点 1.指定规则2.利用这些规则给类做功能扩展 接口的定义和使用 接口使用interface关键字来定义,使 ...
- GIT·版本回退的指令
阅文时长 | 0.46分钟 字数统计 | 499.2字符 主要内容 | 1.引言&背景 2.指令集合&示例 3.声明与参考资料 『GIT·版本回退的指令』 编写人 | SCscHero ...
- 建站第二步:简单配置Nginx反代理工具
简单配置Nginx反代理工具 你要用你的域名能和服务器绑定就要用一些反代理工具 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,极其优异的服务器软件,底层为C 来自某些 ...
- 前端Node的实用方法
Node 一.什么是Node Node是以基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动.非阻塞式I/O模型(I/O是 input/output的缩写,即输入输出端口,在 ...
- Django(34)Django操作session(超详细)
前言 session: session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,session是一个思路.一个概念.一个服务器存储授权信息的解 ...
- cent7 配 yum源
今天笔记配置CentOS 7本地镜像为yum源,废话不多说,上去就是干! 1:挂镜像: ? 1 2 3 4 #创建目标挂载目录 mkdir /media/CentOS7 #将镜像挂载到目标目录 mou ...
- Linux 用户管理_用户相关配置文件详解
linux的用户管理 linux支持多个用户同时使用同一个用户登陆系统,windows在修改组策略的情况下,也可以多个人使用同一个用户登陆. 远程连接Linux的方式:ssh 远程连接windows的 ...
- IDEA workspace.xml 在 git 中无法忽略 ignore 问题
问题描述 关于 .idea 的文件夹中的 workspace.xml 设置 ignore 之后每次 commit 依旧提示需要提交改变,这就会导致, 每次merge就会导致提示"本地文件改变 ...
- UCOS 多任务系统中需要注意的地方 一个任务至少要有一些执行内容
图片说明: 在一个TASK的最外层FOR();中 如果有调用BREAK会怎样??
- 关于Unity启动调用Android_id问题排查
问题:Unity启动时获取了设备信息,其中包括Android_id 以下是在androidstudio中的log,使用Xposed的LoginHook看到Unity启动时获取了android_id信息 ...