Cloudflare Pages ja GitHub Actions

Published on Sunday, January 22, 2023

Cloudflare Pages ja GitHub Actions

Cloudflaren Pages-palvelu mahdollistaa staattisten sivujen luonnin ja jakelun asiakkaille. Pages sisältää myös oman continuous deployment -toiminnallisuuden (CD), mutta siinä olevien erinäisten rajoitusten takia voi jossain tilanteissa olla helpompaa käyttää esim. GitHubin CD-toimintoja, ja jättää Pagesin vastuulle vain sisällön jakelu.

Wrangler apuun sisällön siirrossa

Tiedostojen siirtäminen Pagesiin CloudFlaren ulkopuolelta tapahtuu yrityksen oman Wrangler-työkalun avulla. Wrangleria asentaessa kannattaa pitää huolta, että ohjelmasta lataa vähintään 2:lla alkavan version, koska Pages-toiminnallisuutta ei ole työkalun 1-alkuisissa versioissa.

Wrangler -komento

Valitun Pages-sivuston sisällön korvaaminen uudella tapahtuu seuraavalla komennolla:

wrangler pages publish KANSIO --project-name=PROJEKTIN_NIMI

KANSIO korvataan sen kansion nimellä, josta sisältö löytyy (sen sisältämät alikansiot kopioidaan automaattisesti samalla). PROJEKTIN_NIMI korvataan halutun CloudFlare Pages -projektin nimellä.

GitHub Actions

GitHub Actionsin kanssa wrangleria ei kannata asentaa manuaalisesti, vaan käyttää valmista wrangler-action:ia. Jotta wrangler-action toimii oikein GitHubissa, tarvitsee GitHub-projektin asetuksiin lisätä kaksi salaisuutta (tässä esimerkissä CF_API_TOKEN ja CF_ACCOUNT_ID), joiden avulla wrangler osaa kirjautua sisään CloudFlareen.

API Tokenin luonti CloudFlaressa

API Tokenin avulla Wrangler pystyy kirjautua sisään CloudFlaren tilille tarvittavilla oikeuksilla. Kyseiselle operaatiolle ei ole valmista API Tokenia palvelussa, vaan se on tehtävä itse.

Aluksi avataan selaimessa CloudFlaren oma profiilisivu (ja tarvittaessa kirjaudutaan sisään palveluun), jonka jälkeen vasemmasta reunasta valitaan API Tokens.

CloudFlare API Tokens

seuraavaksi painetaan Create token -nappia

Create token

ja valitaan listan pohjalta Custom token -osion alta Get Started, koska Pagesilla ei ainakaan vielä ole valmista pohjaa tähän operaatioon.

CloudFlare Custom Token

Sitten annetaan Tokenille kuvaava nimi (tässä esimerkissä Pages upload) ja valitaan Permissions -kohtaan valinnat Account, Cloudflare pages ja Edit.

CloudFlare Custom Token Edit

ja lopulta siirrytään Continue to summary -napilla hyväksyntäsivulle ja kirjataan talteen juuri luodun

Continue to summary

Tokenin merkkijono. Kyseistä merkkijonoa ei saa enää tämän jälkeen näkyviin, joten jos se jää kirjaamatta ylös, täytyy vain luoda toinen tokenin.

CloudFlare Account ID

CloudFlare Account ID löytyy puolestaan CloudFlaren DashBoardilta, josta valitaan kirjautumisen jälkeen haluttu domain ja sen Overview-osio. Tämän jälkeen etsitään oikealta API-osion alta Account ID -merkkjono, jonka voi kopioida talteen Click to copy -valinnalla.

CloudFlare account ID

GitHubin Secrets

GitHubissa projektin salaisuuksia (Secrets) pääsee muokkaamaan (olettaen että käyttöoikeudet ovat kunnossa) aukaisemalla projektin sivun GitHubissa, ja painamalla yläpalkista Settings-nappia

GitHub settings

ja valitsemalla Secrets and variables valikosta Actions.

GitHub secrets and variables

uuden salaisuuden saa lisättyä New repository secret -napilla

GitHub new repository secret

Ensimmäinen lisättävä salaisuus on CF_API_TOKEN ja sille syötetään aiemmin luotu API token. CF_ACCOUNT_ID -salaisuuden sisällöksi tulee puolestaan CloudFlare Account ID -merkkijono. Merkkijonojen sisältöä ei voi tarkistaa enää niiden tallentamisen jälkeen, joten väärän syötteen kohdalla kannattaa vanha arvo poistaa listalta ja luoda salaisuus uudelleen.

GitHub repository secrets

GitHub Actionsin skripti

Kun salaisuudet ovat paikallaan, voi GitHub Actionsiin lisätä seuraavan skriptin, joka lähettää uudet tiedostot wranglerin avulla oikeaan paikkaan

- name: Upload to pages
  uses: cloudflare/wrangler-action@2.0.0
  with:
    apiToken: ${{ secrets.CF_API_TOKEN }}
    accountId: ${{ secrets.CF_ACCOUNT_ID }}
    command: pages publish KANSIO --project-name=PROJEKTIN_NIMI

KANSIO korvataan sen kansion nimellä, josta sisältö löytyy (sen sisältämät alikansiot kopioidaan automaattisesti samalla). PROJEKTIN_NIMI korvataan halutun CloudFlare Pages -projektin nimellä.

☁️