CI工具drone和Docker入门


2021-05-27

上个月入职新公司,领导让我整理下gitlib创建项目到部署ranch的一个过程文档

发现项目工程中都会有.drone.yml和Dockerfile文件

一、CI工具drone

1、drone是一个类似jenkins的工具,下面是一个新建的项目在drone的配置项

(1)打开 http://drone.xxx.com.ph/ 地址,之前未登录会有一个授权弹窗,点击Authorize。
(2)打开 http://drone.xxx.com.ph/account/repos 地址,找到项目qa-mock,并点击右侧栏置为生效
(3)打开 http://drone.xxx.com.ph/data-qa/mock/settings 地址,勾选tag
(4)打开 http://drone.xxx.com.ph/data-qa/mock/settings/secrets 地址,设置仓库用户名和密码
    Secret Name 填入 xxxxxx
    Secret Value 填入 xxxxxx

2、.drone.yml文件是用来申明CI的过程

项目根目录添加.drone.yml文件,该文件主要是用来配置项目构建的流程
官方文档:https://docs.drone.io/pipeline/overview/
环境变量:https://docs.drone.io/pipeline/environment/reference/
其他参考:https://my.oschina.net/u/4172827/blog/3080817

# 注释的这个是新版本的写法
#kind: pipeline
#name: qa-mock
#steps:
#  - name: aliyun           # 步骤的名字
#    image: plugins/docker  # 每个步骤的本质都是基于这个镜像去启动一个容器
#    registry: 保存镜像的仓库地址  # 保存镜像的仓库地址
#    repo: 保存镜像的仓库地址/a/b  # 镜像位置
#    secrets: [ docker_username, docker_password ]                            # drone项目secrets的用户名和密码
#    tags:                # 将最新的tag名设置为${DRONE_TAG}
#      - latest
#      - ${DRONE_TAG}     # 当前正在运行的构建的tag名称
#    when:                # when语法:https://docs.drone.io/pipeline/docker/syntax/conditions/
#      branch: dev        # 如果有branch,那么tag不会触发构建
#      event: tag         # 事件触发


# 公司drone版本比较老,所以用的是老版写法,下面的aliyun对应1个步骤,可以创建多个步骤
pipeline:
#  build:     这里一个步骤是java项目编译打包用的,我们还可以在编译之前再加一些sonar检查的步骤什么的
#    image: maven:3.6.0-jdk-11-slim
#    commands:
#      - mvn clean install  -Dmaven.test.skip=true
#    volumes:
#      - /tmp/gaolei:/root/.m2

  teststep:
    image: plugins/docker
    repo: 保存镜像的仓库地址/a/b
    registry: 保存镜像的仓库地址 
    secrets: [ docker_username, docker_password ]
    tags: ${DRONE_TAG=latest}
#    tags:
#      - latest
#      - "latest"
    when:
      event: [ tag,push ]

二、docker概念

Docker将应用程序与该程序的依赖,打包在一个文件里面。
运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。
容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

镜像( Image) 和容器( Container) 的关系
就像是面向对象程序设计中的 类 和 实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。
因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。
容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。
这种特性使得容器封装的应用比直接在宿主运行更加安全。

优点:
1、简化配置:虚拟机VM最大的好处是基于你的应用配置能够无缝运行在任何平台上,Docker提供同样类似VM的能力。
2、服务合并:使用Docker也能合并多个服务以降低费用
3、代码管道化管理:能够对代码以流式pipeline管道化进行管理,
4、多租户:Docker能够作为云计算的多租户容器,使用Docker能容易为每个租户创建运行应该多个实例,这得益其灵活的快速环境以及有效diff命令。
5、快速部署:Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭。
6、开发人员的生产化:我们可以将多个Docker装载一系列服务运行在单机上最大程度模拟生产分布式部署的环境。
7、应用隔离:将多个应用服务部署在多个Docker中能轻松达到这个目的。
8、分层存储:镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。

三、docker安装和使用

参考来源:https://www.runoob.com/docker/ubuntu-docker-install.html

其他参考:https://www.huaweicloud.com/zhishi/arc-3376452.html

1、安装
我自己阿里云linux服务器的安装方式,一条命令安装完成就可以直接使用docker了:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2、常用docker命令
(1)docker images           查看镜像
   docker rmi <镜像id>  删除镜像
(2)docker ps          查看运行中的容器
    docker ps  -a    查看所有的容器
    docker rm -f <容器 ID>  删除容器
(3)docker stop <容器 ID>    停止容器
    docker start <容器 ID>   启动已经停止的容器
    docker restart <容器 ID>   重启容器
(4)docker run -itd ubuntu:15.10 /bin/bash  创建一个新的容器,并运行一个命令  --name  容器名 :给新建的容器命名
      -i: 交互式操作。
      -t: 终端。
      -d:后台运行
      ubuntu: ubuntu 镜像。
      /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash 
       在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入
       docker exec -it <容器 ID> /bin/bash   使用exec不会在exit退出容器时导致容器停止
(5) 创建命令
    docker build -t 镜像名称:镜像tag .    这里的.就是Dockerfile文件所在的目录

Dockerfile文件是一个把项目打包成镜像的过程,示例如下,后面有空把docker和drone从安装到应用实践一遍

# 基于镜像基础
FROM python:3.6-slim-stretch

RUN apt-get update

# 创建目录
RUN mkdir -p /opt/data-qa/qa-mock
# 复制指令,从上下文目录中文件复制到指定路径,这里的表示当前路径的内容复制到上面创建出来的目录
COPY . /opt/data-qa/qa-mock

# 工作目录
WORKDIR /opt/data-qa/qa-mock
# 安装qa-mock目录下requirements的依赖包
RUN pip install -r requirements.txt

# 申明使用的端口
EXPOSE 9000

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM