ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

敏捷 & DevOps & Drone CI

2019-08-06 18:42:59  阅读:288  来源: 互联网

标签:CI 运维 开发人员 DevOps CD Drone docker


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

  • 软件开发是是一个复杂的工业化流程,编码只是其中的一部分,CI/CD 使得开发流程更加标准化、专业化、自动化和更加稳定,可以在开发过程中提早发现问题,从而提高开发效率,节省大量时间,一个好的CI/CD流程可以大大提高了软件的价值。CI/CD尤其对追求持续快速响应变化,持续迭代的敏捷开发中流程尤为重要。

CI/CD的技术选型

  • 技术选型对于一个产品一个团队来说至关重要。对于敏捷团队的技术选型,往往不需要大而全的方案,更看重轻量高效,易于快速掌握,Drone刚好满足以上要求,轻量级易于掌握,又能满足各种需求。Drone原生于docker技术的,充分利用了docker的优势(如环境隔离、标准化镜像),轻量高效,非常适合docker技术栈(docker docker-compose swarm k8s),当然也可以用于传统的scp ssh拷贝源代码的方式。
  • 如果你本身是一个开发人员,没有太多CI/CD工具经验,想快速构建一个CI/CD流程,那么Drone就是你不二的选择。如果你之前用过Travis CI,对docker技术有一定的了解,那么就能飞快入门。

Drone优势

流程定义简单

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

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

部署简单

  • Drone 部署简单,可以采用Docker部署的方式,只需要将官网提供的docker启动命令改几个参数,直接运行就启动起来了,整个配置过程只需要几分钟。

支持多环境

  • 支持多硬件环境

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

  • 支持多种源代码管理系统

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

  • 支持各种编程语言编程环境

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

扩展性好

  • Drone有大量的插件,虽然没法和 jienkens比但是绝对能满足你各种需求,最厉害的是他自定义插件非常容易,你可以快速构建自己的插件,一个插件实际就是一个docker镜像,并且构建插件并不依赖于开发语言,甚至可以用简单的shell脚本。

提供隔离的运行环境:

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

支持分布式扩展:

  • 可以在多台机子中部署Drone-agent,实现一个Drone群集,实行Drone的横向扩展,可以实现多build 多stage的并发执行。Drone同时和k8s实现了深入定制化集成,采用k8s的方式部署,利用k8s的特性实现弹性分布式扩展。

易于调试

  • 可以实时的以ssh进入container进行调试
  • 可以用Drone exec方法在本地调试,解析执行Drone.yaml
  • 可以直接加断点在本地debug(后续文章将介绍如何本地debug)。

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

  • Drone可以通过配置 multiple pipeline 和 depends_on来定义各个step stage的依赖关系,执行先后顺序,是否同时并发执行。

Drone 敏捷开发 DevOps

  • 敏捷开发打破了需求分析、测试、开发运维之间的一些孤岛。敏捷开发使得团队中各种角色的融合,开发承担测试的工作,运维的工作,设计工作。

  • 关于什么是DevOps,有各种的理解,有各种的文章,本人的理解就是,开发过程和运维过程紧密结合,开发更深入的参与运维过程,dev和Ops两者角色的融合,两者更好的合作。

  • CI/CD就是从技术层面、工具层面来实现了敏捷开发的理念,实现开发、测试、运维紧密结合。

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上

公众号:王司技术谈
免费星球号:
WechatIMG1.png

标签:CI,运维,开发人员,DevOps,CD,Drone,docker
来源: https://blog.csdn.net/wangyish201201/article/details/98644025

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有