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服务器
创建一个共享密钥,以验证跑步者与中央Drone服务器之间的通信。
您可以使用openssl生成共享机密:
openssl rand -hex 16
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配置
必需的字符串值提供您的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服务器配置中定义的机密匹配
同意后就能看到界面
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/
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节点的密钥
设置前端node的打包,只需更换打包基础镜像和命令即可
- name: npm image: registry.hello.com/node:6.11 commands: - npm install --unsafe-perm - npm run build