DevOps—基于Jenkins构建 .Net Core 应用自动化流程
- 1. 插件安装
- 2. 流程构建
前一篇文章演示了怎么基于 Jenkins 自动化构建发布一个前端工程,接下来将演示基于 Jenkins 构建发布一个后端应用,我主要使用的开发语言就是 .Net Core,这里以 .Net Core 为示例。
1. 插件安装
基于 Jenkins 自动化构建 .Net Core 应用需要先安装 dotnetsdk 插件,在 系统管理 -> 插件管理 -> 可选插件 中搜索 .Net SDK 进行安装即可。
安装完成之后,需要在全局工具配置中配置 .Net SDK 版本,SDK 版本根据实际使用的情况进行选择即可。
2. 流程构建
之后创建一个流水线项目,这里也需要一个 Git 仓库作为演示用的源码仓库,仓库中的 .Net Core 应用是基于 .Net 6 生成的 WebApi 模板工程,打开就是一个 swagger 文档界面。
流水线中的 Jenkinsfile 编写如下:
pipeline {
agent any
environment {
def BUILDVERSION = sh(script: "echo `date +%Y%m%d%H%M%S`", returnStdout: true).trim()
}
tools {
dotnetsdk ".net 6.0.301"
}
stages {
stage('环境验证') {
steps {
sh "dotnet --version"
}
}
stage('拉取源码') {
steps {
echo '开始拉取代码'
git branch: 'publish', credentialsId: '260b288d-5229-4ee9-b2eb-73f1cde84c77', url: 'http://xxx.xxx.xxx.xxx:8929/gitlab-instance-08a71c21/dotnet-sample.git'
echo '拉取代码完成'
}
}
stage('还原项目') {
steps {
dir('./src') {
echo '开始还原项目'
sh "dotnet restore"
echo '还原项目结束'
}
}
}
stage('生成项目') {
steps{
dir('./src') {
echo '删除上次生成结果文件夹'
sh 'rm -rf ./suncere-ui'
sh "rm -rf $WORKSPACE/publish"
sh "mkdir -p $WORKSPACE/publish"
echo '开始生成项目'
sh "dotnet publish -c:Release --runtime linux-x64 -o $WORKSPACE/publish"
sh "mv ./DotNetJenkinsSample/start.sh $WORKSPACE/publish/"
echo '生成项目结束'
}
}
}
stage('部署项目') {
steps{
echo '开始部署'
sh 'pwd'
sh "zip -r $WORKSPACE/publish.zip ./publish"
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'test',
transfers: [
sshTransfer(
cleanRemote: false,
excludes: '',
execCommand: """
#! /bin/sh
echo "开始备份"
if [ -d "/home/website/dotnet/" ];then
zip -r "/home/website/backup/dotnet-${BUILDVERSION}.zip" /home/website/dotnet
rm -rf /home/website/dotnet
fi
echo "备份结束"
echo "开始部署"
if [ -d "/home/temp/publish/" ];then
rm -rf /home/temp/publish
fi
cd /home/temp
unzip ./publish.zip
mv /home/temp/publish /home/website/dotnet
rm -rf /home/temp/publish.zip
cd /home/website/dotnet
kill -9 `ps -ef | grep DotNetJenkinsSample | grep -v grep | awk '{print $2}'`
nohup dotnet DotNetJenkinsSample.dll --urls=Http://*:8003 & > nohup.out
echo "部署结束"
""",
execTimeout: 0,
verbose: true,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: "/temp",
remoteDirectorySDF: false,
removePrefix: "",
sourceFiles: "publish.zip"
)
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: true
)
]
)
echo '部署结束'
}
}
}
}
这里有几个要注意的点:
- 在 Pipeline 中,需要通过 tools 安装 dotnetsdk 才能使用 dotnet,通过 dotnetsdk “全局配置的dotnetsdk名称” 安装
- .net 应用还原时,如果需要还原私服 nuget 包,使用 dotnet restore -s 指定包源
- 在生产环境中,推荐将 Jenkinsfile 纳入源代码版本控制中,这样是为了方便我们有时加多一个应用需要编排的时候,可以在开发环境中对 Jnkinsfile 进行修改,而无需到 Jenkins 的管理平台中进行操作,更方便也更具有可追溯性
流水线配置完成之后,点击立即构建,可以看到构建流程
点击构建记录,通过控制台输出可以看到整个构建流程的构建记录,通过控制台输出可以看到整个构建流程的输出
在远程服务器上,可以看到备份记录和启动起来的进程
这一篇和前一篇的两个示例都比较简单,是实际工作场景中的自动化构建流程的简化,但是前后端结合就是一个完整的应用了,其他的都可以在这个基础上根据工作中的具体情况进行调整。生产环境下前后端不会分开去构建,微服务架构下会使用到容器和 k8s 等工具,之后也会写一些与 docker、k8s 结合的自动化流程示例。