Jenkins集成.Net5


前言

集成.Net5项目到Jenkins中,Jenkins和.Net5项目都在容器中

一、Jenkins配置

1、创建项目

  1. 新建Item
  2. 选择Freestyle project(自由风格)

2、配置

  1. 源码管理
    操作:我使用的码云,直接填上码云地址,再新建Credentials选中即可。
  2. 构建触发器
    我勾选的Poll SCM,填的*/1 * * * *。这样每分钟就去检测,如果代码有提交就会构建

3、构建环境

4、构建

  1. 新增步骤,选择一类
    操作:我选择的是:Send files or execute commands over SSH
  2. SSH Server
    操作:需要提前创建好,这里选中就行
    详细:Manage Jenkins => System Configuration => Publish over SSH(需要先安装这个插件)
  3. Exec command
#复制代码到.net5容器挂载的目录中
\cp -r /home/jenkins/workspace/TeamPlayApi/* /root/dotnet/TeamPlayApi/app/TeamPlayApi
#让容器执行shell脚本,
docker exec -i 0ee7ddc90264 bash /publish/shell/start.sh
#重启容器(其实就是重启服务)
docker restart 0ee7ddc90264
exit 0

备注1:参数是-i不是-it,使用-t会报错
备注2:/home/start.sh是容器中的文件(我是将目录挂载到了服务器)

二、Jenkins命令+Shell脚本

方式1、docker容器重启时自动重启服务

前言

docker容器重启时,自动重启服务。所以在jenkins命令中,在编译生成可执行文件后,只需要重启容器就可以重启服务

1. Dockerfile

Dockerfile文件中指定了CMD,以CMD来运行服务

2. Jenkins命令

#复制代码到.net5容器挂载的目录中
\cp -r /home/jenkins/workspace/SteamApi/* /root/dotnet/SteamApi/app/SteamApi
#让容器执行shell脚本,
docker exec -i 0ee7ddc90264 bash /publish/shell/start.sh
#重启容器(其实就是重启服务)
docker restart 0ee7ddc90264
exit 0

3. start.sh脚本

#!/bin/bash
cd /publish/TeamPlayApi #进入到代码的目录
dotnet build --configuration Release #已release模式编译
\cp -r /publish/SteamApi/bin/Release/net5.0/* /publish #将编译好的DLL覆盖之前的DLL
exit #一定要加上,不然服务启动不了

方式2、start.sh脚本重启服务

流程间接

Jenkins远程连接进入到docker容器中,先复制代码,然后到容器中先停止服务,再编译代码,再重启服务

1. Jenkins命令

#复制代码
\cp -rf /var/jenkins_home/workspace/SteamApi/SteamApi/root/SteamApi/api
#容器中执行脚本
docker exec -i 5b948d967552 bash /api/SteamApi/start.sh
exit 0

3. start.sh脚本

SteamApi.dll时可执行文件,grep -v grep是用来过滤本身的影响

#!/bin/bash
ps -ef | grep SteamApi.dll | grep -v grep | awk '{print $2}' | head -n 1 | xargs kill -9 #杀掉进程
cd /api/SteamApi
dotnet build --configuration Release
cd /api/SteamApi/bin/Release/net5.0
dotnet SteamApi.dll
exit #一定要加上,不然服务启动不了

三、总结

1、我做了一件什么事?

  1. 在Docker中,将.Net5集成到了Jenkins中

2、这件事有什么用?

  1. 在开发过程中,我代码提交后,能直接部署(当前我是测试环境),省略了发布这一个过程。加快了开发效率。

3、出现了哪些问题?是否解决?是否明确了问题出现的根本原因?

  1. 使用cp命令复制项目代码时,发现项目代码中的文件夹没有复制过去
  2. 想使用dotnet命令去重启程序,发现找不到命令,不知道咋重启dll程序。最后直接重启容器,容器直接挂载了命令【CMD [“dotnet”, “TeamPlayApi.dll”]
  3. dotnet重启程序方式:①杀掉进程,在启动(直接启动会重复启动)②注册为服务,重启服务

4、学到了哪些知识点?

  1. 使用cp命令复制文件夹(文件夹内还有文件夹)到另外一个文件夹时,需要使用-r参数
  2. 在搭建整个流程时,我是直接全部正好在测试的。把start.sh脚本写好,jenkins命令写好。直接测试。每一步单独测试好会更顺畅,start.sh脚本写好之前,先测试每条命令。写好之后在测试start.sh脚本。每一步单独测试好后,整体花费时间会更少,效率会更高。
  3. grep -v命令排除输出。可以用于ps -ef | grep本来带来的影响

5、备注

同上一章大同小异

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值