ASP.NET Core + Jenkins实现自动化发布

这篇具有很好参考价值的文章主要介绍了ASP.NET Core + Jenkins实现自动化发布。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🏆作者:科技、互联网行业优质创作者
🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造
🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你快速成长。升职+涨薪!!

前言

由于部署个人博客系统的服务器只有2G内存,每次利用jenkins编译,发布的时候jenkins老是挂,因此新买了一台轻量应用服务器,专门用于个人博客系统的持续发布任务,下面讲解如何利用jenkins实现系统的持续发布功能。

一、安装Jenkins

这里服务器是Linux CentOS 7 ,使用SSH 登录云服务器后,输入以下命令安装jenkins.

sudo wget -O /etc/yum.repos.d/jenkins.repo \
    https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum upgrade
# Add required dependencies for the jenkins package
sudo yum install java-11-openjdk
sudo yum install jenkins
sudo systemctl daemon-reload
systemctl enable jenkins
sudo systemctl start jenkins

安装成功后,在浏览器中输入服务器 公网IP地址+8080端口访问

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

上图提示你需要从服务器上的initialAdminPassword文件复制jenkins的初始登录密码进行输入,输入后点击继续。

然后选择 安装Jenkins推荐的插件,然后等待所有推荐插件安装完成.

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

安装完后,创建一个登录Jenkins的账号

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

访问地址配置用默认的就好(通过8080端口访问)。

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

二、安装Gitee插件

这边以我的个人博客代码为例子,因为目前我的个人博客代码是托管到码云上,因此这里利用Gitee插件来实现持续发布功能.

点击左侧 Dashboard->Manage Jenkins(系统管理) 菜单,并点击Manage Plugins(插件管理)

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

选择可选插件,然后输入Gitee,然后点 Download now and install after restart,

这个插件主要是用于接收gitee WebHook通知(如:代码提交、PR等)并触发jenkins构建

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

安装成功后,前往 Jenkins -> Manage Jenkins(系统管理) -> Configure System(系统配置) -> Gitee Configuration(Gitee配置) ,对插件进行配置。

添加一个新的证书令牌,按照如下配置,GiteeAPIV5 私人令牌可以通过页面:https://gitee.com/profile/personal_access_tokens 生成,然后点击添加。

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

这个时候点击测试连接会发现报错,无法连上,https://gitee.com/oschina/Gitee-Jenkins-Plugin/issues/I4NQAJ 这里面提出了解决方案 , javax.ws.rs-api jar包可以在这里(https://repo1.maven.org/maven2/javax/ws/rs/javax.ws.rs-api/2.1.1/)下载。

需要注意的是:安装完相应jar包或者Jersey 2 API 插件后后记得重启jenkins才能生效。

mkdir -p /var/cache/jenkins/war/WEB-INF/lib
cd /var/cache/jenkins/war/WEB-INF/lib
wget https://repo1.maven.org/maven2/javax/ws/rs/javax.ws.rs-api/2.1.1/javax.ws.rs-api-2.1.1.jar
 chmod a+x javax.ws.rs-api-2.1.1.jar
systemctl restart jenkins

按照以上方法试了后,我这边还是不行,可能是我那个流程没有操作对。

然后安装Jersey 2 API后,重启jenkins发现可行(我这边jenkins版本比较新)

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

三、服务器相关编译环境配置

  • 安装.net core sdk.用于编译,我这边用的dotnet版本还是.net core 3.1,输入以下命令安装

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.1
  • 安装git

sudo yum install git

四、新建自动构建任务

进入 Dashboard->新建任务,输入任务名称,然后选择流水线。

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

General配置

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

配置构建触发器

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

配置流水线

点击Credentials 右下方的添加按钮,添加用于拉取代码用的身份验证凭据。

需要注意的是:如果使用git ssh 协议(也就是格式为git开头的仓储地址),则添加身份验证凭据的时候,凭据类型只支持:Username with password (用户名和密码验证)、SSH Username with private key(用户名和私钥验证),用户名就是gitee的登录账号。

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

创建身份验证凭据秘钥前,需要将服务器登录用户先切换到jenkins用户,不然以root用户创建的秘钥文件,将无法拉取代码(存在权限问题),切换到jenkins用户前,先执行以下命令,以便允许jenkins用户登录。

sudo usermod -s /bin/bash jenkins

切换到jenkins用户

sudo su - jenkins

在服务器上输入以下命令创建身份验证凭据私钥,-C 后面的参数可以是任意内容,但通常用邮箱账号。

ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"

生成后,服务器上输入以下命令读取公钥内容,然后将公钥内容复制到gitee指定项目的 管理->部署公钥管理->添加公钥中添加指定公钥,

cat ~/.ssh/id_ed25519.pub

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

gitee上添加公钥后,在服务器上执行以下命令

ssh -T git@gitee.com

通过执行以下命令读取ssh身份验证私钥内容,并输入到 jenkins 身份验证凭据的以下位置。

cat ~/.ssh/id_ed25519

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

添加身份验证凭据后,按照下图配置。

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

