Close

Tips voor scriptingtaken met Bitbucket Pipelines

Headshot van Sten Pittet
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.

Genereer SSH-sleutels rechtstreeks vanuit Bitbucket Pipelines

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.

Bitbucket Pipelines houdt beveiligde variabelen verborgen in logs

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.

Sten Pittet
Sten Pittet

I've been in the software business for 10 years now in various roles from development to product management. After spending the last 5 years in Atlassian working on Developer Tools I now write about building software. Outside of work I'm sharpening my fathering skills with a wonderful toddler.


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.

Toelichting DevOps

DevOps-community

Toelichting DevOps

Simulatieworkshop

Afbeelding van kaart

Gratis aan de slag

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up