Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Hello World Woodpecker

Создадим папку нашего проекта, папку для всех сценариев CI/CD и первый сценарий.

mkdir -p woodpecker-test/.woodpecker && touch woodpecker-test/.woodpecker/hello-world-flow.yml

Заполним файл сценария.

when:
  - event: manual

steps:
  - name: build
    image: bash
    commands:
      - echo "This is the build step"
      - sleep 5

И мы уже готовы запустить наш сценарий для будущего CI/CD с помощью CLI woodpecker-cli.

woodpecker-cli exec
# hello-world-flow.yml
[build:L0:0s] + echo "This is the build step"
[build:L1:0s] This is the build step
[build:L2:0s] + sleep 5

Да, да! Таким образом существует в мире возможность начать проект не с инициализации через cargo new или npm create. А с того чтобы описать что вы решили собрать и протестировать и запустить.

Поговорим о yaml нашего workflow для woodpecker. Мы видим язык для определения шагов выполнения. Каждый шаг требует условия для запуска. И обычно условием будет что-то вроде

when:
  - event: push
    branch: master-of-the-zoo

when:
  - event: [push, pull_request]

Мы не можем не указать никакого условия, шаг не будет исполнен. А если мы укажем pull-request или push, woodpecker-cli локально тоже не станет запускать шаги. Есть несколько способов для запуска сразу, это использование условия

- evaluate: "true"

Либо CI_PIPELINE_EVENT=manual, что дает больше информации о том что происходит. Можно передать любую другую env при вызове и сделать проверку. Еще вариант указать event как manual. Собственно то, что и надо использовать.

when:
  - event: [push, pull_request]
    branch: master
  - event: manual

Если сборка завалилась уже на сервере woodpecker, то можно через UI или CLI скачать metadata файл, который, переданный через аргумент при запуске сценария, будет содержать информацию о том, что произошло событие пуша нового коммита, и сценарий также будет выполнен.

Debug pipeline Screenshot

 woodpecker-cli exec --metadata-file Partysun-napatam-pipeline-2-metadata.json

Вернемся к нашему yaml для сценария, там есть еще одна магия, которую надо понять. Local Backend

Агент Woodpecker может запустить код в контейнерах Docker, k8s и запускать сценарии в среде bash/fish локально на системе, где установлен агент Woodpecker. Локальный запуск опасен, и стоит понимать возможные риски для системы.

Когда мы используем локальный backend для запуска сценария, параметр image используется для выбора того, какой shell (Bash или Fish) будет использован для запуска команд.