WordPress: bei neuem Beitrag Drone CI Pipeline ausführen

Wenn ich auf meinem Blog einen neuen Beitrag erstelle, oder einen aktualisiere/lösche, möchte ich gerne eine CI/CD-Pipeline auf meinem Drone Build-Server starten.

Dazu habe ich folgendes Plugin geschrieben:

<?php
/**
 * Plugin Name: Drone CI Build
 * Plugin URI: https://www.tino-kuptz.de/development/70321/wordpress-bei-neuem-beitrag-drone-ci-pipeline-ausfuehren/
 * Description: Sehr simples Plugin, welches bei einem neuen Post einfach nur eine Drone CI Pipeline ausführt
 * Version: 1.0.0
 * Author: Tino Kuptz
 * Author URI: https://www.tino-kuptz.de/
 */

define('DRONE_CI_ROOT', 'https://ci.domain.de');
define('DRONE_CI_REPO', 'org/repo');
define('DRONE_CI_TOKEN', 'XXXXXXXX');

add_action('publish_post', 'tk_drone__publish_post', 10, 2);
function tk_drone__publish_post($ID, $post) {
    tk_drone__send_external_hook();
}


function tk_drone__send_external_hook() {
    $url = curl_init(DRONE_CI_ROOT .'/api/repos/'. DRONE_CI_REPO .'/builds?access_token='. DRONE_CI_TOKEN);
    curl_setopt($url, CURLOPT_POST, true);
    curl_setopt($url, CURLOPT_POSTFIELDS, '');
    curl_setopt($url, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($url);
    if(curl_error($url)) die(curl_error($url));
}
?>

Den Drone CI-Token bekommt man, indem man mit seinem Benutzer links unten auf „Account“ klickt.

Das Plugin wird einfach im WordPress wp-content/plugins z.B. als start-build.php abgespeichert, und via WordPress aktiviert. Es triggert dann via HTTP API den Build der Anwendung. Wichtig: es triggert nur den Build, es wartet nicht auf Fertigstellung.

Die Drone-Pipeline muss dann als Trigger custom haben, denn den triggern wir mit diesem Post.

Beispiel:

kind: pipeline
name: default

steps:
- ...
- ...

trigger:
  event:
  - custom

Der Trigger ist identisch zu der Schaltfläche „New Build“ im Drone-Interface.