DevOps之自动部署,net6+jenkins+docker+gitee来实现自动部署
devops是敏捷开发升级版,他主要解决的是开发跟运维的协助性问题,通过自动化的方式,减少人工错误,从而提升人与人之间的沟通和犯错成本,及部署效率;由于DevOps是一组过程、方法与系统的统称,所以我来讲讲DevOps的持续集成/持续构建实现方式,持续集成/持续构建是实现DevOps理念的一种工具及思想之一,简单来说就是通过自动化部署来减少人员工作量的部署工具,所以市面上各种持续集成产品应运而生,如jenkins,gitee企业版,coding等;市面上还有很多收费的持续集成工具都非常好用及简单,而且价格也实惠;但今天我讲的主要是jenkins工具的解决方案;
概念:
1.jenkins
是一款开源的持续集成工具,可以用于日常管理服务的发布,能快速发布到线上进行测试
2.shell
是一种脚本语言,可用于脚本代码,控制linux系统,在持续集成工具上能起到自动发布的主要作用()
3.ansible
是一种批量执行命令的工具,在微服务存在多个服务执行同一个脚本时,就可以通过此工具达到批量的作用,本文不选择安装
流程:
拉取项目文件→生成项目镜像→远程登录项目服务器→拉取镜像
一、准备工作:
1.安装docker(自行百度安装)
2.通过docker安装jenkins;注意由于jenkins是安装在docker的,而我们运行的docker脚本,所以需要配置jenkins,插件(https://blog.csdn.net/zsd498537806/article/details/81132522)
最后启动时还要挂载/bin/sh的目录,作用是为了在docker内运行shell;(自行百度安装)
3.远程服务器开启免密登录
二、配置免登录
1.生产密钥
ssh-keygen
2.查看密钥
ll /root/.ssh
3.密钥管理
2.3 免密登录设置:
2.3.1 免密登录文件说明
id_rsa是私钥
id_rsa.pub是公钥,需要把公钥发送给被管主机
2.3.2 使用模式:
ssh-copy-id [-i [identity_file] ] [user@]machine
-i:指定公钥文件
把本地的ssh公钥文件安装到远程主机对应的账户下:
ssh-copy-id user@server(命令语句,下面是例子)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
三、docker安装jenkins
3.1拉取jenkins镜像
docker pull jenkins/jenkins
3.2安装完毕后,通过docker启动jenkins
docker run -d -u 0 -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /var/jenkins_home:/var/jenkins_home -v /bin/sh:/bin/sh -p 8080:8080 jenkins/jenkins
3.3启动完毕后后,我们进入正常的jenkins配置流程,最后我们进入到下面的界面
3.4接下来我们来配置gitee,首先我们在jenkins下载gitee
3.5接下来我们只需要新增一个jenkins项目,然后设置gitee
3.6去gitee生成令牌
3.7上面gitee私人令牌都可以根据提示之间生成即可
3.8 最后设置shell执行及执行命令
3.9这个远程构建只是通过docker镜像的方式来实现远程构建,当然也可以通过git来在远程服务器拉取文件后构建dockerfile来发布,值得注意的是,上面出现了明文,在生产环境中是不允许,所以我们尽量避免这样的脚步;最后点击保存。
四、项目的dockerfile配置
接下来我们要来配置net6项目,我们需要在net6项目新建一个dockerfile文件,文件内容如下,最后把项目上传到gitee。
1 FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base 2 3 RUN echo "deb http://mirrors.aliyun.com/debian stretch main contrib non-free \ 4 deb-src http://mirrors.aliyun.com/debian stretch main contrib non-free \ 5 deb http://mirrors.aliyun.com/debian stretch-updates main contrib non-free \ 6 deb-src http://mirrors.aliyun.com/debian stretch-updates main contrib non-free \ 7 deb http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free \ 8 deb-src http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free \ 9 deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib \ 10 deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" > /etc/apt/sources.list 11 12 RUN apt-get update 13 RUN apt-get install -y libgdiplus 14 RUN apt-get install -y fontconfig 15 16 WORKDIR /app 17 EXPOSE 8000 18 19 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build 20 WORKDIR /src 21 COPY ["WebApplication1.csproj", "WebApplication1/"] 22 23 COPY . . 24 WORKDIR "/src" 25 RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build 26 27 FROM build AS publish 28 RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish 29 30 FROM base AS final 31 32 #FROM harbor.xhyun.vip/k8s-dev/xuehua-base:latest AS final 33 WORKDIR /app 34 COPY --from=publish /app/publish . 35 #RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone 36 RUN unlink /etc/localtime 37 RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 38 ENTRYPOINT ["dotnet", "WebApplication1.dll"]
4.1最后我们在jenkins进行构建
4.2 可以看到构建成功了,接下来我们看看我们的远程服务器是否成功发布了net6项目,如下图可以看出确实成功发布了
总结:
到这里其实我们实现自动化部署是一个非常简单的事情,但正式环境下,我们就要特别注意服务器的安全问题了。在自动化部署下,其实在实现自动化时我们需要对shell脚本和dockerfile的命令有所了解,当然融会贯通更好,但是我们每个人的精力有限,有些工具或者语言可以不用深入了解,好了今天的分享到这里了,谢谢大家的观看!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)