Artikelen
Tutorials
Interactieve handleidingen
Tips voor scriptingtaken met Bitbucket Pipelines
Sten Pittet
Mede-auteur
Met Bitbucket Pipelines kun je snel een continue integratie- of continue leveringsworkflow voor je repository's implementeren. Een essentieel onderdeel van dit proces is om handmatige processen om te zetten in scripts die automatisch door een machine kunnen worden uitgevoerd zonder dat er menselijke tussenkomst bij nodig is. Soms kan het echter lastig zijn om taken te automatiseren, omdat je problemen hebt met authenticatie, het installeren van afhankelijkheden of het melden van problemen. Deze gids helpt je met wat tips voor het schrijven van je scripts!
Tijd
30 minuten
Publiek
Continue implementatie en/of Bitbucket Pipelines is nieuw voor je
Stap 1: Log geen gevoelige informatie!
Voor je de volgende stap zet in de wereld van automatisering, moet je je logs controleren en ervoor zorgen dat je geen gevoelige gegevens uitvoert, zoals API-sleutels, inloggegevens of informatie die je systeem in gevaar kan brengen. Zodra je Bitbucket Pipelines gaat gebruiken om je scripts uit te voeren, worden de logs opgeslagen en leesbaar voor iedereen die toegang heeft tot je repository.
Stap 2: Gebruik SSH-sleutels om verbinding te maken met externe servers
Authenticatie is vaak een van de lastigste onderdelen van automatisering. SSH-sleutels hebben het dubbele voordeel dat een verbinding met externe servers eenvoudig te beheren en zeer veilig is. Met Bitbucket Pipelines kun je eenvoudig een nieuw sleutelpaar genereren dat bij elke uitvoering van een pipeline kan worden gebruikt om verbinding te maken met externe servers.
Je hoeft alleen maar de openbare sleutel in je externe server te kopiëren om er verbinding mee te kunnen maken vanuit je actieve pipeline. Als de SSH-sleutels bijvoorbeeld eenmaal zijn ingesteld op de server (je kunt een URL of IP-adres gebruiken), toont het onderstaande script bestanden in de map /var/www zonder dat je een wachtwoord hoeft op te geven.
bitbucket-pipelines.yml
image: node:4.6.0
pipelines:
default:
- step:
script:
- ssh <user>@<server> ls -l /var/www
Vergeet niet om alle servers te registreren waarmee je verbinding moet maken in het gedeelte Bekende hosts, anders loopt je pipeline vast terwijl deze wacht op goedkeuring wanneer je verbinding probeert te maken met de externe server.
Stap 3: Gebruik beveiligde omgevingsvariabelen voor API-sleutels en inloggegevens
Als je een externe API als onderdeel van je scripts moet gebruiken, is de kans groot dat je API-provider je hun beschermde resources laat gebruiken met een API-sleutel. Je kunt veilig inloggegevens toevoegen aan Bitbucket Pipelines met behulp van beveiligde omgevingsvariabelen. Als je deze hebt opgeslagen kun je ze oproepen in je scripts en blijven ze verborgen in de log-uitvoer.
Stap 4: Voer opdrachten uit in niet-interactieve modus
Als je afhankelijkheden moet installeren als onderdeel van je script, moet je ervoor zorgen dat de gebruiker niet wordt gevraagd om validatie of invoer. Bekijk de documentatie van de opdrachten die je gebruikt om te zien of er een markering is waarmee je ze op een niet-interactieve manier kunt uitvoeren.
De markering -y zal bijvoorbeeld in de onderstaande opdracht PostgreSQL installeren op een Debian-server.
apt-get install -y postgresql
En met de markering -q kun je Google Cloud SDK-opdrachten op een niet-interactieve manier uitvoeren.
gcloud -q app deploy app.yaml
Stap 5: Bouw je eigen kant-en-klare Docker-images
Het kan erg tijdrovend zijn om de afhankelijkheden te installeren die nodig zijn voor het uitvoeren van je pipeline. Je kunt veel tijd besparen door je eigen Docker-image te maken met de basistools en -pakketten die nodig zijn om je toepassing te bouwen en testen.
In de volgende Pipelines-configuratie installeren we bijvoorbeeld AWS CLI aan het begin om het later te gebruiken om de toepassing te implementeren op AWS Elastic Beanstalk.
bitbucket-pipelines.yml
image: node:7.5.0
pipelines:
default:
- step:
script: # Modify the commands below to build your repository.
- apt-get update && apt-get install -y python-dev
- curl -O https://bootstrap.pypa.io/get-pip.py
- python get-pip.py
- pip install awsebcli --upgrade
- npm install
- npm test
- eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
- eb deploy hw-eb-tutorial
Het probleem hier is dat de AWS CLI niet bij elke commit verandert, wat betekent dat we wat tijd verspillen aan het installeren van een afhankelijkheid die standaard gebundeld zou kunnen worden.
De volgende Dockerfile kan worden gebruikt om een aangepaste Docker-image te maken die klaar is voor Elastic Beanstalk-implementaties.
Dockerfile
FROM node:7.5.0
RUN apt-get update \ && apt-get install -y python-dev \ && cd /tmp \ && curl -O https://bootstrap.pypa.io/get-pip.py \ && python get-pip.py \ && pip install awsebcli --upgrade \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
Als ik het onder de referentie spittet/my-custom-image push, kan ik mijn Bitbucket Pipelines-configuratie vereenvoudigen zodat deze alleen de opdrachten bevat die nodig zijn om mijn toepassing te bouwen, testen en implementeren.
bitbucket-pipelines.yml
image: spittet/my-custom-image
pipelines:
default:
- step:
script: # Modify the commands below to build your repository.
- npm install
- npm test
- eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
- eb deploy hw-eb-tutorial
Een laatste opmerking: scripts zijn ook code
Deze tips moeten je helpen handmatige taken om te zetten in geautomatiseerde processen die herhaaldelijk en betrouwbaar kunnen worden uitgevoerd door een service als Bitbucket Pipelines. Uiteindelijk zijn deze processen de bewakers van je releases en vormen ze krachtige tools die de implementatie van je volledige productieomgevingen op meerdere servers en platforms kunnen triggeren.
Daarom moet je je automatiseringsscripts als code behandelen en ze door dezelfde beoordelings- en kwaliteitsprocessen leiden die je voor je code hebt. Gelukkig is dit iets dat eenvoudig kan worden gedaan met Bitbucket, omdat je pipeline-configuratie op je code wordt afgestemd, waardoor je pull requests in de juiste context kunt aanmaken.
Tot slot: vergeet niet om scripts in een testomgeving uit te voeren voordat je ze toepast op productie. Deze extra paar minuten kunnen voorkomen dat je per ongeluk productiegegevens verwijdert.
Deel dit artikel
Volgend onderwerp
Aanbevolen artikelen
Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.