Github 结合 Docker+Drone 实现自动部署

以下操作都基于阿某云下的服务器和域名,没有服务器和域名的能不能搞,我没试过!

安装Docker

在开始安装之前,需要安装 device-mapper-persistent-data 和 lvm2 两个依赖。

device-mapper-persistent-data 是 Linux 下的一个存储驱动, Linux 上的高级存储技术。 Lvm 的作用则是创建逻辑磁盘分区。这里我们使用 CentOS 的 Yum 包管理器安装两个依赖:

yum install -y yum-utils device-mapper-persistent-data lvm2
复制代码

依赖安装完毕后,我们将阿里云的 Docker 镜像源添加进去。可以加速 Docker 的安装。

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce -y
复制代码

安装完毕,我们就可以使用 systemctl 启动来启动 Docker 了。systemctl 是 Linux 的进程管理服务命令,他可以帮助我们启动 docker 

systemctl start docker
systemctl enable docker
复制代码

接着执行一下 docker -v ,这条命令可以用来查看 Docker 安装的版本信息。当然也可以帮助我们查看 docker 安装状态。如果正常展示版本信息,代表 Docker 已经安装成功。

image.png

配置 Github OAuth

docs.drone.io/server/prov…

image.png

image.png

image.png

image.png

image.png

Client ID 和 Client Secret需要复制存下来,Client Secret生成之后就隐藏起来了,所以最好复制粘贴到小本本上。

openssl 生成共享密钥

openssl rand -hex 16 
bea26a2221fd8090ea38720fc445eca6
复制代码

安装drone

docker pull drone/drone:2
复制代码

运行drone

docker run \ 
    --volume=/var/lib/drone:/data \ 
    --env=DRONE_GITHUB_CLIENT_ID=your-id \ #github里的id
    --env=DRONE_GITHUB_CLIENT_SECRET=super-duper-secret \ # github生成的密钥
    --env=DRONE_RPC_SECRET=super-duper-secret \ # 这是用openssl生成的共享密钥
    --env=DRONE_SERVER_HOST=drone.company.com \ # 这个地址就是drone的可视化操作网页的地址,如果下面不是80端口,应该是这样 drone.company.com:3333
    --env=DRONE_SERVER_PROTO=https \  # 没有证书的话 这里也是http
    --publish=80:80 \    # 80端口一般留给nginx 可以换一个 3333:80
    --publish=443:443 \  # 一般也没配置https这个可以删了
    --env=DRONE_USER_CREATE=username:yourname,admin:true # 这个很重要,后面会用到
    --restart=always \ 
    --detach=true \ 
    --name=drone \  # 容器的名称
    drone/drone:2 # 刚下载的drone镜像
复制代码

到这里访问你配置的DRONE_SERVER_HOST就可以看到页面了: 如果看不到仓库列表,可以点一下右上角的SYNC按钮,同步一下。 image.png

Webhooks

在Github的仓库设置里可以检查一下Webhooks

image.png

其实整个流程和jenkins很像,向代码仓库提交代码更新时,就会自动触发Webhooks,然后Drone就会从代码仓库Clone代码,再通过这个.drone.yml(相当于java使用的pom.xml文件)配置,执行相应的流水线操作。

安装runner

安装runner镜像

docker pull drone/drone-runner-docker:1
复制代码

运行runner

docker run --detach \ 
    --volume=/var/run/docker.sock:/var/run/docker.sock \ 
    --env=DRONE_RPC_PROTO=https \ # 这是视情况而定
    --env=DRONE_RPC_HOST=drone.company.com \ # 这就是上面配置的drone.company.com:3333
    --env=DRONE_RPC_SECRET=super-duper-secret \ # openssl生成的密钥
    --env=DRONE_RUNNER_CAPACITY=2 \ 
    --env=DRONE_RUNNER_NAME=my-first-runner \ 
    --publish=3000:3000 \ 
    --restart=always \ 
    --name=runner \ 
    drone/drone-runner-docker:1
复制代码

可以通过docker logs查看日志

docker logs runner # runner就是上面设置的 --name=runner 可以修改
INFO[0000] starting the server INFO[0000] successfully 
pinged the remote server
复制代码

Github新建一个测试仓库

可以用现成的也可以新建一个,这里不赘述。

激活仓库

Drone上找到对应的仓库settings激活并保存。

image.png

如果上面没配DRONE_USER_CREATE,是看不到trusted的,这样你push代码,构建就会提示untrusted不被信任。

image.png

.drone.yml文件

配置ssh_host 和 ssh_password

image.png

Drone保证了安全访问,我们不用在配置文件明文输出密码敏感值,可以添加 Secret ,如果觉得没有必要也不用添加,直接在后面的 drone.yml文件中配置明文密码就行。

host 配置你的服务器公网ip: image.png password 配置你ssh登录服务器的密码

image.png

编写yml文件

本人在yml文件配置这块,可以看一下官方文档:docs.drone.io/pipeline/ov… 下面是网上找的一份配置,放到你的仓库不一定能用,但这份配置示例是一个比较完善的步骤,依样画葫芦吧!

kind: pipeline
type: docker
name: vite-vue3

trigger:
  branch:
    - master

steps:
  # 使用缓存
  - name: restore-cache
    image: drillster/drone-volume-cache
    settings:
      restore: true
      mount:
        - ./node_modules
    volumes:
      - name: node_cache
        path: /cache

  # 打包
  - name: build
    image: node:16
    commands:
      - node -v
      - yarn -v
      - yarn config set registry https://registry.npm.taobao.org -g
      - yarn config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/ -g
      - yarn 
      - yarn run build

  # 更新缓存
  - name: rebuild-cache
    image: drillster/drone-volume-cache
    settings:
      rebuild: true
      mount:
        - ./node_modules
    volumes:
      - name: node_cache
        path: /cache

  # 部署
  - name: deploy
    image: appleboy/drone-scp
    settings:
      host:
        from_secret: ssh_host # 这里就是上面配的secret,也可以明文
      username: root # 登录名
      password: 
        from_secret: ssh_password # 登录密码
      command_timeout: 3m
      # 设置要将打包户的文件部署到的文件地址
      target: /usr/share/nginx/html # 把项目拷贝到target目录
      source: dist/* # 打包后的那个目录
      rm: true
      strip_components: 1
    when:
      status:
        - success

volumes:
  - name: node_cache
    host:
      path: /data/node

复制代码

打包有时候会出现node内存超出的问题:可以设置max_old_space_size

vue-cli-service build --max_old_space_size=4096
复制代码

image.png

小提示,如果对droneyml文件语法不熟,可以只留下"部署"那一步流程,你本地打包把dist文件push到仓库,就可以很快的体验到“半自动化部署”的快感哦!

image.png

如果Docker配错了

docker ps -a  # 查看所有容器

docker stop name/id  # 通过id或者name 停止这个容器

docker rm name/id # 把它删了重来
复制代码

image.png

猜你喜欢

转载自juejin.im/post/7080703175556071431
今日推荐