Пишем пайплайны

Пишем

Пример пайплайна:

kind: pipeline
type: docker
name: default

steps:
- name: greeting
  image: alpine
  commands:
  - echo hello
  - echo world

Можно указывать в одном drone.yml'е несколько пайплайнов/секретов/и т.д.

Приколюхи

Можно фильтровать прод и тестинг таким образом:

node:
  target: shell-scripts
when: 
  branch:
    - master

В node указывается тег target, которым отделять прод от теста. Например на проде:

DRONE_RUNNER_LABELS=target:prod

А на тестинге:

DRONE_RUNNER_LABELS=target:testing

Потом сделать 2 пайплайна для разных веток (testing/master). Правда у меня почему-то не вышло.

Как это все строить?

 

Деплой по сути состоит из нескольких этапов - загрузка кода, проверка+-линтовка, деплой (опционально с доп. подтверждением).

 

Плагины

Указываются как imagы:

kind: pipeline
type: docker
name: default

steps:
- name: test
  image: golang:1.13
  commands:
  - go build
  - go test -v

- name: notify
  image: plugins/slack
  settings:
    channel: dev
    webhook: https://hooks.slack.com/services/...

 

Плагины

SCP (SSH Copy)

- name: scp files
  image: appleboy/drone-scp
  settings:
    host: 
      from_secret: scp_host
    username: 
      from_secret: scp_user
    password: 
      from_secret: scp_pass
    port: 22
    source: /root/archlinux-*-x86_64.iso
    target: /var/www/mirror

Telegram notification

- name: send telegram notification
 image: appleboy/drone-telegram
 settings:
   token: 
     from_secret: tg_token
   to: 
     from_secret: tg_user
   message: >
    {{#success build.status}}
      build {{build.number}} of {{repo.name}} succeeded. Commit: {{commit.message}}. Duration: {{since build.started}}. Good job.
    {{else}}
      build {{build.number}} of {{repo.name}} failed. Commit: {{commit.message}}. Duration: {{since build.started}}. Fix me please.
    {{/success}}     
 when:
   status:
   - success
   - failure