DevOps—基于Jenkins构建.Net Core应用自动化流程

DevOps—基于Jenkins构建 .Net Core 应用自动化流程

  • 1. 插件安装
  • 2. 流程构建

前一篇文章演示了怎么基于 Jenkins 自动化构建发布一个前端工程,接下来将演示基于 Jenkins 构建发布一个后端应用,我主要使用的开发语言就是 .Net Core,这里以 .Net Core 为示例。

1. 插件安装

基于 Jenkins 自动化构建 .Net Core 应用需要先安装 dotnetsdk 插件,在 系统管理 -> 插件管理 -> 可选插件 中搜索 .Net SDK 进行安装即可。
DevOps—基于Jenkins构建.Net Core应用自动化流程_第1张图片
安装完成之后,需要在全局工具配置中配置 .Net SDK 版本,SDK 版本根据实际使用的情况进行选择即可。
DevOps—基于Jenkins构建.Net Core应用自动化流程_第2张图片

2. 流程构建

之后创建一个流水线项目,这里也需要一个 Git 仓库作为演示用的源码仓库,仓库中的 .Net Core 应用是基于 .Net 6 生成的 WebApi 模板工程,打开就是一个 swagger 文档界面。
DevOps—基于Jenkins构建.Net Core应用自动化流程_第3张图片
流水线中的 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 '部署结束'
            }
        }
    }
}

DevOps—基于Jenkins构建.Net Core应用自动化流程_第4张图片
这里有几个要注意的点:

  • 在 Pipeline 中,需要通过 tools 安装 dotnetsdk 才能使用 dotnet,通过 dotnetsdk “全局配置的dotnetsdk名称” 安装
  • .net 应用还原时,如果需要还原私服 nuget 包,使用 dotnet restore -s 指定包源
  • 在生产环境中,推荐将 Jenkinsfile 纳入源代码版本控制中,这样是为了方便我们有时加多一个应用需要编排的时候,可以在开发环境中对 Jnkinsfile 进行修改,而无需到 Jenkins 的管理平台中进行操作,更方便也更具有可追溯性

流水线配置完成之后,点击立即构建,可以看到构建流程
DevOps—基于Jenkins构建.Net Core应用自动化流程_第5张图片
点击构建记录,通过控制台输出可以看到整个构建流程的构建记录,通过控制台输出可以看到整个构建流程的输出
DevOps—基于Jenkins构建.Net Core应用自动化流程_第6张图片

在远程服务器上,可以看到备份记录和启动起来的进程
在这里插入图片描述

这一篇和前一篇的两个示例都比较简单,是实际工作场景中的自动化构建流程的简化,但是前后端结合就是一个完整的应用了,其他的都可以在这个基础上根据工作中的具体情况进行调整。生产环境下前后端不会分开去构建,微服务架构下会使用到容器和 k8s 等工具,之后也会写一些与 docker、k8s 结合的自动化流程示例。

上一篇:DevOps—基于 Jenkins 构建 Vue 前端工程自动化流程

你可能感兴趣的:(云原生系列,jenkins,devops,.netcore,云原生)