原副标题: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端口访问
上图提示你需要从伺服器上的 initialAdminPassword文件复制jenkins的初始登入密码进行输出,输出后点击继续。
然后选择 加装Jenkins所推荐的插件,然后等待所有所推荐插件加装完成.
加装完后,创建一个登入Jenkins的账号
访问地址配置用默认的就好(通过8080端口访问)。
二、加装Gitee插件
那边以我的对个人网志代码为例子,因为目前我的对个人网志代码是托管到码云上,因而这里借助Gitee插件来同时实现稳步正式发布机能.
点击左侧 Dashboard->Manage Jenkins(控制系统管理) 菜单,并点击Manage Plugins(插件管理)
选择可选插件,然后输出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 生成,然后点击添加。
这个这时候点击测试连接会发现报错,无法连上,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版本比较新)
三、伺服器相关校对环境配置
加装.net core sdk.用作校对,我那边用的dotnet版本还是.net core 3.1,输出下列指示加装
sudo rpm -Uvh https: //packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpmsudo yum install dotnet-sdk -3.1
加装git
sudo yum install git四、新建自动构建各项任务
进入 Dashboard->新建各项任务,输出各项任务名称,然后选择流水线。
General配置
配置构建触发器
配置流水线
点击Credentials 右下方的添加按钮,添加用作拉取代码用的身份验证凭据。
需要注意的是:如果采用git ssh 协议(也就是格式为git开头的仓储地址),则添加身份验证凭据的这时候,凭据类型只支持:Username with password (用户名和密码验证)、SSH Username with private key(用户名和私钥验证),用户名就是gitee的登入账号。
创建身份验证凭据秘钥前,需要将伺服器登入用户先切换到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
gitee上添加公钥后,在伺服器上执行下列指示
ssh -T [email protected]
通过执行下列指示读取ssh身份验证私钥内容,并输出到 jenkins 身份验证凭据的下列位置。
cat ~/.ssh/id_ed25519
添加身份验证凭据后,按照下图配置。
在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技能
点赞和在看就是最大的支持❤️