常见SEOgit云服务器Asp.NetCore jenkins实现自动化发布
服务器 托管 阿里云
一、安装Jenkins
服务器是Linux CentOS 7 ,使用SSH 登录云服务器后,输入以下命令安装jenkins.
sudowget -O /etc/yum.repos.d/jenkins.repo \ https://pkg.jenkins.io/redhat-stable/jenkins.reposudorpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.keysudoyum upgradeAdd required dependencies for the jenkins packagesudoyum install java-11-openjdksudoyum install jenkinssudosystemctl daemon-reloadsystemctlenablejenkinssudosystemctl 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/libcd/var/cache/jenkins/war/WEB-INF/libwget https://repo1.maven.org/maven2/javax/ws/rs/javax.ws.rs-api/2.1.1/javax.ws.rs-api-2.1.1.jarchmoda+xjavax.ws.rs-api-2.1.1.jarsystemctlrestart jenkins按照以上方法试了后,我这边还是不行,可能是我那个流程没有操作对。
然后安装Jersey 2 API后,重启jenkins发现可行(我这边jenkins版本比较新)
三、服务器相关编译环境配置
安装.net core sdk.用于编译,我这边用的dotnet版本还是.net core 3.1,输入以下命令安装sudo rpm -Uvhhttps://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpmsudo yuminstalldotnet-sdk-3.1安装gitsudoyum install git四、新建自动构建任务
进入 Dashboard->新建任务,输入任务名称,然后选择流水线。
云服务器怎么用的
General配置
配置构建触发器
配置流水线
点击Credentials 右下方的添加按钮,添加用于拉取代码用的身份验证凭据。
需要注意的是:如果使用git ssh 协议(也就是格式为git开头的仓储地址),则添加身份验证凭据的时候,凭据类型只支持:Username with password (用户名和密码验证)、SSH Username with private key(用户名和私钥验证),用户名就是gitee的登录账号。
创建身份验证凭据秘钥前,需要将服务器登录用户先切换到jenkins用户,不然以root用户创建的秘钥文件,将无法拉取代码(存在权限问题),切换到jenkins用户前,先执行以下命令,以便允许jenkins用户登录。
阿里云服务器 php
sudousermod -s /bin/bash jenkins切换到jenkins用户
sudosu - jenkins在服务器上输入以下命令创建身份验证凭据私钥,-C 后面的参数可以是任意内容,但通常用邮箱账号。
ssh-keygen -t ed25519 -C"xxxxx@xxxxx.com"生成后,服务器上输入以下命令读取公钥内容,然后将公钥内容复制到gitee指定项目的 管理->部署公钥管理->添加公钥中添加指定公钥,
cat ~/.ssh/id_ed25519.pubgitee上添加公钥后,在服务器上执行以下命令
ssh-T git@gitee.com通过执行以下命令读取ssh身份验证私钥内容,并输入到 jenkins 身份验证凭据的以下位置。
cat ~/.ssh/id_ed25519添加身份验证凭据后,按照下图配置。
在jenkins 服务器上执行以下命令,创建ssh 身份认证秘钥,并将公钥复制到应用服务器上,以便在编译成功后,直接复制dll到应用服务器上,而无需输入应用服务的登录密码,需要注意的是,创建秘钥前,先切换到jenkins用户账号。
sudosu - jenkinsssh-keygen -t rsa以下命令表示将jenkins所在服务器生成的公钥复制到应用服务器(因为~/.ssh/目录下已经有其他的秘钥,因此这边指定复制哪一个公钥)
ssh-copy-id-i ~/.ssh/id_rsa.pub root@115.159.114.65-p1200以上两个命令执行成功后,可以创建一个文本文件进行测试,看下是否能无需输入密码就可以复制文件到应用服务器。
cd~ touch test.txtecho"测试内容">> test.txt以下命令用于将jenkins服务器上用户主目录下的test.txt文件复制到应用服务器上用户主目录。
-P表示应用服务器的ssh登录端口(如果不是22,必须指定),-i 后面跟的是jekins服务器上生成的私钥文件。 scp -P1200-i ~/.ssh/id_rsa ~/test.txt root@115.159.114.65:~在项目的解决方案文件(.sln)同级目录下新建名称为jenkinsfile的文件,并输入以下脚本内容
pipeline { agent any stages { stage(build) { steps {echo开始拉取代码shgit pull origin dev:devecho切换到本地dev分支shgit checkout devecho当前工作目录及文件列表如下shpwdshls -aldir("${WORKSPACE}/BlogSys") {echo开始编译博客前端站点shdotnet publish ./BlogSys.csproj -c Release -r linux-x64 --no-restore} //WORKSPACE表示存放代码的根目录。 dir("${WORKSPACE}/BlogSysManagement"){echo开始编译博客后台站点shdotnet publish ./BlogSysManagement.csproj -c Release -r linux-x64 --no-restore} } } stage(deploy) { steps {echo开始发布流程,当前工作目录如下shpwdecho开始发布个人博客前端系统echo停止前端站点shssh -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表示复制目录下的所有文件及子目录以及子目录下的所有文件,也可以将这个文件夹打包压缩后再传输。 shscp -P 1200 -i ~/.ssh/id_rsa -r ./ root@115.159.114.65:/var/www/blogsys}echo重启前端站点//这里不能使用-t 选项,应该使用-T 或 -tt 代理,否则无法正确执行。 shssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -T "systemctl restart blogsys"echo开始发布个人博客后台管理系统echo停止后台站点shssh -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/"){ shscp -P 1200 -i ~/.ssh/id_rsa -r ./ root@115.159.114.65:/var/www/blogsysmgr}echo重启后台站点shssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -tt "systemctl restart blogsysmgr"echo系统发布成功} } } }完成以上步骤后就可以开始测试构建啦.
gitee+jenkins 实现代码自动发布流程大概的流程总结起来就是:提交代码到gitee->gitee通过Webhook钩子通知jenkins gitee插件->gitee插件触发构建(Gitee API V5 Token验证)->git插件拉取代码(通过SSH Username with Private key身份验证方式)->执行编译脚本->发布到应用服务器,另外需要注意的是 jenkins 默认是以jenkins用户来执行的,因此需要开通jenkins用户能执行bash的权限,以及创建git插件身份验证秘钥的时候一定要以jenkins用户登录去创建,否则要拉取代码的时候会出现权限问题。
欢迎点赞+转发+关注!大家的支持是我分享最大的动力!!!
登陆腾讯云服务器
推荐阅读
- 云 图片服务器对话阿里云大将:为何在深圳怼上腾讯? 2025-12-14 23:16:20
- 个人搭建云服务器中国公有云前三强(阿里、腾讯、金山)大PK:硝烟再起,高下立判 2025-12-14 23:06:11
- 云服务器是虚拟的吗阿里云vs腾讯云:谁更胜一筹? 2025-12-14 22:56:08
- 阿里云服务器租赁价格环境适应性研制实验室:从设计到验证,打造可靠产品的关键环节 2025-12-14 22:46:01
- 我的阿里云服务器支持AMD9005(最大128核) 全水冷散热——高频图形工作站AE450介绍 2025-12-14 22:35:55

