固镇网站建设哪家好?,钻磊二级域名分发,广告设计与制作专业需要艺考吗,网站开发职能#xff08;一#xff09;简介
Drone 是一个基于Docker容器技术的可扩展的持续集成引擎#xff0c;用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行#xff0c;使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件一简介
Drone 是一个基于Docker容器技术的可扩展的持续集成引擎用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件将代码推送到 git 仓库Drone就能够自动化的进行编译、测试、发布。可以与Docker完美集成。
drone官方文档
二持续部署概述
持续部署是能以自动化方式频繁而且持续性的将软件部署到生产环境。使软件产品能够快速迭代。
平常部署项目时都是手动进行部署流程如下 #mermaid-svg-UGqj2eqotgfvgq3T {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UGqj2eqotgfvgq3T .error-icon{fill:#552222;}#mermaid-svg-UGqj2eqotgfvgq3T .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UGqj2eqotgfvgq3T .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-UGqj2eqotgfvgq3T .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UGqj2eqotgfvgq3T .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UGqj2eqotgfvgq3T .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UGqj2eqotgfvgq3T .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UGqj2eqotgfvgq3T .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UGqj2eqotgfvgq3T .marker.cross{stroke:#333333;}#mermaid-svg-UGqj2eqotgfvgq3T svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UGqj2eqotgfvgq3T .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-UGqj2eqotgfvgq3T .cluster-label text{fill:#333;}#mermaid-svg-UGqj2eqotgfvgq3T .cluster-label span{color:#333;}#mermaid-svg-UGqj2eqotgfvgq3T .label text,#mermaid-svg-UGqj2eqotgfvgq3T span{fill:#333;color:#333;}#mermaid-svg-UGqj2eqotgfvgq3T .node rect,#mermaid-svg-UGqj2eqotgfvgq3T .node circle,#mermaid-svg-UGqj2eqotgfvgq3T .node ellipse,#mermaid-svg-UGqj2eqotgfvgq3T .node polygon,#mermaid-svg-UGqj2eqotgfvgq3T .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UGqj2eqotgfvgq3T .node .label{text-align:center;}#mermaid-svg-UGqj2eqotgfvgq3T .node.clickable{cursor:pointer;}#mermaid-svg-UGqj2eqotgfvgq3T .arrowheadPath{fill:#333333;}#mermaid-svg-UGqj2eqotgfvgq3T .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UGqj2eqotgfvgq3T .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UGqj2eqotgfvgq3T .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-UGqj2eqotgfvgq3T .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-UGqj2eqotgfvgq3T .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UGqj2eqotgfvgq3T .cluster text{fill:#333;}#mermaid-svg-UGqj2eqotgfvgq3T .cluster span{color:#333;}#mermaid-svg-UGqj2eqotgfvgq3T div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UGqj2eqotgfvgq3T :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} push代码到git 服务器上拉取代码 使用代码打包镜像 推送镜像仓库 服务器拉取新镜像 停止和移除旧容器 启动新容器 这一整套部署步骤枯燥又费时。持续部署就是使用工具自动处理整套步骤。代码在提交之后自动执行整套流程将项目部署到生产环境省去繁琐的人工操作。
持续部署整套流程本质上是一个极其简单的东西。可以拆解为两个阶段
打包阶段 拉取代码 — 编译项目 — 镜像打包 — 推送镜像仓库 部署阶段 SSH 连接服务器 — 拉取新镜像 — 停止和移除旧容器 — 启动新容器
未使用自动化部署工具时也可以使用 shell脚本实现半自动化下面就用drone实现上面的流程步骤
三drone的构成与安装
Drone 应用由 Server服务器 和 Runner执行器 两种服务构成。
Server服务器 主要负责管理和展示 Runner执行器 主要负责执行操作。Server服务它是一个守护进程应用并且拥有Web管理界面。它通过Webhook对接Git Server。解析Git Repository根目录下的.drone.yml文件并以轮询的形态查找需要执行的Pipelines路由并管理Runners。Runner执行器 是真正执行持续部署操作服务
在安装drone前得先配置一下gitee仓库的权限 gitee配置示例这里使用gitee仓库你也可以使用gitlabgithub等等官方文档都有 需要注意的是按照官方文档里 应用回调地址 后面应该还要加上login(https://drone.example.com/login)点击创建成功后可以得到Client ID和Client Secret这个在创建drone server服务的时候需要
创建drone server服务
docker run \--volume/root/docker/drone:/data \--envDRONE_GITEE_CLIENT_ID******* \--envDRONE_GITEE_CLIENT_SECRET*******\--envDRONE_RPC_SECRET5648b4b6160f75a1bf7b455ae8457be0 \--envDRONE_SERVER_HOSTip:port \--envDRONE_SERVER_PROTOhttp \--envDRONE_USER_CREATEusername:你的gitee用户名,admin:true \--publish8888:80 \--restartalways \--detachtrue \--namedrone \drone/drone:2DRONE_GITEE_CLIENT_ID 你的gitee Client ID DRONE_GITEE_CLIENT_SECRET 你的gitee Client Secret DRONE_RPC_SECRETserver与runner身份验证的共享密钥用openssl rand -hex 16命令创建的一个密钥 DRONE_SERVER_HOSTdrone server的ip和端口域名也可以 DRONE_USER_CREATE为drone创建管理员用户这样在使用gitee第三方登陆时用户就有了管理员的权限
创建runner服务
docker run --detach \--volume/var/run/docker.sock:/var/run/docker.sock \--envDRONE_RPC_PROTOhttp \--envDRONE_RPC_HOSTip:port \--envDRONE_RPC_SECRET5648b4b6160f75a1bf7b455ae8457be0 \--envDRONE_RUNNER_CAPACITY2 \--envDRONE_RUNNER_NAMEmy-first-runner \--publish3000:3000 \--restartalways \--namedrone-runner \drone/drone-runner-docker:1–volume/var/run/docker.sock:/var/run/docker.sock 将docker守护进程的socket挂载到runner里runnner既可以使用宿主机的docker资源了 DRONE_RPC_HOSTdrone的server服务的ip和端口 DRONE_RUNNER_CAPACITYrunner可同时执行pipeline的数量,默认好像就是2 DRONE_RUNNER_NAMEdocker runner 名称 –publish3000:3000 这里映射这个端口的作用暂时还不清楚
创建完成后访问drone server的服务 点击登陆跳转到gitee登陆授权的页面 点击同意授权就会以gitee的用户名登陆drone然后就可以看见自己在gitee上托管的仓库了 找到自己想自动化构建的仓库然后点击激活 勾选Trusted选项如果没有该选项可能是在创建drone server 服务是没有创建管理员用户导致的,该选项如果没有勾选的话可能会有权限问题
现在仓库就已经激活了如果想取消drone自动构建可以点击左下角的disable
四自动化构建逻辑编写
要实现docker runner帮我们自动化构建还有一个核心的步骤就是我们的git仓库的根目录下必须有一个.drone.yml文件可以简单的理解为 .drone.yml 配置文件相当于一个 .sh 文件自动化构建和部署的操作配置在这个文件中交给 Drone runner执行。 gitee仓库链接
所以最核心的就是.drone.yml文件的编写可以先整一个简单的yml文件
kind: pipeline # kind 属性定义了对象的种类。此示例定义了一个管道对象。
type: docker # type 属性定义管道的类型。此示例定义了一个 Docker 管道其中每个管道步骤都在 Docker 容器内执行。
name: default # name 属性定义了管道的名称。您可以为您的项目定义一个或多个管道steps: # 步骤部分定义了一系列串行执行的管道步骤。如果管道中的任何步骤失败管道将立即退出- name: greeting # name 属性定义管道步骤的名称image: alpine # image 属性定义了一个执行 shell 命令的 Docker 镜像。可以使用来自任何 DockerHub 中的任何 Docker镜像。commands: # commands 属性将在 Docker 容器内执行的 shell 命令列表定义为容器入口点。如果任何命令返回非零退出代码则管道步骤将失败。- echo hello- echo world上面kind定义了该文件是一个pipeline对象也有其他类型但自动化构建流程这里选择pipeline即可type除了docker类型还有ssh类型就是使用ssh远程其他主机执行一些编译配置命令还有exec类型就是在当前runner主机上执行一些命令上面文件只定义了一个pipeline流程一个.drone.yml文件里可以定义多个pipeline它们相互独立同时执行但也可以绑定依赖关系比如有a b两个pipeline可以使用 depends_on配置参数让b pipeline在a pipeline后执行并且pipeline还可以用trigger参数设置触发条件比如说只有git tag改变时才执行某个pipeline等等 具体可以参考官方pipeline文档
回到上面的配置文件每一个pipeline 可以有多个stepssteps之间按照顺序执行有一个出错就会中断整个pipeline的执行流程这里的流程是先拉取 git仓库里最新代码这一步是默认的然后拉取对应的docker镜像然后运行docker镜像并以commands里的命令覆盖docker images的entrypoint当下一次push代码时就可以看到如下构建过程 下面的配置文件先构建docker镜像推送到docker仓库然后使用webhook通知通知过后部署docker服务然后再使用webhook进行通知 这里使用webhook通知将信息发送到钉钉群组里webhook本质上就是发送post请求所以这里使用一个curl的docker镜像发送webhook通知
kind: pipeline # kind 属性定义了对象的种类。此示例定义了一个管道对象。
type: docker # type 属性定义管道的类型。此示例定义了一个 Docker 管道其中每个管道步骤都在 Docker 容器内执行。
name: default # name 属性定义了管道的名称。您可以为您的项目定义一个或多个管道steps: # 步骤部分定义了一系列串行执行的管道步骤。如果管道中的任何步骤失败管道将立即退出- name: 构建docker镜像image: plugins/dockersettings:repo: bocai123/nginx_demoauto_tag: truedockerfile: ./Dockerfileusername:from_secret: docker_usernamepassword:from_secret: docker_password- name: 镜像构建完成通知 # name 属性定义管道步骤的名称image: curlimages/curl # image 属性定义了一个执行 shell 命令的 Docker 镜像。您可以使用来自任何 DockerHub 中的任何 Docker镜像。environment:message: 镜像构建完成通知webhook_url:from_secret: webhook_urlcommands: # commands 属性将在 Docker 容器内执行的 shell 命令列表定义为容器入口点。如果任何命令返回非零退出代码则管道步骤将失败。- ./notify.sh #通知脚本when:status: #成功与失败都会执行该步骤- success- failure- name: 部署image: appleboy/drone-sshsettings:host: #远程连接的host ipfrom_secret: hostusername: #用户名from_secret: usernamepassword: #密码from_secret: passwordport: 22script: #部署执行动的命令- echo 开始部署- docker rm -f nginx_demo- docker pull bocai123/nginx_demo- docker run --rm -d --name nginx_demo -p 7777:80 bocai123/nginx_demo- echo 部署成功- name: 部署完成通知 # name 属性定义管道步骤的名称image: curlimages/curl # image 属性定义了一个执行 shell 命令的 Docker 镜像。您可以使用来自任何 DockerHub 中的任何 Docker镜像。environment:message: 部署完成通知webhook_url:from_secret: webhook_urlcommands: # commands 属性将在 Docker 容器内执行的 shell 命令列表定义为容器入口点。如果任何命令返回非零退出代码则管道步骤将失败。- ./notify.sh #通知脚本when:status: #成功与失败都会执行该步骤- success- failure配置文件中from_secret就是在web管理页面配置的键值
下面是该配置文件对应的构建过程 钉钉也获取到了通知
五结语
至此一个简单的自动化构流程就完成了drone还有很多酷炫的操作比如多pipeline配置以trigger的使用等等如果有什么错误的地方还请大家批评指正。最后希望小伙伴们都能有所收获。写这些仅记录自己学习使用drone的过程