Linux下使用Jenkins自动化构建.NET Core应用
作者:痴者工良 发布时间:2024-05-13 09:16:36
部署 Jenkins
请提前在 Linux 上安装 Docker,在 Linux 中,我们使用 Docker 启动 Jenkins,这样可以避免手动安装大量依赖以及污染本地环境,也便于快速启动和故障恢复。
安装 Docker 完毕后,使用 docker version
检查 Docker 版本,Docker 版本不能为 1.x、3.x 这种版本,请升级到 18.x 以上版本。一般在 Ubuntu 系统中,下载安装的是最新版本,但是在 Centos 中因为默认镜像源中的版本比较旧, 安装 Doker 版本较低,需要手动添加新版本的镜像源再升级。
请参考:https://www.jb51.net/article/243104.htm
因为会使用到容器提供环境,以及使用 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 和方便的工具。
可视化设计流水线步骤。
观察构建过程。
来源:https://www.cnblogs.com/whuanle/p/14928651.html
猜你喜欢
- 在对于时间准确度的把握上,为了使操作的更加细化,很多人习惯把时间精确到秒。但在实际程序操作中,虽然秒数方便我们的查阅,但是计算机并不能直接的
- 在实用美术中,常有"远看色彩近看花,先看颜色后看花,七分颜色三分花"的说法。这也就说明,在任何设计中,色彩对视觉的刺激起
- 前言:泛型是静态类型语言的基本特征,允许将类型作为参数传递给另一个类型、函数、或者其他结构。TypeScript 支持泛型作为将类型安全引入
- 原文地址https://www.codementor.io/python/tutorial/advanced-use-python-deco
- 需求在自动化测试场景里, 有时需要在代码里获取远程服务器的某些数据, 或执行一些查询命令,如获取Linux系统版本号 \ 获取CPU及内存的
- 文字向下滾動,逐渐隐藏效果~ 挺好的 <!DOCTYPE html PUBLIC "-//W3C//DTD XHT
- 最近在代码评审的过程,发现挺多错误使用eval导致代码注入的问题,比较典型的就是把eval当解析dict使用,有的就是简单的使用eval,有
- 1.使用排序使数据有序通常,你的所有数据真正需要的仅仅是按某种顺序排列。SQL的ORDER BY语句可以以字母或数字顺序组织数据。因此,相似
- 1.数组上的迭代NumPy 包含一个迭代器对象numpy.nditer。它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。数组的每个元
- 模板在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成 * 页,golang提供了html/tem
- Python中可以使用 pickle 模块将对象转化为文件保存在磁盘上,在需要的时候再读取并还原。具体用法如下:pickle是Python库
- 问题你想实现一个服务器,通过TCP协议和客户端通信。解决方案创建一个TCP服务器的一个简单方法是使用 socketserver 库。例如,下
- 目录linux mysql5.5升级至mysql5.71.下载mysql5.7.322. 进入旧的mysql的bin目录下导出mysql的数
- 我们在使用ASP 内置的ADO组件进行数据库编程时,通常是在脚本的开头打开一个连接,并在脚本的最后关闭它,但是就较大脚本而言,在多
- 一.安装python进入python官网,点击依次点击红色选中部分,开始下载。。。下载完成后,打开安装包,如下有两个选项,一个是立即安装,另
- 1 区分几个路径GOROOT:Golang的安装路径,安装之后就默认自带了GOPATH:Golang的工作目录go_project // (
- ppt通过其精美的可视化技巧以及良好的演示效果,成为了职场人士的必备技能。ppt的设计是一门大学问,无论是设计技巧,还是操作方法,都衍生出了
- 前言:大部分的文件上传功能都是用input标签实现,这样就完全可以把它看作一个输入框,可以通过send_keys()指定文件进行上传了。本章
- 我就废话不多说了,直接上代码吧!import turtleturtle.pensize(5)turtle.pencolor("ye
- 前言今天的文章比较基础,但却是必须掌握的,而且本文有些内容,也许你之前没想过。希望这篇文章能够让你理解环境变量并掌握 Go 环境变量相关操作