在jenkins 服务器上执行以下命令,创建ssh 身份认证秘钥,并将公钥复制到应用服务器上,以便在编译成功后,直接复制dll到应用服务器上,而无需输入应用服务的登录密码,需要注意的是,创建秘钥前,先切换到jenkins用户账号

sudo su - jenkins
ssh-keygen -t rsa

以下命令表示将jenkins所在服务器生成的公钥复制到应用服务器(因为~/.ssh/目录下已经有其他的秘钥,因此这边指定复制哪一个公钥)

ssh-copy-id -i ~/.ssh/id_rsa.pub root@115.159.114.65 -p 1200

以上两个命令执行成功后,可以创建一个文本文件进行测试,看下是否能无需输入密码就可以复制文件到应用服务器。

cd ~
touch test.txt
echo "测试内容" >> test.txt

以下命令用于将jenkins服务器上用户主目录下的test.txt文件复制到应用服务器上用户主目录。

# -P 表示应用服务器的ssh登录端口(如果不是22,必须指定),-i 后面跟的是jekins服务器上生成的私钥文件。
scp -P 1200 -i ~/.ssh/id_rsa ~/test.txt root@115.159.114.65:~

在项目的解决方案文件(.sln)同级目录下新建名称为jenkinsfile的文件,并输入以下脚本内容

pipeline {
    agent any
    stages {
        stage('build') {
            steps {
              echo '开始拉取代码'
              sh 'git pull origin dev:dev'
              echo '切换到本地dev分支'
              sh 'git checkout dev'
              
              echo '当前工作目录及文件列表如下'
              sh 'pwd'
              sh 'ls -al'
              
              dir("${WORKSPACE}/BlogSys") {
                 echo '开始编译博客前端站点'
                 sh 'dotnet publish ./BlogSys.csproj -c Release -r linux-x64 --no-restore'
              }
              //WORKSPACE表示存放代码的根目录。
              dir("${WORKSPACE}/BlogSysManagement"){
                echo '开始编译博客后台站点'
                sh 'dotnet publish ./BlogSysManagement.csproj -c Release -r linux-x64 --no-restore'
              }
            }
        }
        stage('deploy')
        {
            steps {
              echo '开始发布流程,当前工作目录如下'
              sh 'pwd'
             
              echo '开始发布个人博客前端系统'
              echo '前端站点'
              sh 'ssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -T "systemctl stop blogsys"'
              //dir函数里面要用环境变量记得用双引号,该函数用于改变当前目录,dir函数块里面包含的所有相对路径都是相对于dir指定的目录。
              dir("${WORKSPACE}/BlogSys/bin/Release/netcoreapp3.1/linux-x64/publish/"){
                    //-i 用于指定ssh传输身份验证私钥,-r表示复制目录下的所有文件及子目录以及子目录下的所有文件,也可以将这个文件夹打包压缩后再传输。
                    sh 'scp -P 1200 -i ~/.ssh/id_rsa -r ./ root@115.159.114.65:/var/www/blogsys' 
              }
              echo '重启前端站点'
              //这里不能使用-t 选项,应该使用-T 或 -tt 代理,否则无法正确执行。
              sh 'ssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -T "systemctl restart blogsys"'
              
              echo '开始发布个人博客后台管理系统'
              echo '停止后台站点'
              sh 'ssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -tt "systemctl stop blogsysmgr"'
              dir("${WORKSPACE}/BlogSysManagement/bin/Release/netcoreapp3.1/linux-x64/publish/"){
                      sh 'scp -P 1200 -i ~/.ssh/id_rsa -r ./ root@115.159.114.65:/var/www/blogsysmgr' 
              }
              echo '重启后台站点'
              sh 'ssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -tt "systemctl restart blogsysmgr"'
     
              echo '系统发布成功'
            }
        }
    }
}

完成以上步骤后就可以开始测试构建啦.

ASP.NET Core + Jenkins实现自动化发布,自动化,运维,visual studio,.net,.netcore,c#,jenkins

gitee+jenkins 实现代码自动发布流程大概的流程

总结起来就是:

1、提交代码到gitee

2、gitee通过Webhook钩子通知jenkins gitee插件

3、gitee插件触发构建(Gitee API V5 Token验证)

4、git插件拉取代码(通过SSH Username with Private key身份验证方式)

5、执行编译脚本

6、发布到应用服务器,另外需要注意的是 jenkins 默认是以jenkins用户来执行的,因此需要开通jenkins用户能执行bash的权限,以及创建git插件身份验证秘钥的时候一定要以jenkins用户登录去创建,否则要拉取代码的时候会出现权限问题。

🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你升职+涨薪!!
🏆点击下方卡片关注公众号,里面有很多大佬的技术文章,能助你快速成长。还可免费领取如下15个视频教程!

回复'面试',获取C#/.NET/.NET Core面试宝典

回复'C#',领取零基础学习C#编程

回复'NET',领取.NET零基础入门到实战

回复'Linux',领取Linux从入门到精通

回复'wpf',领取高薪热门【WPF上位机+工业互联网】从零手写实战

回复'Modbus',领取初识C#+上位机Modbus通信

回复'PLC',领取C#语言与西门子PLC的通信实操

回复'blazor',领取blazor从入门到实战

