1、pipeline类型

无人机支持不同类型的管道执行环境,其中每种类型都有自己的自定义yaml规范。kind和type属性定义管道的类型和目标执行环境。

1.1  Docker管道

在隔离的Docker容器内执行管道命令。一个docker管道是一个管道来执行壳Docker容器内部的命令。Docker容器提供隔离,可在同一台机器上安全地执行并发管道。容器管道的主要好处是能够以Docker镜像的形式带来自己的构建环境。无人机会在运行时自动下载docker镜像

https://docker-runner.docs.drone.io/configuration/overview/

1.2  Kubernetes管道

在pod内执行管道命令,其中每个管道步骤都由pod中的容器表示。一个kubernetes管道执行管道作为Kubernetes吊舱内的容器几步之遥。容器提供隔离,可以安全地在同一台计算机上执行并发管道。基于容器的管道的主要优点是能够以Docker镜像的形式带来自己的构建环境。无人机会在运行时自动下载docker镜像。

请注意,Kubernetes管道不是Docker管道的直接替代。配置和运行时行为可能有所不同。

https://kube-runner.docs.drone.io/configuration/overview/

1.3  SSH管道

使用SSH协议在远程计算机上执行管道命令,需要直接在主机上运行或不太适合在容器内部执行的工作负载很有用。

https://ssh-runner.docs.drone.io/configuration/overview/

2、Docker与Kubernetes的区别

Kubernetes管道和Docker管道具有许多相似之处,但不应将它们视为彼此的直接替代。在配置语法和运行时行为方面存在一些显着差异。

  • Kubernetes管道计划在同一Pod中执行,因此共享同一网络。这意味着可以通过localhost地址而不是自定义主机名访问服务。

  • Kubernetes管道由Kubernetes调度,它提供了高级的亲和力选项。Kubernetes运行器使用该node_selector属性向管道公开节点选择器功能。

  • Kubernetes容器会自动将服务帐户凭据安装到/var/run/secrets/kubernetes.io/serviceaccount。这可能会带来安全隐患,并可能影响与Kubernetes集成的插件。

3、GitLib安装Drone服务器

3.1创建一个GitLab OAuth应用程序

无人机drone安装使用_第1张图片

无人机drone安装使用_第2张图片

3.2创建共享密钥

创建一个共享密钥,以验证跑步者与中央Drone服务器之间的通信。

您可以使用openssl生成共享机密:

openssl rand -hex 16

image-20200102105012955.png

3.3启动服务器

docker run \
  --volume=/var/lib/drone:/data \
  --env=DRONE_AGENTS_ENABLED=true \
  --env=DRONE_GITLAB_SERVER=http://gitlab.econage.com \
  --env=DRONE_GITLAB_CLIENT_ID=b6f0a6323c57da1ade470546b5b3f07817ec12ca4dcc964b626affd0dfbb46e3 \
  --env=DRONE_GITLAB_CLIENT_SECRET=76b6f5159f158337cd637ff120ff3f15206ad5b3aeb40b6d6da6469c40242dd1 \
  --env=DRONE_RPC_SECRET=5c2a265111e08953de1028451ae866d7 \
  --env=DRONE_SERVER_HOST=192.168.10.14 \
  --env=DRONE_GIT_ALWAYS_AUTH=true \
  --env=DRONE_USER_CREATE=username:docker,admin:true \
  --env=DRONE_SERVER_PROTO=http \
  --publish=80:80 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone

3.4配置

  • DRONE_GITLAB_CLIENT_ID

    必需的字符串值提供您的GitLab oauth客户端ID。

  • DRONE_GITLAB_CLIENT_SECRET

    必需的字符串值提供您的GitLab oauth客户端密钥。

  • DRONE_GITLAB_SERVER

    选项字符串值提供您的GitLab服务器网址。默认值为的gitlab.com服务器地址https://gitlab.com

  • DRONE_GIT_ALWAYS_AUTH

    可选的布尔值将Drone配置为在克隆公共存储库时进行身份验证。仅在将自托管的GitLab与私有模式启用一起使用时,才应启用此功能。

  • DRONE_RPC_SECRET

    必需的字符串值提供了无人机共享机密。这用于验证到服务器的rpc连接。必须为服务器和代理提供相同的秘密值。

  • DRONE_SERVER_HOST

    必需的字符串值提供您的外部主机名或IP地址。如果使用IP地址,则可以包括端口。

  • DRONE_SERVER_PROTO

    必需的字符串值提供了您的外部协议方案。此值应设置为http或https。如果您配置ssl或acme,则此字段默认为https。

