CI/CD

断了今生、忘了曾经 提交于 2020-12-18 01:18:03

Git / Github

Git 常用命令

  • git clone url
  • git branch : 查看当前分支 -a查看所有本地,-r查看所有远程
  • git branch -vv : 查看本地与remote关联关系
  • git branch -d/-D branch名字: 删除branch,必须没有被checkout
  • git pull : 拉取所有分支
  • git checkout -b 本地分支名x origin/远程分支名x : 通过remote分支新建本地分支并切换到分支
  • git diff : 查看所有被修改的文件
  • git checkout HEAD -- 文件路径文件名 :reset一个文件
  • git reset --hard origin/master : reset project with remote origin/master
  • git reset --soft HEAD^ : 回滚一次commit,保留本地代码
  • git commit -a -m 'commit message' : 提交所有改动到本地仓库
  • git log master ^origin/master: git 查看没有push的commit
  • git push : https://blog.csdn.net/sky1203850702/article/details/41344131
  • git push --set-upstream origin test : 将test分支push到远程,并且关联
  • git branch --set-upstream-to origin/branch-name : 重新设置关联
  • git merge origin/name : 将远程分支merge到本地当前分支
  • git rebase origin/develop : 需要先提交

Drone

Gatting Start

  • Drone是基于Docker和git的pipeline服务
  • 用于Build/Test/Deploy等场景
  • 工作流的Job是通过启动不同等docker容器来完成
  • Drone的插件也是预定义的容器

安装

  • version 0.8
    1. 在github -> develop settings -> new OAuth app
      1. callback : http://192.168.2.153:8000/authorize
      2. 得到client id和secret
    2. docker pull drone/drone:0.8
    3. 编辑docker-compose.yml
      1. https://0-8-0.docs.drone.io/installation/
      2. DRONE_SECRET用于agent连接service的密码
      3. DRONE_OPEN=true/DRONE_ORGS=airwallex
        1. 设置开启organization成员自动注册drone
        2. 设置好client id和secret就能成功用git hub账号登陆,但是如果同时设置这项true,并设置来orgs,那就需要organization approve才能登陆
      4. DRONE_ADMIN=jude-sheng-awx : 设置drone的管理员,只有管理员才能把项目设置成Trusted,然后才能正常使用drone
    4. volumes:
      1. drone-server-data:/var/lib/drone/ : 设置卷标,你不知道数据库数据被放在哪里
      2. ./tmp/drone/data:/var/lib/drone/ : 这种方式更清晰

.drone.yml

  • Doc : https://docs.drone.io/

  • workspace

    1. base: 设置pipelins启动的容器的volume, 让所有容器可以通过这个volume共享数据
    2. path: 设置drone的工作目录,相对与base的相对路径,代码会被拉到这里
  • pipeline

    1. image : job需要启动的镜像
    2. commands
      1. pipeline的commands 会使用--endpoint来覆盖ENDPOINT命令。可以实现传递profiles
      2. 无法自定义docker run 命令
        • sleep 10 : 让job等待10秒钟后再执行,比如等待service就绪
    3. pull true : 默认不会每次重新拉新的image,需要true
    4. group :job是同步执行的,但是同一个group的job是并行执行的
    5. detach: true pipeline级别启动服务
      1. 无法公开端口,否则在多个agent并行多时候产生端口冲突
  • plugins

    1. 插件不能执行commands
    2. 插件市场 :http://plugins.drone.io/
    3. git插件是默认的,不需要配置
  • when :执行job/plugins的条件

    1. branch: master
    2. status: [success, failure] : 在pipeline执行成功或者失败后执行
    3. event : 执行job的事件类型
      1. tag/push/pull_request
      2. deploy命令对应deployment事件
    4. environment : 执行job的环境
      1. 可以给不同环境配置不同job
    5. tag
      1. docker image 的tag, 支持通配符
    6. instance :指定drone的instance
  • services

    1. pipeline所需要的依赖,比如集成测试job的依赖,集成测试job设置成定时任务比较好
    2. services在pipeline之前执行
    3. service和step内部都使用docker network实现容器通讯,可以直接通过alias访问,alias就是service或者step的名字:比如my-postgress:5432
    4. service不能执行commands
    5. environment:
      1. 设置服务的环境变量,可以用来设置端口,账号密码等
  • matrix

    1. 为所有矩阵的组合启动独立的job
    2. include
      1. 为特定矩阵组合启动各子的job
    3. job通过${Matrix_Name}来使用矩阵变量

plugins

  • plugins/docker
    1. 用于打包镜像
      1. tags指定多个
    2. 用于将镜像从dev deploy到prod
      1. 使用when deployment event和environment条件
      2. 命令: drone deploy repo 某次构建的序号 environment

与Jenkins对比

  • Drone
    1. 部署运维简单
    2. 使用简单,学习成本低
    3. Docker + Github
    4. 语言无关
  • Jenkins
    1. Java base 插件
    2. 生态庞大
    3. 功能全面

Jenkins

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!