搭建好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/