利用drone ci自动化部署静态博客的完整步骤

目录
  • 前言
  • 准备
  • 安装drone ci
    • 1、docker-compose配置文件
    • 2、docker-compose配置文件主要参数详解
      • drone server
      • DRONE_SERVER_PROTO和DRONE_SERVER_HOST
      • DRONE_RPC_SECRET
      • DRONE_USER_CREATE
      • DRONE_DATABASE_DRIVER
      • DRONE_DATABASE_DATASOURCE
      • DRONE_GITEE_CLIENT_ID和DRONE_GITEE_CLIENT_SECRET
      • drone runner
    • 3、执行部署
  • 进入管理界面
  • 添加.drone.yml文件
  • 总结

前言

一直想自动化部署博客,但一直没有实施计划,直到最近有时间,就搞了起来。ci/cd的工具很多,我想drone ci应该是一款非常适合前端的工具,简单,轻量级,基于docker,支持主流代码托管网站,比如github,gitee,gitlab等等。

准备

我们需要一个已备案的域名和服务器,并申请好ssl证书,用于https证书。我是使用腾讯云的轻量级服务器,大家可以自行选择。至于域名备案和ssl证书申请,各个平台大同小异,大家按照其文档说明弄,应该不会有太多问题,就不一一赘述了。

在有了服务器后,我们需要安装docker和docker-compose,这样我们直接运行docker-compose配置文件就可以轻松安装好drone ci。本文主要是讲解drone ci,所以docker和docker-compose的安装和使用,大家可以自行学习,在此当做默认已经安装。

代码托管网站使用了gitee码云。

安装drone ci

1、docker-compose配置文件

通过docker-compose配置文件可以轻松安装drone ci,新建一个docker-compose.yml文件,内容如下

version: "3.7"
# 创建自定义网络
networks:
  drone:
    # external: false
    driver: bridge
services:
  # 数据库服务
  db:
    image: postgres:latest
    container_name: drone_db
    restart: always
    networks:
      - drone # 加入到drone网络
    ports:
      - "8081:5432" # 8081为容器暴露到服务器的端口,5432为容器内改应用的端口
    environment:
      - POSTGRES_USER=username # PGSQL默认用户名
      - POSTGRES_PASSWORD=password # PGSQL默认密码
      - POSTGRES_DB=db_name # PGSQL默认数据库的名字
    volumes:
      - /volumes/drone/db:/var/lib/postgresql/data # 数据卷,前者为服务器真实位置,后者为改应用在容器内的位置
  # Drone Server 服务
  server:
    image: drone/drone:latest
    container_name: drone_server
    restart: always
    networks:
      - drone # 加入到drone网络
    ports:
      - "7929:80"
      - "4443:443"
    environment:
      - DRONE_SERVER_PROTO=https # 访问协议,创建webHooks和重定向
      - DRONE_SERVER_HOST=xxxx.com # 主机名称,创建webHooks和重定向
      - DRONE_RPC_SECRET=xxxxxxxxx # 与 drone runner 通讯的密钥
      - DRONE_USER_CREATE=username:xxxxxx,admin:true # 管理员账户
      - DRONE_DATABASE_DRIVER=postgres # 数据库类型
      - DRONE_DATABASE_DATASOURCE=postgres://username:password@db/db_name?sslmode=disable # 数据库连接
      - DRONE_GIT_ALWAYS_AUTH=true # 使用 oauth 身份验证信息拉取代码
      - DRONE_GITEE_CLIENT_ID=xxxxxxxx # GITEE 客户端 id
      - DRONE_GITEE_CLIENT_SECRET=xxxxxxxxxxxx # GITEE 客户端 密钥
      - DRONE_GITEE_SKIP_VERIFY=false # 禁用 GITEE 链接时 tls 验证

    volumes:
      - /volumes/drone/server:/data
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - db
  # Drone Docker Runner
  runner:
    image: drone/drone-runner-docker:latest # 目前drone-runner-docker最新版本为 1.8.0
    container_name: drone_runner
    restart: always
    networks:
      - drone # 加入到drone网络
    ports:
      - "7930:3000"
    environment:
      - DRONE_RUNNER_NAME=docker-runner
      - DRONE_RUNNER_CAPACITY=10 # 限制runner可执行的并发管道数量
      - DRONE_RPC_PROTO=https # 访问drone server 协议
      - DRONE_RPC_HOST=xxxxx.com # 访问drone server 服务器地址
      - DRONE_RPC_SECRET=xxxxxxx # 与 drone server 通讯的密钥
      - DRONE_UI_USERNAME=username # Drone Runner 的 UI 用户账号
      - DRONE_UI_PASSWORD=password # Drone Runner 的 UI 用户密码
      # - DRONE_RUNNER_NETWORKS=drone_net
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    depends_on:
      - server

