搭建好drone后,需要在工程的根目录下创建.drone.yml
文件,才能在工程推送到仓库时触发webhook,从而自定义任务(如编译工程、推送ftp、发布到私服)。
和jenkins的pipeline类似,都是linux的命令的组合使用。
附上一个脚本内容。(新建.drone.yml
文件并将如下内容复制到文件中)(如下脚本是当一个对外提供基础类库的工程中有代码提供时,立即执行mvn clean install命令,将jar安装到本地仓库,可供其它工程引用)
kind: pipeline
type: docker
name: sample-ci/cd
workspace:
path: /drone/src
clone:
depth: 1
# disable: true
steps:
- name: compile code
image: maven:3.6.3-jdk-8-slim
environment:
KEY_A: value_a
volumes:
- name: maven_m2_dir
path: /root/.m2 # path in the container
- name: workbench_dir
path: /root/workbench_dir
commands:
# 获取environment的时用$${xxx}
- echo KEY_A=$${KEY_A}
# use 内置变量 https://docs.drone.io/pipeline/environment/reference/
- echo ${DRONE_GIT_HTTP_URL} ${DRONE_COMMIT_BRANCH} ${DRONE_BUILD_LINK}
# echo 后面的字符串中不能有英文冒号,
- echo "url=${DRONE_GIT_HTTP_URL}, branch=${DRONE_COMMIT_BRANCH}, buildUrl=${DRONE_BUILD_LINK}"
- env
- mvn -v
- mvn clean
- |
# 自定义的命令,可以是多行
# 中文会乱码
echo "uname = `uname -r`"
echo "hostname = `hostname`"
java_version=`java -version 2>&1 | sed '1!d' | sed -e 's/"//g' | awk '{print $3}'`
echo "java.version = $java_version"
mvn_version=`mvn -version 2>&1 | sed '1!d' | awk '{print $3}'`
echo "mvn.version = $mvn_version"
echo "build.url = ${DRONE_BUILD_LINK}"
echo "build.number = ${CI_BUILD_NUMBER}"
echo "git.url = ${DRONE_GIT_HTTP_URL}"
echo "git.commitId = ${CI_COMMIT_SHA}"
echo "git.branch = ${CI_COMMIT_BRANCH}"
repo_name=`echo ${CI_REPO_NAME} | cut -d / -f 2`
echo "git.repo.name = $repo_name"
# 将工程install到本地仓库
- mvn install -Dmaven.javadoc.skip=true -B -V
- name: show target files
image: maven:3.6.3-jdk-8-slim
volumes:
- name: maven_m2_dir
path: /root/.m2 # path in the container
- name: workbench_dir
path: /root/workbench_dir
commands:
- echo 'show /drone/src' && ls -lh /drone/src
- echo 'show /drone/src/target' && ls -lh /drone/src/target
- echo 'show /root/.m2' && ls -lh /root/.m2
- echo 'show /root/workbench_dir' && ls -lh /root/workbench_dir
- name: restart application by docker
image: docker:dind
volumes:
- name: dockersock
path: /var/run/
- name: workbench_dir
path: /root/workbench_dir
commands:
- sleep 5
- docker info
- docker ps -a
- name: restart application by docker-compose
image: docker/compose:1.23.1
volumes:
- name: dockersock
path: /var/run/
- name: workbench_dir
path: /root/workbench_dir
commands:
- sleep 2
- docker info
- docker-compose -v
trigger:
branch:
- master
event:
- push
volumes:
- name: maven_m2_dir
host:
path: /opt/maven-m2 # path in host machine
- name: workbench_dir
host:
path: /opt/workbench
- name: dockersock
host:
path: /var/run/