0 added
0 removed
Original
2026-01-01
Modified
2026-02-19
1
Эта статья продолжает цикл переводных заметок об OpenWhisk от автора <a>Priti Desai</a>. Сегодня будут рассмотрены примеры развертывания GitHub webhook, периодических сигналов, а также приведено простейшее приложение для отправки сообщений в Slack.<h2>GitHub webhook</h2>
1
Эта статья продолжает цикл переводных заметок об OpenWhisk от автора <a>Priti Desai</a>. Сегодня будут рассмотрены примеры развертывания GitHub webhook, периодических сигналов, а также приведено простейшее приложение для отправки сообщений в Slack.<h2>GitHub webhook</h2>
2
Функции OpenWhisk могут быть запущены разными событиями (к примеру, push, pull request и т.п.) из <a>репозитория GitHub</a>.<p>Давайте посмотрим, как можно развернуть функцию для обработки GitHub webhook, используя <em>wskdeploy</em>.</p>
2
Функции OpenWhisk могут быть запущены разными событиями (к примеру, push, pull request и т.п.) из <a>репозитория GitHub</a>.<p>Давайте посмотрим, как можно развернуть функцию для обработки GitHub webhook, используя <em>wskdeploy</em>.</p>
3
<h3>Шаг первый</h3>
3
<h3>Шаг первый</h3>
4
Создаем файл-манифест:<p>Для обработки событий с GitHub надо указать источник событий /whisk.system/github/webhook в качестве условия для срабатывания:</p>
4
Создаем файл-манифест:<p>Для обработки событий с GitHub надо указать источник событий /whisk.system/github/webhook в качестве условия для срабатывания:</p>
5
<a>Скопировать код</a><h3>Шаг второй</h3>
5
<a>Скопировать код</a><h3>Шаг второй</h3>
6
Создаем файл для развертывания, в котором выставляем значения входных параметров username, repository, accessToken и events для условной обработки источника событий <strong>GitHubWebhookTrigger</strong>:<a>Скопировать код</a><h3>Шаг третий</h3>
6
Создаем файл для развертывания, в котором выставляем значения входных параметров username, repository, accessToken и events для условной обработки источника событий <strong>GitHubWebhookTrigger</strong>:<a>Скопировать код</a><h3>Шаг третий</h3>
7
Разворачиваем функцию:<a>Скопировать код</a><p>Мы развернули функцию <strong>hello world</strong>, вызываемую из GitHub каждый раз при обновлении кода в репозитории GitHub, и использовали для этого webhook:</p>
7
Разворачиваем функцию:<a>Скопировать код</a><p>Мы развернули функцию <strong>hello world</strong>, вызываемую из GitHub каждый раз при обновлении кода в репозитории GitHub, и использовали для этого webhook:</p>
8
Можем проверить развернутую функцию, создавая новые правки кода в репозитории GitHub. При этом будут возвращаться простые приветственные сообщения. Попробуем использовать полезную нагрузку при обновлении кода, присылаемую от GitHub через POST запрос. Эти данные доступны в качестве параметров функции, например:<blockquote><em>function main(params) {</em></blockquote><blockquote><em> console.log("GitHub repository is at ", params.repository.url);</em></blockquote><blockquote><em> return {commits: params.commits};</em></blockquote><blockquote><em>}</em></blockquote>Здесь фрагмент полезной нагрузки, полученной при обычной правке README.md:<a>Скопировать код</a><p>Можно изучить детализированное описание срабатывания GitHub webhook <a>тут</a></p>
8
Можем проверить развернутую функцию, создавая новые правки кода в репозитории GitHub. При этом будут возвращаться простые приветственные сообщения. Попробуем использовать полезную нагрузку при обновлении кода, присылаемую от GitHub через POST запрос. Эти данные доступны в качестве параметров функции, например:<blockquote><em>function main(params) {</em></blockquote><blockquote><em> console.log("GitHub repository is at ", params.repository.url);</em></blockquote><blockquote><em> return {commits: params.commits};</em></blockquote><blockquote><em>}</em></blockquote>Здесь фрагмент полезной нагрузки, полученной при обычной правке README.md:<a>Скопировать код</a><p>Можно изучить детализированное описание срабатывания GitHub webhook <a>тут</a></p>
9
<h2>Сигналы</h2>
9
<h2>Сигналы</h2>
10
Функции OpenWhisk могут периодически запускаться по внутреннему сигналу (что-то вроде задач cron). Давайте попробуем добавить условное срабатывание по сигналу через wskdeploy.<h3>Шаг первый</h3>
10
Функции OpenWhisk могут периодически запускаться по внутреннему сигналу (что-то вроде задач cron). Давайте попробуем добавить условное срабатывание по сигналу через wskdeploy.<h3>Шаг первый</h3>
11
Для обработки сигналов надо указать источник событий /whisk.system/alarms/alarm в качестве условия для срабатывания в манифесте:<a>Скопировать код</a><h3>Шаг второй</h3>
11
Для обработки сигналов надо указать источник событий /whisk.system/alarms/alarm в качестве условия для срабатывания в манифесте:<a>Скопировать код</a><h3>Шаг второй</h3>
12
Создаем файл для развертывания, указываем cron в качестве входного условия, со значением <strong>Every12Hours</strong>. Можно также использовать оба варианта, используемых в cron, традиционный и улучшенный:<blockquote><em><Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week></em></blockquote><blockquote><em>или</em></blockquote><blockquote><em><Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week> <Year></em></blockquote>Содержимое файла deployment.yaml:<a>Скопировать код</a><p>Есть возможность указать полезную нагрузку, передаваемую при срабатывании сигнала (передается в виде параметра функции при каждом срабатывании) в виде параметра <strong>trigger_payload</strong>:</p>
12
Создаем файл для развертывания, указываем cron в качестве входного условия, со значением <strong>Every12Hours</strong>. Можно также использовать оба варианта, используемых в cron, традиционный и улучшенный:<blockquote><em><Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week></em></blockquote><blockquote><em>или</em></blockquote><blockquote><em><Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week> <Year></em></blockquote>Содержимое файла deployment.yaml:<a>Скопировать код</a><p>Есть возможность указать полезную нагрузку, передаваемую при срабатывании сигнала (передается в виде параметра функции при каждом срабатывании) в виде параметра <strong>trigger_payload</strong>:</p>
13
<a>Скопировать код</a><h3>Шаг третий</h3>
13
<a>Скопировать код</a><h3>Шаг третий</h3>
14
Разворачиваем функцию:<a>Скопировать код</a><p>С этого момента у ас есть функция <strong>hello world</strong>, запускаемая каждые 12 часов. Можем проверить ее путем активации условия, как это было показано <a>ранее</a></p>
14
Разворачиваем функцию:<a>Скопировать код</a><p>С этого момента у ас есть функция <strong>hello world</strong>, запускаемая каждые 12 часов. Можем проверить ее путем активации условия, как это было показано <a>ранее</a></p>
15
<h2>Пакет для Slack</h2>
15
<h2>Пакет для Slack</h2>
16
Для отправки сообщений в <a>Slack</a> предлагается <a>пакет для Slack</a>. Давайте рассмотрим привязку пакета с использованием wskdeploy.<h3>Шаг первый</h3>
16
Для отправки сообщений в <a>Slack</a> предлагается <a>пакет для Slack</a>. Давайте рассмотрим привязку пакета с использованием wskdeploy.<h3>Шаг первый</h3>
17
Создаем файл-манифест с привязкой пакета для Slack. Для этого указываем его в качестве зависимости, задавая в location значение /whisk.system/slack:<blockquote><em>packages:</em></blockquote><blockquote><em> SlackPackage:</em></blockquote><blockquote><em> dependencies:</em></blockquote><blockquote><em> slack-package-to-post-messages:</em></blockquote><blockquote><em> location: /whisk.system/slack</em></blockquote><blockquote><em> inputs:</em></blockquote><blockquote><em> username: $SLACK_USERNAME</em></blockquote><blockquote><em> url: $SLACK_URL</em></blockquote><blockquote><em> channel: $SLACK_CHANNEL</em></blockquote>В первую очередь, надо настроить поддержку для <a>входящего webhook</a> в нашем рабочем окружении Slack. Настроить новый webhook для отправки сообщений в канал Slack можно по <a>этой пошаговой инструкции</a>.<p>Теперь добавляем пакет для Slack в наше приложение для отправки сообщений в канал Slack каждый час с помощью такого манифеста:</p>
17
Создаем файл-манифест с привязкой пакета для Slack. Для этого указываем его в качестве зависимости, задавая в location значение /whisk.system/slack:<blockquote><em>packages:</em></blockquote><blockquote><em> SlackPackage:</em></blockquote><blockquote><em> dependencies:</em></blockquote><blockquote><em> slack-package-to-post-messages:</em></blockquote><blockquote><em> location: /whisk.system/slack</em></blockquote><blockquote><em> inputs:</em></blockquote><blockquote><em> username: $SLACK_USERNAME</em></blockquote><blockquote><em> url: $SLACK_URL</em></blockquote><blockquote><em> channel: $SLACK_CHANNEL</em></blockquote>В первую очередь, надо настроить поддержку для <a>входящего webhook</a> в нашем рабочем окружении Slack. Настроить новый webhook для отправки сообщений в канал Slack можно по <a>этой пошаговой инструкции</a>.<p>Теперь добавляем пакет для Slack в наше приложение для отправки сообщений в канал Slack каждый час с помощью такого манифеста:</p>
18
<a>Скопировать код</a><p>Содержимое функции post-to-slack.js можно <a>глянуть здесь</a>.</p>
18
<a>Скопировать код</a><p>Содержимое функции post-to-slack.js можно <a>глянуть здесь</a>.</p>
19
<h3>Шаг второй</h3>
19
<h3>Шаг второй</h3>
20
Создаем файл для развертывания:<blockquote><em>application:</em></blockquote><blockquote><em> name: AppToPostToSlack</em></blockquote><blockquote><em> packages:</em></blockquote><blockquote><em> SlackPackage:</em></blockquote><blockquote><em> actions:</em></blockquote><blockquote><em> post-to-slack:</em></blockquote><blockquote><em> inputs:</em></blockquote><blockquote><em> message: "Hello from WskDeploy!"</em></blockquote><blockquote><em> slack_package: slack-package-to-post-messages</em></blockquote><blockquote><em> triggers:</em></blockquote><blockquote><em> everyhour:</em></blockquote><blockquote><em> inputs:</em></blockquote><blockquote><em> cron: "0 */1 * * *"</em></blockquote><h3>Шаг третий</h3>
20
Создаем файл для развертывания:<blockquote><em>application:</em></blockquote><blockquote><em> name: AppToPostToSlack</em></blockquote><blockquote><em> packages:</em></blockquote><blockquote><em> SlackPackage:</em></blockquote><blockquote><em> actions:</em></blockquote><blockquote><em> post-to-slack:</em></blockquote><blockquote><em> inputs:</em></blockquote><blockquote><em> message: "Hello from WskDeploy!"</em></blockquote><blockquote><em> slack_package: slack-package-to-post-messages</em></blockquote><blockquote><em> triggers:</em></blockquote><blockquote><em> everyhour:</em></blockquote><blockquote><em> inputs:</em></blockquote><blockquote><em> cron: "0 */1 * * *"</em></blockquote><h3>Шаг третий</h3>
21
Разворачиваем функцию:<a>Скопировать код</a><p>На этом шаге у нас уже есть функция post-to-slack, запускаемая 1 раз за час. Можно ее проверить путем активации условия, как это было показано <a>ранее</a>. После активации мы должны получить новое сообщение на канале Slack:</p>
21
Разворачиваем функцию:<a>Скопировать код</a><p>На этом шаге у нас уже есть функция post-to-slack, запускаемая 1 раз за час. Можно ее проверить путем активации условия, как это было показано <a>ранее</a>. После активации мы должны получить новое сообщение на канале Slack:</p>
22
<blockquote><em>Activation: post-to-slack (9909dd5229e84526bff9902a2cd860df)</em></blockquote><blockquote><em>[</em></blockquote><blockquote><em> </em><em>"2</em><em>017-09-12T23:05:17.17872899Z stdout: Hello from WskDeploy!",</em></blockquote><blockquote><em> "2017-09-12T23:05:17.549177677Z stdout: Posted message to slack"</em></blockquote><blockquote><em>]</em></blockquote><h3>Другие статьи цикла</h3>
22
<blockquote><em>Activation: post-to-slack (9909dd5229e84526bff9902a2cd860df)</em></blockquote><blockquote><em>[</em></blockquote><blockquote><em> </em><em>"2</em><em>017-09-12T23:05:17.17872899Z stdout: Hello from WskDeploy!",</em></blockquote><blockquote><em> "2017-09-12T23:05:17.549177677Z stdout: Posted message to slack"</em></blockquote><blockquote><em>]</em></blockquote><h3>Другие статьи цикла</h3>
23
<a>Бессерверные вычисления на основе OpenWhisk, часть 1</a><a>Бессерверные вычисления на основе OpenWhisk, часть 3</a><a>Бессерверные вычисления на основе OpenWhisk, часть 4</a>
23
<a>Бессерверные вычисления на основе OpenWhisk, часть 1</a><a>Бессерверные вычисления на основе OpenWhisk, часть 3</a><a>Бессерверные вычисления на основе OpenWhisk, часть 4</a>