07
Дек
2021

Как получать данные с вебхук ивента в правильном порядке?

Суть такая - при запуске пайплайна в gitlab тот в вебхуке выдает подробные данные, проблема в том, что все этапы выдаются рандомно, а мне нужно сохранять их в правильном порядке и через телеграм бота получать сообщения об их статусе

Каким образом можно настроить правильное получение этапов?

Мой код:

$input = file_get_contents("php://input");
$json = json_decode($input);

function sendRequest($method, $post = '')

{
    $ch = curl_init('https://api.telegram.org/bot[BOT_TOKEN]' . '/' . $method);

if ($post) {
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$json = curl_exec($ch);
curl_close($ch);

$error_data = json_decode($json);

if (!$error_data->ok) {
    $error_post = [
        'chat_id' => $user_id,
        'text' => json_encode($post, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n" . $error_data->description
    ];
    sendRequest('sendMessage', $error_post);
}
return $json;
}

// То, что отправляет GitLab
if ($json) {

if ($json->object_kind == 'pipeline') { // Если пришел Pipeline event

    $ref = $json->object_attributes->ref;
    $project_name = $json->project->name;
    $name = $json->user->name;
    $username = $json->user->username;
    $stages = $json->object_attributes->stages[0];

    for ($i = 0; $i <= 10; $i++) { // $i это количество этапов

        $stage = $json->builds[$i]->stage;
        $job_name = $json->builds[$i]->name;
        $status = $json->builds[$i]->status;
        $finished_at = $json->builds[$i]->finished_at;
        $duration = $json->builds[$i]->duration;

        $object_attributes_status = $json->object_attributes->status;
        $detailed_status = $json->object_attributes->detailed_status;
        
        if ($status == 'created' || $status == 'running') {
            $post = [
                'chat_id' => $user_id,
                'text' => '🛠 <b>Webhook caught pipeline event!</b>' . "\n\n" . '<b>Project name:</b> ' . $project_name . "\n" . '<b>Stage:</b> ' . $stage . "\n" . '<b>Job name: </b>' . $job_name . "\n" . '<b>Status: </b>' . $status,
                'parse_mode' => 'html'
            ];
            sendRequest('sendMessage', $post);
        }
        if ($status == 'success') {
            $post = [
                'chat_id' => $user_id,
                'text' => '🛠 <b>Webhook caught pipeline event!</b>' . "\n\n" . '<b>Project name:</b> ' . $project_name . "\n" . '<b>Stage:</b> ' . $stage . "\n" . '<b>Job name: </b>' . $job_name . "\n" . '<b>Status: </b>' . $status
                    . "\n\n" . '<b>Finished at: </b>' . $finished_at . "\n" . '<b>Duration: </b>' . $duration,
                'parse_mode' => 'html'
            ];
            sendRequest('sendMessage', $post);
        }
    }
}
}

Этапы в том порядке, который присылает гитлаб и который мне нужен:

stages

То, что выводится мне:

stages

Источник: https://ru.stackoverflow.com/questions/1357990/%D0%9A%D0%B0%D0%BA-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D1%82%D1%8C-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%81-%D0%B2%D0%B5%D0%B1%D1%85%D1%83%D0%BA-%D0%B8%D0%B2%D0%B5%D0%BD%D1%82%D0%B0-%D0%B2-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC-%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B5

Тебе может это понравится...

Добавить комментарий