4、安装Docker Runner

docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=192.168.10.14 \
  -e DRONE_RPC_SECRET=3ab0479b9718d8337e111796c445eefe \
  -e DRONE_RUNNER_CAPACITY=2 \
  -e DRONE_RUNNER_NAME=${HOSTNAME} \
  -p 3000:3000 \
  --restart always \
  --name runner \
  drone/drone-runner-docker

配置

  • DRONE_RPC_HOST

    提供您的Drone服务器的主机名(和可选端口)。运行程序在主机地址连接到服务器,以接收执行管线。

  • DRONE_RPC_PROTO

    提供用于连接到Drone服务器的协议。该值必须是http或https。

  • DRONE_RPC_SECRET

    提供用于与您的Drone服务器进行身份验证的共享密钥。这必须与您的Drone服务器配置中定义的机密匹配

5、访问web界面

无人机drone安装使用_第3张图片

同意后就能看到界面

无人机drone安装使用_第4张图片

设置你想要开启得库

无人机drone安装使用_第5张图片

无人机drone安装使用_第6张图片

这里最主要的是需要.drone.yaml文件,下面是应用于K8s集群的yaml文件,由于我们公司环境复杂,所以使用了ssh模块,k8s模块功能比较单一

k8s模块地址:http://plugins.drone.io/mactynow/drone-kubernetes/

---
kind: pipeline
type: docker
name: base

#主要是缓存maven依赖包,可不用变化,直接使用
steps:
  - name: restore-cache
    image: drillster/drone-volume-cache
    settings:
      restore: true
      mount:
        - ./repository
    volumes:
      - name: cache
        path: /cache
    when:
      event: push     #push事件的时候触发

  - name: mvn
    image: registry.hello.com/maven:3-jdk-8    #harbor仓库maven镜像
    commands:
#maven打包命令,公司使用的是自己的私服,需要指明setting文件地址
    - mvn clean package -Dmaven.test.skip=true -Dmaven.repo.local=./repository -s /root/.m2/settings.xml
    - mv helloworld/target/helloworld-*.jar helloworld/target/app.jar
#改名是为了Dockerfile文件方便构建镜像

  - name: rebuild-cache
    image: drillster/drone-volume-cache
    settings:
      rebuild: true
      mount:
        - ./repository
    volumes:
      - name: cache
        path: /cache
    when:
      event: push

  - name: docker-build
    image: docker
    commands:
      - docker login -u admin -p hello.123 registry.hello.com
      - docker build -t registry.hello.com/helloworld:$DRONE_COMMIT ./helloworld
      - docker push registry.hello.com/helloworld:$DRONE_COMMIT
    volumes:
      - name: deamon
        path: /var/run/docker.sock
    when:
      event: push
      branch: [dev]

  - name: deploy-k8s
    image: appleboy/drone-ssh
    settings:
      host: 192.168.0.10    #k8s集群master节点的ip
      username: root
      password:
        from_secret: ssh_password   #在web界面中设置密码
      port: 22
      envs:
        - DRONE_BRANCH
        - DRONE_COMMIT
      script:
#替换deoloy中的镜像
        - kubectl set image deployment/helloworld helloworld=registry.hello.com/helloworld:$DRONE_COMMIT -n $DRONE_BRANCH
    when:
      event: push
      branch: [dev]

volumes:
  - name: deamon
    host:
      path: /var/run/docker.sock
  - name: cache
    host:
      path: /opt/drone/cache

支持的变量有:

https://autoscale.drone.io/reference/

Dockerfile文件:

FROM registry.hello.com/jdk:1.8_232
ADD ./target/app.jar  app.jar
CMD ["java -jar app.jar -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"]

设置远程连接k8s中master节点的密钥

无人机drone安装使用_第7张图片

设置前端node的打包,只需更换打包基础镜像和命令即可

  - name: npm
   image: registry.hello.com/node:6.11
   commands:
   - npm install --unsafe-perm
   - npm run build