2、docker-compose配置文件主要参数详解

配置文件里一些常用参数在上面的注释里已经有解释,这里只讲解drone server和drone runner的配置项

drone server

基础的镜像版本,端口设置,网络设置不再赘述,这些都是docker compose最常见的配置,主要是environment里面的参数说明

DRONE_SERVER_PROTO和DRONE_SERVER_HOST

这个参数是在代码托管网站的配置里设置的,详细配置会在后面说明,每个代码托管网站的配置大同小异,这个网址是drone ci的管理网站,可以查看drone ci运行的详细流程等

DRONE_RPC_SECRET

这个参数是drone server与drone runner通讯的秘钥,在服务器使用OpenSSL生成,生成方法如下

$ openssl rand -hex 16

DRONE_USER_CREATE

这个参数非常重要,为drone ci管理网站的登录账号,这个账号名一定要与代码托管网站的用户名一致,这样才能登录管理员账号,如果无法登录管理员账号,将无法授权拉取代码时的权限,运行时将会报错

DRONE_DATABASE_DRIVER

数据库类型,就是上面自己配置的数据库

DRONE_DATABASE_DATASOURCE

postgres://username:password@db/db_name?sslmode=disable,这个参数中username为数据设置的用户名,password为数据库登录密码,db/db_name中db为固定值,db_name为创建的表名称,这些参数都是上面数据库的配置参数

DRONE_GITEE_CLIENT_ID和DRONE_GITEE_CLIENT_SECRET

这两个参数是在代码托管网站获取,我使用的是gitee码云。如何申请?

1、注册码云

2、创建OAuth应用

进入码云设置中心,找到第三方应用

点击创建应用

填写创建应用所需信息

创建成功后,进入应用详情

其中的Client ID和Client Secret便是DRONE_GITEE_CLIENT_ID和DRONE_GITEE_CLIENT_SECRET

drone runner

DRONE_RPC_PROTO和DRONE_RPC_HOST

和DRONE_SERVER_PROTO,DRONE_SERVER_HOST相同

DRONE_UI_USERNAME和DRONE_UI_PASSWORD

改账号信息为drone runner的账号信息,不同于drone server,drone runner的管理界面主要查看server运行的一些信息,而drone server的管理界面是管理应用的

3、执行部署

在docker-compose配置文件的当前目录下,执行docker-compose up,drone ci就会自动安装

进入管理界面

如果安装没有报错,那么进入浏览器,输入你配置过的DRONE_SERVER_HOST(前提是这个域名已经通过解析),便能进入

登录成功后进入主页面,此时会同步你代码托管网站下的所有项目

点击未激活项目,会直接进入到setting配置页

点击Activate Repository按钮,激活项目,激活项目便会进入配置详情页

如果是管理员登入,project settings中的5个选项都会出现,不然只会出现第一个选项,打开第二个选项Trusted

最后save changes一下,保存更改,此时项目即为激活项目

添加.drone.yml文件

到此整个drone ci的服务已经配置完成,那么如何持续部署我们的项目呢?对于cd有一定了解的人,都知道当我们git push的时候项目会通过webhooks通知ci服务,然后就会拉取代码,重新部署代码,从而完成一次ci/cd,这其中一个重要的配置文件起到重要作用,通常会向我们的项目中添加一个yaml文件,ci服务会读取这个文件,从而执行一个流程,完成部署。在drone ci中会向项目的根目录添加一个.drone.yml文件,这个文件如何编写,我以我的blog项目为例,下面是其配置文件内容

