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的命令有所了解,当然融会贯通更好,但是我们每个人的精力有限,有些工具或者语言可以不用深入了解,好了今天的分享到这里了,谢谢大家的观看!

 

posted @   冼润伟  阅读(838)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示