|
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.生产密钥
2.查看密钥
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的命令有所了解,当然融会贯通更好,但是我们每个人的精力有限,有些工具或者语言可以不用深入了解,好了今天的分享到这里了,谢谢大家的观看!
来源:https://www.cnblogs.com/weirun/p/17115040.html |