回复'TypeScript',领取前端热门TypeScript系统教程

回复'vue',领取vue前端从入门到精通

回复'23P',领取C#实现23种常见设计模式

回复'MongoDB',领取MongoDB实战

回复'Trans',领取分布式事务

回复'Lock',领取分布式锁实践

回复'Docker',领取微服务+Docker综合实战

回复'K8s',领取K8s部署微服务

回复'加群',进.NET技术社区交流群 文章来源地址https://www.toymoban.com/news/detail-835258.html

到了这里,关于ASP.NET Core + Jenkins实现自动化发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker+jenkins+dockerfile 自动化部署发布

    提示: 文章如有错误的地方请指出,以免误人子弟! 提示:以下是本篇文章正文内容,下面案例可供参考 下载镜像 下载maven maven 官网下载地址 或者使用命令下载 通过软件放到 linux 的目录下,这边放到Home目录下 解压 进到解压的目录下,创建项目的本地仓库文件夹并赋予读

    2024年02月05日
    浏览(47)
  • Jenkins的环境部署,(打包、发布、部署、自动化测试)

    一、Tomcat环境安装 1.安装JDK(Java环境) JDK下载地址:Java Downloads | Oracle 安装好后在系统环境变量里配置环境变量: ①添加JAVA_HOME 变量名:JAVA_HOME 变量值:C:Program FilesJavajdk1.8.0_181(根据自己的实际路径配置) ②添加CLASSPATH 变量名:CLASSPATH 变量值:.;%JAVA_HOME%libdt.jar;%J

    2024年01月18日
    浏览(45)
  • K8S + GitLab + Jenkins自动化发布项目实践(二)

    前置工作:已部署5节点k8s集群,并搭建了代码仓库和镜像仓库(GitLab + Harbor)。 主机名 IP 角色 k8s-master1 192.168.124.a k8s控制平面 k8s-master2 192.168.124.b k8s控制平面 k8s-master3 192.168.124.c k8s控制平面 k8s-worker1 192.168.124.d k8s工作节点 k8s-worker2 192.168.124.e k8s工作节点 harborgit 192.168.124.f

    2024年02月03日
    浏览(85)
  • ubuntu20.04-通过docker安装jenkins并自动化发布java

    jenkins 需要 git 、 maven 和 node ,其中 maven 和 node 手动添加, git和git环境是jenkins镜像 自带了的。 如果删除了 docker 对应的 jenkins 容器后(删除前一定备份 jenkins_home 整个文件夹,否则怕前功尽弃 : tar -czvf jenkins_home.tar.gz /var/jenkins_home ) 如果删除了容器,需要重新安装并配置

    2024年03月11日
    浏览(60)
  • Jenkins+gitlab实现自动化部署

    Jenkins 是一个用 Java 编写的开源自动化工具,带有用于持续集成的插件。用于持续构建和测试您的软件项目,从而使开发人员更容易将更改集成到项目中,并使用户更容易获得新的构建。它还允许您通过与大量测试和部署技术集成来持续交付软件。 Jenkins 集成了各种开发生命

    2024年02月21日
    浏览(54)
  • docker+jenkins 实现自动化部署

    工欲善其事必先利其器,所以前期的准备工作必须做好,那么我们要实现自动化部署,必须提前准备什么呢?哈哈哈,可能有一些小伙伴已经猜到了,我们需要一台自己的服务器,这里博主使用的自己够买一台腾讯云的轻量服务器,折扣完了才一百多块钱,当然小伙伴也可以

    2024年02月06日
    浏览(269)
  • ASP.NET Core使用Hangfire定时发布文章

    也是上了5天班,终于迎来了休息,抽空更新下博客,然后就是下周一公司会对我进行考核,希望考核能通过吧!!! 然后我想给博客添加一个定时发布文章的功能,其实这个功能对于我的博客是没什么作用的,什么时候发都没什么人看。但是咱还是要有这个功能。 我为文章

    2024年02月08日
    浏览(43)
  • asp.net core在发布时排除配置文件

    使用命令发布 dotnet restore dotnet publish -c Release -r win-x64 -o \\\"D:services\\\"  这样发布总是是将配置文件覆盖  这时候打开项目.csproj新增配置文件

    2024年04月24日
    浏览(37)
  • Gitee + Jenkins实现前端自动化部署

    这是在window环境下面实施的,Jenkins安装自己去网上找( 推荐安装最新的版本,旧版本下载插件会有兼容问题 ),Jenkins必备插件Git、gitee、NodeJs(中文插件 Chinese需重启)。以gitee作为代码仓库,需要到仓库中的webHooks作为触发。本文借鉴了Gitee + Jenkins自动化实战 | 大前端 -

    2024年02月04日
    浏览(47)
  • asp.net core项目发布到 iis上

            我们都知道与传统asp.net 项目比较,ASP.NET Core则完全不同,它并不是运行在IIS的工作进程中,而是独立运行的。它运行于控制台应用程序之中,控制台中则运行了Kestrel Web服务器组件。Kestrel作为一款.NET Web服务器的实现,它在吞吐量性能方面做了很多工作。它可以

    2024年01月21日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包