docker 搭建 web_Drone+Gogs+docker实现持续自动化部署

8633a60220382f2a08bc2a203bcf3b31.png

Drone CI 简介

Drone是一个持续集成和持续交付的平台,可以与Docker完美集成。相对于Jenkins来说更加轻量,可以配合轻量的Gogs来实现持续集成。

  • Drone引入了Pipelnes的概念,管道可帮助我们自动化软件交付过程中的步骤,例如启动代码构建,运行自动化测试以及部署到暂存或生产环境。
  • 通过将.drone.yml文件放在git信息库的根目录中来配置管道。 yaml语法旨在易于阅读和表达,以便查看存储库的任何人都可以理解工作流程。
  • Drone通过多个step来完成一系列的指令。

Drone CI搭建

建议使用docker-compose来搭建Drone,这里推荐一个:

version: '3'
services:
  drone-server:
    image: drone/drone:latest
    ports:
      - 10081:80
    volumes:
      - ./drone:/var/lib/drone/
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    environment:
      - DRONE_OPEN=true
      - DRONE_SERVER_HOST=${DRONE_HOST:PORT}
      - DRONE_SERVER_PROTO=http
      - DRONE_LOGS_TRACE=true
      - DRONE_LOGS_DEBUG=true
      - DRONE_GOGS=true
      - DRONE_GOGS_SERVER=${GOGS_HOST:PORT}
      - DRONE_PROVIDER=gogs
      - DRONE_DATABASE_DATASOURCE=/var/lib/drone/drone.sqlite
      - DRONE_DATABASE_DRIVER=sqlite3
      - DRONE_RPC_SECRET=MWckgvhjqg4E3eQ0psgZX4iNCxoQiyU4LLvO4eXFFuHtrTkIy8vwcAc3erB5f9reM
  drone-agent:
    image: drone/agent:latest
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
    environment:
      - DRONE_RPC_SERVER=${DRONE_HOST:PORT}
      - DRONE_RPC_SECRET=MWckgvhjqg4E3eQ0psgZX4iNCxoQiyU4LLvO4eXFFuHtrTkIy8vwcAc3erB5f9reM
      - DRONE_LOGS_TRACE=true
      - DRONE_LOGS_DEBUG=true
​

其实搭建Drone还是比较简单的,至于Gogs可以使用docker来搭建了。

与Gogs连用

docker-compose up -d启动完成后,如果配置完成,登录时使用Gogs的账户和密码就可以。登录进入之后就可以看到Gogs中的代码了。

66bb97f5865c5c4d5fe74ee61e43ba08.png

点击进入仓库-SETTINGS,把项目设置为Private,以及Trusted勾上。

注意:为了使用缓存以便于我们用例如Maven构建时,可以使用缓存来大大减少构建时间,所以这里必须把Trusted勾上。

然后进入gogs就会发现仓库设置中有了drone的web钩子了。

60ee14790843c9642848306ef4f57270.png

进入web钩子,点击测试推送可以看到最新推送的消息已经发送成功。

680ba4784d9ec9117e0db74570c09157.png

进入drone可以看到构建的过程。

fe78a357aed3902cbac92be8878d0f85.png

对于一个项目基本的持续交付流程如下(不同项目流程可能略微不同)

clone -> build -> publish -> deploy -> notify

对于Drone来说最核心的就是.drone.yml文件了,这里面定义了所有的流程。此次我采用下面的流程:

  1. push代码到gogs,gogs通知drone进行clone项目。
  2. 执行maven编译
  3. jar包通过ftp传递到服务器上
  4. 通过脚本命令来构建docker容器,并且更新镜像源。
  5. 通知,可以通过钉钉或者微信来通知构建结果。

其实最完美的流程是3-4步骤,我们可以通过plugins/docker插件来构建镜像并且把镜像推送到我们的私有docker仓库中,因为我还没搭建私有docker仓库,这里就先依ftp传递为例。

附上.drone.yml文件

​
kind: pipeline
name: 打包测试
​
steps:
- name: Maven编译
  image: maven
  volumes:
  - name: cache
    path: /root/.m2
  commands:
    - mvn clean install
​
- name: scp传递jar包
  image: appleboy/drone-scp
  settings:
    host:
      - *****
    username: root
    password:
      from_secret: ftp_password
    port: 22
    command_timeout: 2m
    target: ****
    source:
      - /drone/src/target/*.jar
    rm: true
​
- name: ssh commands
  image: appleboy/drone-ssh
  settings:
    host: ****
    username: ****
    password: 
      from_secret: ftp_password
    port: 22
    script:
      - echo ====暂停容器开始=======
      - docker stop `docker ps -a| grep *** | awk '{print $1}' `
      - docker rm -f `docker ps -a| grep *** | awk '{print $1}' `
      - echo ====开始部署=======
      - cd /usr/local/ywb/interview
      - docker build -t *** .
      - docker run ...
      - echo ====部署成功======
​
- name: 钉钉通知
  image: guoxudongdocker/drone-dingtalk 
  settings:
    token: 
      from_secret: dingtalk_token
    type: markdown
    message_color: true
    message_pic: true
    sha_link: true
  when:
    status: [failure, success]
​
volumes:
- name: cache
  host:
    path: /tmp/cache/.m2
​
trigger:
  branch:
  - master
​

其实整个步骤仔细理解并不难,只需要能理解通过pipeline来执行,每个step其实都是包含一个docker镜像,通过使用这些镜像来帮助我们完成我们所需要的操作。

这里需要去Drone项目设置中定义服务器密码和钉钉的token

b3a8c092c5d5ab95771aea1f06e0bb5a.png

对于volumes是用来缓存的,这里用了Maven所以对.m2文件夹进行了缓存,下次打包就能节省很多时间。

更好理解这些插件建议移步:http://plugins.drone.io/

构建完成后可以在钉钉上看到构建结果。如有建议,欢迎沟通!

dd24502f2f5dbca2a3a57acc56e94d9b.png
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值