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

2022-12-24 0 767

原副标题:ASP.NET Core + Jenkins 同时实现智能化正式发布

所推荐高度关注↓

序言

虽然布署对个人网志控制系统的伺服器多于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 实现自动化发布

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

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

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

加装完后,创建一个登入Jenkins的账号

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

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

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

二、加装Gitee插件

那边以我的对个人网志代码为例子,因为目前我的对个人网志代码是托管到码云上,因而这里借助Gitee插件来同时实现稳步正式发布机能.

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

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

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

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

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

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

ASP.NET Core + 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 实现自动化发布

ASP.NET Core + 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 实现自动化发布

General配置

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

配置构建触发器

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

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

配置流水线

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

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

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

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

sudo usermod -s /bin/bash jenkins

切换到jenkins用户

sudo su – jenkins

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

ssh-keygen -t ed25519 -C [email protected]

生成后,伺服器上输出下列指示读取公钥内容,然后将公钥内容复制到gitee指定项目的 管理->布署公钥管理->添加公钥中添加指定公钥,

cat ~/.ssh/id_ed25519.pub

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

gitee上添加公钥后,在伺服器上执行下列指示

ssh -T [email protected]

通过执行下列指示读取ssh身份验证私钥内容,并输出到 jenkins 身份验证凭据的下列位置。

cat ~/.ssh/id_ed25519

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

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

ASP.NET Core + 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 [email protected] -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 ./ [email protected]:/var/www/blogsys

}

echo 重启前端站点

//这里不能采用-t 选项,应该采用-T 或 -tt 代理,否则无法正确执行。

sh ssh -i ~/.ssh/id_rsa [email protected] -p 1200 -T “systemctl restart blogsys”

echo 开始正式发布对个人网志后台管理控制系统

echo 停止后台站点

shssh -i ~/.ssh/id_rsa [email protected] -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 ./ [email protected]:/var/www/blogsysmgr

}

echo 重启后台站点

sh ssh -i ~/.ssh/id_rsa [email protected] -p 1200 -tt “systemctl restart blogsysmgr”

echo 控制系统正式发布成功

}

}

}

}

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

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用户登入去创建,否则要拉取代码的这时候会出现权限问题。

转自:chenxin.dm

– EOF –

点击副标题可跳转

采用 k6 对 .NET 程序进行性能测试

.NET 6 中怎样采用IHostedService和BackgroundService?

C# 为什么高手喜欢用 StartsWith 而不是 Substring 进行字符串匹配?

看完本文有收获?请转发分享给更多人

所推荐高度关注「DotNet」,提升.Net技能

点赞和在看就是最大的支持❤️

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务