CI/CD

敏捷 & DevOps & Drone

2019-08-06  本文已影响0人  王司技术谈

CI/CD对开发团队的重要性

CI/CD的技术选型

Drone优势

流程定义简单

配置即为代码,用配置的方式简单明了定义流程,告别复杂的shell脚本。

  1. Drone采用主流的基于pipline的方式进行流程定义,易于理解
  2. Drone主要采用yaml作为流程描述方式(语言),简单明了易于阅读。对于复杂的配置可以采用另一种类似json的jsonent 配置方式来定义,好处是可以定义方法函数,易于复用。

部署简单

支持多环境

Drone适合在各种平台运行,如Linux x64、ARM、ARM64 Windows x64。同时 Drone 文件很小,对系统要求特别低,可以选择一个很便宜树莓派机子当服务器,甚至可以拿一台小米6来作为Drone服务器。

Drone支持各种多种主流的git源代码管理系统如 Github, Bitbucket, GitLab GitTea, Drone对各种源代码管理系统实现基本是一致的, 所以可以很容易的在各种源代码管理系统之间无痛迁移。

Drone可以用于任何编程语言、任何数据,任何服务,只要能在docker里跑的程序都能用Drone。

扩展性好

提供隔离的运行环境:

这个实际上是利用了docker的特性,在pipline的每一步都是运行在docker中的独立应用,给你完全的控制,不用考虑各种依赖。

支持分布式扩展:

易于调试

方便灵活的build流程定义(并发、顺序、依赖)

Drone 敏捷开发 DevOps

Drone作为新一代的CI/CD,从工具角度更好的实现了DevOps得理念,从设计和实现上,就原生的支持这种思想。

  1. Drone上手容易,可以使即使没有CI/CD运维经验的开发人员快速上手,开发人员就可以快速融入运维过程。
  2. Drone原生于docker实际执行步骤都是在容器中执行,在Drone流程定义中由开发人员执行镜像制作、定义容器执行相关命令,实际是开发人员实现了基础运行环境的构建(如数据库依赖,缓存依赖,代码依赖),开发人员想对运维人员更了解软件系统,对各种依赖关系更加了解,这项工作由开发人员做,减少了和运维人员的沟通成本,减少了出错的可能性。
  3. 运维人员作为技术专家角色对开发人员进行运维技术指导,解决擅长的运维配置问题。
  4. 相对传统的完全由运维人员构建CI/CD,运维人员就不需要了解软件的各种运行细节,不停的和开发人员各种沟通了,从何提高了工作效率,减少不必要的依赖,开发和运维各自专注于自己擅长的领域,两者就能更好的合作更好的融合。

安装

Drone 是采用webhook的触发方式来执行的,实际就是scm注册Drone的webhook api,然后当scm事件发生(用户commit 并push)调用Drone web hook方法 触发整个流程,Drone必须能被源代码管理系统发现,Drone服务能被源代码管理系访问到,所以如果用github Drone 服务必须是公网可以访问,如果用gitlab gittea要在同一个内网, 推荐搭建内网的gitlab 或者 gittea方便本地调试。

https://docs.Drone.io/installation 官方安装文档

再提供一个 采用非80端口(800端口)的例子,在gitlab中配置的地址也记得写端口(http://xxxxxxxx:8080/login)

docker run \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --volume=/var/lib/Drone:/data \
  --env=Drone_GIT_ALWAYS_AUTH=false \
  --env=Drone_GITLAB_SERVER=https://xxxx.com \
  --env=Drone_GITLAB_CLIENT_ID=df59396ko0992e545e7c3100f854c20bb3e629b6883a95095c27bebd4549f9a2c0 \
  --env=Drone_GITLAB_CLIENT_SECRET=e85747;kiuhc341868285f7fd1f138d585c841d9db93b6e9616r650601bc6l;kb98bd \
  --env=Drone_RUNNER_CAPACITY=2 \
  --env=Drone_SERVER_HOST=docker_scm-01w.dev.activenetwork.com:8000\
  --env=Drone_SERVER_PROTO=http \
  --env=Drone_TLS_AUTOCERT=false \
  --env=Drone_USER_CREATE=username:mwan5,admin:true\
  --publish=8000:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=Drone10 \
  Drone/Drone:1
  
采用golang源代码,编译代码的安装方式。

go install github.com/Drone/Drone/cmd/Drone-server
go install github.com/Drone/Drone/cmd/Drone-agent
或者手动将编译好的Drone二进制文件 拷贝到的bin目录下
运行 cmd
/bin/Drone-server

Cron job

Drone 内置了cron job功能,可以实现定时任务的执行,在特定时间跑build。

提供加密管理服务

Drone提供了完善的密码管理服务,方便账户密码秘钥进行管理,可以调用第三方的秘钥管理服务。

pipeline 简单例子
kind: pipeline
name: linux-arm

platform:
  os: linux
  arch: arm

steps:
- name: test
  image: golang:1.11
  commands:
  - go test -v ./...
  volumes:
  - name: 
    path: /go
- name: build
  image: golang:1.11
  commands:
  - "go build -ldflags \"-extldflags \\\\\"-static\\\\\"\" -o release/linux/arm/Drone-server github.com/Drone/Drone/cmd/Drone-server"
  volumes:
  - name: 
    path: /go
  when:
    event:
    - push
    - tag
- name: publish_server
  image: plugins/docker
  settings:
    auto_tag: true
    auto_tag_suffix: linux-arm
    dockerfile: docker/Dockerfile.server.linux.arm
    password:
      from_secret: docker_password
    repo: drone/drone
    username:
      from_secret: docker_username
  when:
    event:
    - push
    - tag
volumes:
- name: 
  temp: {}

测试-> 打包 -> 制作镜像并发布到镜像仓库
最后一步可以用scp ssh方式release代码 或者Drone Helm plugin插件直接发布到k8s上

公众号:王司技术谈


公众号二维码.jpg

免费星球号:


WechatIMG1.png
上一篇 下一篇

猜你喜欢

热点阅读