无人机支持不一样类型的管道执行环境,其中每种类型都有本身的自定义yaml规范。kind和type属性定义管道的类型和目标执行环境。前端
在隔离的Docker容器内执行管道命令。一个docker管道是一个管道来执行壳Docker容器内部的命令。Docker容器提供隔离,可在同一台机器上安全地执行并发管道。容器管道的主要好处是可以以Docker镜像的形式带来本身的构建环境。无人机会在运行时自动下载docker镜像java
https://docker-runner.docs.drone.io/configuration/overview/node
在pod内执行管道命令,其中每一个管道步骤都由pod中的容器表示。一个kubernetes管道执行管道做为Kubernetes吊舱内的容器几步之遥。容器提供隔离,能够安全地在同一台计算机上执行并发管道。基于容器的管道的主要优势是可以以Docker镜像的形式带来本身的构建环境。无人机会在运行时自动下载docker镜像。git
https://kube-runner.docs.drone.io/configuration/overview/web
使用SSH协议在远程计算机上执行管道命令,须要直接在主机上运行或不太适合在容器内部执行的工做负载颇有用。docker
https://ssh-runner.docs.drone.io/configuration/overview/npm
Kubernetes管道和Docker管道具备许多类似之处,但不该将它们视为彼此的直接替代。在配置语法和运行时行为方面存在一些显着差别。缓存
Kubernetes管道计划在同一Pod中执行,所以共享同一网络。这意味着能够经过localhost
地址而不是自定义主机名访问服务。安全
Kubernetes管道由Kubernetes调度,它提供了高级的亲和力选项。Kubernetes运行器使用该node_selector属性向管道公开节点选择器功能。bash
Kubernetes容器会自动将服务账户凭据安装到/var/run/secrets/kubernetes.io/serviceaccount
。这可能会带来安全隐患,并可能影响与Kubernetes集成的插件。
建立一个共享密钥,以验证跑步者与中央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
必需的字符串值提供您的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。
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