Drone CI: Statische Seiten zu Cloudflare Pages publishen
Eigentlich sagt der Titel das schon, allerdings noch mal als Ziel ausformuliert: wenn wir via Drone CI einen neuen Build anstoßen, soll die anschließend generierte statische Seite in der Pipeline via wranler zu Cloudflare Pages gepusht werden.
Zuerst brauchen wir nen API Token. Den unter folgender Adresse genrieren:
https://dash.cloudflare.com/profile/api-tokens
Dort gibt es eine Vorlage für Cloudflare Workers.
Den durchklickern, in Drone als Secret mit dem Namen CLOUDFLARE_API_TOKEN
speichern.
Ebenfalls brauchen eine Account-ID. Die finden wir in unserer Zone auf „Overview“, in der Rechten Seite unter „API“
Die hinterlegen als als Secret mit den Namen CLOUDFLARE_ACCOUNT_ID
in Drone anlegen.
In der .drone.yml
des Projektes kann folgender Schritt genutzt werden, um den Inhalt von .output/public
als statische Seite zu Cloudflare Pages Projekt tinokuptzblog
zu deployen:
- name: deploy-to-cloudflare
image: node:22
environment:
CLOUDFLARE_ACCOUNT_ID:
from_secret: CLOUDFLARE_ACCOUNT_ID
CLOUDFLARE_API_TOKEN:
from_secret: CLOUDFLARE_API_TOKEN
commands:
- npm install wrangler
- npx wrangler pages deploy /drone/src/.output/public --project-name=tinokuptzblog
In meiner .drone.yml
kommt dieser Schritt direkt nach dem Build, der Build legt die statischen HTML- und CSS-Dateien in .output/public
ab, und dieser Schritt hier pusht das zu Cloudflare Pages.
Ich hatte ursprünglich das Problem, dass wrangler mein Projekt immer in einen Preview pusht, egal welche Branch ich angegeben habe. Um das zu beheben musste das Projekt selber via
npm install wrangler
set CLOUDFLARE_ACCOUNT_ID=XXX
set CLOUDFLARE_API_TOKEN=XXX
npx wrangler pages project create tinokuptzblog
erstellen, bei den via UI erstelltem Projekt war es mir nicht möglich, zu Production zu pushen. Nach der Anlage via wrangler funktionierte das Pushen zu Produktion allerdings easy problemlos.
Nach den Schritten oben konnte meine Pipeline erfolgreich komplette Verzeichnisstrukturen und statische HTML-/CSS-/JS-/…-Dateien zu Cloudflare Pages pushen 💪