無人機支持不一樣類型的管道執行環境,其中每種類型都有本身的自定義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