kind: pipeline # 定义一个管道
type: docker # 当前管道的类型
name: test # 当前管道的名称

volumes: # 声明数据卷(此为服务器中的实际目录)
  - name: node_modules # 数据卷名称
    host: # Host Volume
      path: /volumes/drone/volumes/blog/node_modules # 宿主机目录    #绝对路径
  - name: deploy_path
    host:
      path: /workspace/blog

clone:
  disable: false # 启用代码拉取

steps: # 定义管道的执行步骤
  - name: deploy # 步骤名称
    image: node:16.13.2 # 当前步骤使用的镜像
    depends_on: [clone] # 依赖的步骤
    volumes: # 挂载数据卷(此为容器内的目录)
      - name: node_modules # 数据卷名称
        path: /drone/src/node_modules # 容器内目录 绝对路径
      - name: deploy_path
        path: /drone/src/html
    commands: # 当前步骤执行的命令
      - pwd # 查看当前目录
      - npm config set registry https://registry.npm.taobao.org # 切换淘宝镜像
      - npm install # 安装node_modules包
      - npm run build # 执行编译
      # - rm -fr ./blog
      - ls /drone/src
      - cp -r ./public/* ./html

  - name: dingtalk-push
    image: lddsb/drone-dingtalk-message
    depends_on: [deploy]
    settings:
      token: xxxxxxxxxxxxxxxxxxxxxxxxxxx
      type: markdown
      message_pic: true
      sha_link: true
    when:
      event: [push]
      status: [success, failure]

.drone.yml文件的编写较为复杂,具体请查询drone文档。其中dingtalk-push,是部署完成后通知钉钉,钉钉机器人的配置请查看钉钉的文档,该插件的详细配置请查阅该插件文档

总结

到此这篇关于利用drone ci自动化部署静态博客的文章就介绍到这了,更多相关drone ci自动化部署博客内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • DevOps,CI,CD,自动化简述

    前言: 随着企业应用的不断迭代,不断扩大,应用的发布发布可能涉及多个团队,如pc端,手机端,小程序端等等.应用发布也就成为了一项高风险,高压力的超过过程,以及应用的开发迭代的沟通,测试成本也大大的变得不可控了.这时候就出现了DevOps管理理念,CI,CD以及强大的部署自动化手段确保部署任务的可重复性.减少部署出错的可能性.下面简单的描述一下这四者的基本概念. DevOps 什么是DevOps? DevOps(Development和Operations的组合词)是一组过程.方法与系统的统称,用

  • 利用drone ci自动化部署静态博客的完整步骤

    目录 前言 准备 安装drone ci 1.docker-compose配置文件 2.docker-compose配置文件主要参数详解 drone server DRONE_SERVER_PROTO和DRONE_SERVER_HOST DRONE_RPC_SECRET DRONE_USER_CREATE DRONE_DATABASE_DRIVER DRONE_DATABASE_DATASOURCE DRONE_GITEE_CLIENT_ID和DRONE_GITEE_CLIENT_SECRET d

  • 使用vuepress搭建静态博客的示例代码

    什么是vuePress vuePress是以vue驱动的主题系统的简约静态网站生成工具(拥有自己的默认主题). veuPress由vue,vue-router,webpack驱动的单页面应用,每个markdonw文件都使用markdonw-it编译为html文件,然后作为vue组件的模板来处理. 中文官网 VuePress仓库 项目地址 VuePress 有很多优点: 界面简洁优雅(个人感觉比 HEXO 好看) 容易上手(半小时能搭好整个项目) 更好的兼容.扩展 Markdown 语法 响应式布

  • Vuepress 搭建带评论功能的静态博客的实现

    vuepress 是 Vue 驱动的静态站点生成工具 本文仅介绍,搭建静态博客的过程,具体教程及文档请点击进入 vuepress中文网 点击查看项目代码 vuepress初始化 下面初始化 # 将 github 新创建的仓库克隆到本地 git clone git@github.com:zhb333/readme-blog.git # 进入项目 cd readme-blog # npm 初始化, 按照提示回车 npm init # 安装 vuepress npm i vuepress -D # 安

  • Flask入门教程实例:搭建一个静态博客

    现在流行的静态博客/网站生成工具有很多,比如 Jekyll, Pelican, Middleman, Hyde 等等,StaticGen 列出了目前最流行的一些静态网站生成工具. 我们的内部工具由 Python/Flask/MongoDB 搭建,现在需要加上文档功能,写作格式是 Markdown,不想把文档放到数据库里,也不想再弄一套静态博客工具来管理文档,于是找到了 Flask-FlatPages 这个好用的 Flask 模块.熟悉 Flask 的同学花几分钟的时间就可以用搭建一个简单博客,加

  • 用Pelican搭建一个极简静态博客系统过程解析

    我一直建议每个开发者都要有写博客记笔记的习惯,一来可以沉淀知识,二来可以帮助别人,我使用过很多博客平台,也用Python开发过博客系统,就这么个东西折腾好几年,一直找不到理想的产品,直到我用Pelican之前. Pelican 是基于Python实现的开源静态博客系统,所谓静态博客系统就是无需数据库,每一篇文章会事先渲染成HTML静态文件,访问速度非常快.所以今天给大家介绍下怎么使用Pelican. 使用Pelican 你需要了解一点git,熟悉基本的Linux shell 命令,懂一点Pyth

  • spring boot 项目利用Jenkins实现自动化部署的教程详解

    本文主要讲解利用Jenkins实现spring boot项目的自动化部署: •1.后台技术架构:Spring boot 1.4.2.RELEASE +Mybatis 3+ Redis+ Mysql 5.6+JDK8; •2.代码构建工具:maven 3.3; •3.源代码托管工具:Gitlab; •4.利用maven的docker插件打包成docker镜像在docker容器中部署项目: •5.服务器是阿里云的ECS; 一.安装Jenkins 1.阿里云服务器安装Jenkins方式见如下链接地址

  • 利用django创建一个简易的博客网站的示例

    一.页面实现 index.html base.html post.html header.html footer.html <!-- index.html--> {% extends 'base.html' %} <html lang="en"> <head> <meta charset="UTF-8"> <title>个人博客</title> </head> <body>

  • 使用docker compose一键部署WordPress博客的方法

    目录 1.创建wordpress项目目录 2.创建docker-compose.yml配置文件 3.一键启动wordpress项目 4.查看相关信息参数 5.配置wordpress 1.创建wordpress项目目录 [root@docker ~]# mkdir wordpress [root@docker ~]# cd wordpress/ [root@docker wordpress]# 2.创建docker-compose.yml配置文件 [root@docker wordpress]#

  • Docker实现从零开始搭建SOLO个人博客的方法步骤

    目录 一.环境准备 二.安装Docker 三.安装mysql主从数据库 3.1.mysql环境准备 3.2.启动mysql主库从库 3.3.登陆mysql主库 3.4.登陆mysql从库 3.5.主从参数说明 四.搭建solo博客 五.Nginx实现反向代理solo博客 六.成果展示 一.环境准备 要想在公网访问你的博客,首先你需要一台云服务器,也就是租用各大云厂商的服务器,像我就是花68块买了一年青云的1核2G的服务器,你现在看到的博客就是在这台服务器上,最好也购买一个专属的域名.一年十几就够

  • springboot docker jenkins 自动化部署并上传镜像的步骤详解

    springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1.前期准备工作不说了 2.在项目根目录下新建Dockerfile Dockerfile文件内容为: #基础镜像 FROM openjdk:12 #作者 MAINTAINER demo <demo@qq.com> VOLUME /tmp #指定配置文件,以及jar包在服务器上的路径 ENTRYPOIN

随机推荐