Jenkins笔记(三)部署.Net Core Webapi项目
我的博客博客首页前言本次部署未不使用docker,而是采用拉取代码后编译运行的方式。下面先给张部署的流程图,再介绍部署的配置文件和可能存在的坑开始部署首先,进入Jenkins首页,选择新建一个任务,这里选择流水线:这里选流水线只是为了练习一下pipeline的语法和部署流程,起始选自由风格其实更简单选择pipeline之后什么都不用配置,只需要编写脚本即可,这里有两种写脚本的方式,第一种是直接在j
·
我的博客
前言
本次部署未不使用docker,而是采用拉取代码后编译运行的方式。
下面先给张部署的流程图,再介绍部署的配置文件和可能存在的坑
开始部署
首先,进入Jenkins首页,选择新建一个任务,这里选择流水线:
这里选流水线只是为了练习一下pipeline的语法和部署流程,起始选自由风格其实更简单
选择pipeline之后什么都不用配置,只需要编写脚本即可,这里有两种写脚本的方式,第一种是直接在jenkins上写,第二种是在项目中写sh文件,然后jenkins中只需要bash xxx.sh
运行脚本文件即可,可以根据自己的需要选一种,我这里直接用第一种方式,下面是全部的运行脚本:
pipeline {
agent any
stages {
stage('git')
{
steps {
echo 'clone from gitee'
sh '/usr/share/dotnet/dotnet --version'
git branch: 'dev', url: 'https://gitee.com/lizhenghaodamowang/CloudWorking.git'
echo 'clone finished'
}
}
stage('build')
{
steps
{
sh 'rm -rf ./bin/Debug/net5.0/*'
sh 'rm -rf /root/stickynotesbackend/*'
dotnetRestore project: './CloudWorkingBackend/CloudWorkingBackend.sln', sdk: 'dotnet5'
dotnetBuild project: './CloudWorkingBackend/CloudWorkingBackend.sln', sdk: 'dotnet5'
}
}
stage('kill process')
{
steps
{
sh '''
set +e
k_pid=`lsof -t -i:5000`
echo $k_pid
if [ $k_pid>0 ]
then
kill -9 $k_pid
fi
'''
}
}
stage('run')
{
steps
{
sh 'cp -rf ./CloudWorkingBackend/CloudWorkingBackend/bin/Debug/net5.0/* /root/stickynotesbackend/'
sh '''JENKINS_NODE_COOKIE=dontKillMe
cd /root/stickynotesbackend
nohup /usr/share/dotnet/dotnet /root/stickynotesbackend/CloudWorkingBackend.dll --urls="http://*:5000" >> /root/nohup.out &'''
echo 'run success'
}
}
}
}
上面的配置文件中有几个地方是需要注意的:
dotnetRestore
、dotnetBuild
命令是需要安装.Net SDK Support插件的- dotnet命令如果提示找不到的话,需要使用
/usr/share/dotnet/dotnet
替代 JENKINS_NODE_COOKIE=dontKillMe
一定要加这一句命令,否则在Jenkins的pipeline运行完后会自动杀掉子进程,导致webapi并没有运行起来,但是控制台结果是成功的- 服务器如果没有装sdk一定要装SDK,不是runtime
配置完后看构建日志是否正常,没有报错的情况下再通过ip,端口打开swagger界面看是否正常
过程中遇到的问题及解决方案
错误1:
/usr/share/dotnet/sdk/5.0.404/NuGet.targets(131,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/var/lib/jenkins/workspace/stickynoteswebbackend/CloudWorkingBackend/CloudWorkingBackend.sln]
/usr/share/dotnet/sdk/5.0.404/NuGet.targets(131,5): error : The SSL connection could not be established, see inner exception. [/var/lib/jenkins/workspace/stickynoteswebbackend/CloudWorkingBackend/CloudWorkingBackend.sln]
/usr/share/dotnet/sdk/5.0.404/NuGet.targets(131,5): error : The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot [/var/lib/jenkins/workspace/stickynoteswebbackend/CloudWorkingBackend/CloudWorkingBackend.sln]
.NET Command Completed - Exit Code: 1
如果直接在服务器上用dotnet restore一样的错误:
> dotnet restore
/usr/share/dotnet/sdk/3.1.101/NuGet.targets(123,5): error : Unable to load the service index for source https://api.nuget.org/v3/index.json. [/www/dotnet/xxx/xxx.csproj]
/usr/share/dotnet/sdk/3.1.101/NuGet.targets(123,5): error : The SSL connection could not be established, see inner exception. [/www/dotnet/xxx/xxx.csproj]
/usr/share/dotnet/sdk/3.1.101/NuGet.targets(123,5): error : The remote certificate is invalid according to the validation procedure. [/www/dotnet/xxx/xxx.csproj]
- 参考博客1:https://blog.skitisu.com/solve-dotnet-restore-nuget-invalid-certificate/
根据端口关闭进程
https://stackoverflow.com/questions/11583562/how-to-kill-a-process-running-on-particular-port-in-linux
更多推荐
已为社区贡献1条内容
所有评论(0)