Artikelen
Tutorials
Interactieve handleidingen
Meer informatie over continue levering met Bitbucket Pipelines
Sten Pittet
Mede-auteur
In deze handleiding behandelen we hoe je Bitbucket Pipelines kunt gebruiken om een workflow voor continue levering te implementeren. Lees verder.
Tijd
30 minuten
Publiek
Continue implementatie en/of Bitbucket Pipelines is nieuw voor je
Het uitbrengen van een nieuwe functie is altijd een spannend moment omdat je op het punt staat je klanten nieuwe mogelijkheden te bieden. Maar het kan ook een riskante oefening zijn die veel voorbereiding vereist, waardoor je team terughoudend is om het vaak te doen. En hoe langer je wacht, hoe moeilijker het wordt om naar productie te implementeren. Veranderingen stapelen zich op, het is moeilijk om de scope van de verandering te begrijpen en het zal moeilijk zijn om de hoofdoorzaken te identificeren als er problemen optreden in de productie.
Een eenvoudige manier om de angst en de kosten van het implementeren van software weg te nemen, is door dit te automatiseren en vaker kleinere wijzigingen te releasen. Allereerst bespaar je talloze uren die normaal gesproken worden besteed aan het voorbereiden van de release. Maar je vermindert ook het risico van het implementeren van software door voor elke release een veel kleiner scope te hebben, waardoor het gemakkelijker wordt omgevingen te controleren en problemen op te lossen.
Deze implementatie-automatisering is iets dat je vandaag nog gemakkelijk kunt met Bitbucket Cloud. Voor elk van je repository's kun je een pipeline configureren die automatisch bij elke push je code bouwt, test en implementeert in je omgevingen. In deze handleiding behandelen we hoe je Bitbucket Pipelines kunt gebruiken om een workflow voor continue levering te implementeren.
Continue levering versus continue implementatie
Continue levering is een werkwijze om ervoor te zorgen dat je code altijd gereleased kan worden, zelfs als je niet elke wijziging doorvoert naar productie. Het is aanbevolen om je productie zo vaak mogelijk bij te werken om ervoor te zorgen dat je de scope van de wijzigingen klein houdt, maar uiteindelijk heb jij de controle over het ritme van je releases.
Bij continue implementatie worden nieuwe wijzigingen die naar de repository worden doorgevoerd automatisch geïmplementeerd voor productie als ze de tests doorstaan. Dit legt meer nadruk (lees: druk) op je testcultuur, maar het is een geweldige manier om de feedbackloop met je klanten te versnellen.
Een continue levering-pipeline implementeren
In dit voorbeeld breiden we de eenvoudige node.js-app uit die we in de Tutorial Continue integratie bouwden, door een continue levering-pipeline toe te voegen die automatisch implementeert naar staging als de build de test doorstaat. We gaan twee verschillende strategieën zien voor de productie-implementatie: één die gebruikmaakt van branches en pull requests en de ander van aangepaste pipelines en handmatige triggers.
In beide voorbeelden gebruiken we een eenvoudige Node.js-toepassing die 'Hello World' in je browser toont. We zullen deze toepassing op beide manieren implementeren in staging- en productieomgevingen die op Heroku worden gehost.
Onze zeer eenvoudige Hello World-toepassing
De implementatie naar Heroku voorbereiden
Meld je aan voor Heroku om te beginnen.
Installeer vervolgens de Heroku CLI.
Werk package.json bij tot die er ongeveer zo uitziet:
{
"name": "cdtutorial",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node server.js",
"test": "mocha --exit"
},
"repository": {
"type": "git",
"url": "git+ssh://git@bitbucket.org/pmmquickstartguides01/cdtutorial.git"
},
"author": "",
"license": "ISC",
"bugs": {
"url": "https://bitbucket.org/pmmquickstartguides01/cdtutorial/issues"
},
"homepage": "https://bitbucket.org/pmmquickstartguides01/cdtutorial#readme",
"dependencies": {
"express": "^4.17.3"
},
"devDependencies": {
"mocha": "^9.2.2",
"supertest": "^6.2.2"
}
}
Werk het bestand server.js bij tot die er ongeveer zo uitziet:
var express = require("express");
var app = express();
app.get("/", function (req, res) {
res.send("Hello World!");
});
app.listen(process.env.PORT || 3000, function () {
console.log("Example app listening on port 3000!");
});
module.exports = app;
Let op de wijziging aan app.listen (). Dit omvat nu ook process.env.PORT dat is ingesteld door Heroku.
Voeg een Procfile toe aan de hoofdmap van de voorbeeldrepository door het uitvoeren van:
touch Procfile
Voeg vervolgens de volgende tekst toe aan het Profile-bestand:
web: npm start
Log in bij Heroku, klik op het gebruikerspictogram in de rechterbovenhoek, klik op Accountinstelling en scroll omlaag om de API-sleutel te vinden.
Voeg vervolgens een omgevingsvariabele toe aan Bitbucket Pipelines zodat we naar Heroku kunnen implementeren:
- HEROKU_API_KEY: je kunt je API-sleutel vinden in je Heroku-account
Ga naar Pipelines > Omgevingsvariabelen in je repository-instellingen om deze variabele toe te voegen.
Omgevingsvariabelen instellen om naar Heroku te implementeren
In deze gids gebruiken we Heroku, maar het is zeker mogelijk om dit voorbeeld aan te passen aan andere hostingdiensten. Gebruik deze handleiding als referentie voor Heroku.
Continue levering met branches als poort naar productie
Deze configuratie is geschikt voor teams met speciale release-branches die kunnen worden toegewezen aan een implementatie. Deze stelt je ook in staat om wijzigingen in een pull request te bekijken voordat ze in productie worden genomen.
In deze set-up zulllen we 2 verschillende branches gebruiken om implementaties te activeren:
- main: elke push naar main zal de code implementeren in een staging-omgeving na het uitvoeren van de tests.
- productie: code die is samengevoegd met de productiebranch wordt automatisch gereleased aan de productieomgeving.
Maak de productiebranch aan in Bitbucket Cloud door op Branches te klikken
Klik vervolgens op Branch aanmaken
Typ productie en klik op Aanmaken.
Voer vanuit de hoofdmap van de voorbeeldrepository het volgende uit:
heroku create --remote staging
git push staging main
heroku create --remote production
git push production main
Om te zien of dit correct werkt, ga je naar Heroku in een browser en kijk je of er twee apps zijn vermeld.
Voer ook het volgende uit:
git remote -vv
De verwachte resultaten zullen drie externe branches hebben. Eén voor Bitbucket en twee voor Heroku. De ene zal een staging-branch zijn en de andere zal een productie-branch zijn.
wmarusiak@C02F207NML7L cdTutorial % git remote -vv
origin git@bitbucket.org:pmmquickstartguides01/cdtutorial.git (fetch)
origin git@bitbucket.org:pmmquickstartguides01/cdtutorial.git (push)
production https://git.heroku.com/young-harbor-11356.git (fetch)
production https://git.heroku.com/young-harbor-11356.git (push)
staging https://git.heroku.com/boiling-refuge-14681.git (fetch)
staging https://git.heroku.com/boiling-refuge-14681.git (push)
Configureer vervolgens de implementatie naar staging. Om dat te doen, gebruiken we de branchspecifieke pipelines en maken we een pipeline aan die wordt uitgevoerd voor elke push op de main-branch. Breng deze wijziging aan in je terminal en push naar bron main.
bitbucket-pipelines.yml
image: node:16
clone:
depth: full
pipelines:
branches:
main:
- step:
name: deploy_to_staging
script:
- npm install
- npm test
- git push https://heroku:$HEROKU_API_KEY@git.heroku.com/boiling-refuge-1468.git main
Zorg ervoor dat je de Git push-URL voor main vervangt door de staging-URL hierboven van git remote -vv.
We hebben nu een pipeline gemaakt die elke push van main naar Heroku zal implementeren na het bouwen en testen van onze toepassing. De kloon-sectie aan het begin van de configuratie zorgt ervoor dat we een volledige kloon maken (anders zou Heroku de Git-push kunnen weigeren). Push deze configuratie gewoon naar Bitbucket om je eerste geautomatiseerde implementatie naar staging te zien plaatsvinden.
Een succesvolle pipeline die onze applicatie implementeert naar staging
Zoals je misschien al geraden hebt, hoeven we alleen nog een andere branch-pipeline toe te voegen voor de productiebranch om automatisch de productieomgeving te releasen wanneer wijzigingen worden samengevoegd met de productiebranch. Breng deze wijziging aan in je terminal en push naar bron main.
bitbucket-pipelines.yml
image: node:16
clone:
depth: full
pipelines:
branches:
main:
- step:
name: deploy_to_staging
script:
- npm install
- npm test
- git push https://heroku:$HEROKU_API_KEY@git.heroku.com/thawing-river-12585.git main
production:
- step:
name: deploy_to_production
script:
- npm install
- npm test
- git push https://heroku:$HEROKU_API_KEY@git.heroku.com/fierce-basin-45507.git production:main
Zorg ervoor dat je de Git push-URL voor main vervangt door de staging-URL van git remote -vv, en de Git push-URL voor productie met de productie-URL van git remote -vv.
We voeren de tests opnieuw uit op de productiebranch om ons ervan te verzekeren dat niets de build heeft beïnvloed voordat de applicatie wordt gereleased.
Onze pipelines zijn nu geconfigureerd en we kunnen de productiebranch beperken om alleen merges te accepteren via pull requests. Ga naar Workflow > Branch-rechten onder je repository-instellingen om de productiebranch te beperken. Dit is een belangrijke stap omdat we willen voorkomen dat er rechtstreeks vanaf lokale machines naar productie gepusht kan worden.
Rechten voor de productiebranch configureren
In de bovenstaande schermafbeelding zie je de rechten:
- Niemand heeft schrijftoegang
- Slechts één ontwikkelaar kan de branch mergen
We hebben ook een merge-controle toegevoegd om er zeker van te zijn dat de source-branch ten minste één green build heeft voordat de code wordt samengevoegd. Het stelt ons in staat om build-time te besparen en te voorkomen dat ontwikkelaars slechte code samenvoegen met onze productiebranch.
Wanneer dat is gebeurd, kun je een pull request aanmaken om de code van main met productie samen te voegen en vervolgens de nieuwe wijzigingen in je productieomgeving te releasen.
Maak een pull request aan om wijzigingen in de productie samen te voegen
Zodra je de pull request samenvoegt, kun je zien dat er een nieuwe pipeline wordt geactiveerd voor de productiebranch.
Wanneer dit voltooid is, zijn je nieuwe wijzigingen met succes geïmplementeerd in de productieomgeving.
De productieomgeving is up-to-date!
Je hebt nu een continue leveringsworkflow opgezet met Bitbucket Pipelines en kunt veilig pull requests gebruiken om code te releasen aan je klanten.
Je kunt de uiteindelijke bron van dit voorbeeld vinden in de repository waarnaar hieronder is gelinkt.
Continue levering met handmatige trigger voor release
Deze configuratie is geweldig voor teams die trunk-gebaseerd ontwikkelen.
Met Bitbucket Pipelines is het mogelijk om aangepaste pipelines te configureren die handmatig kunnen worden geactiveerd. Ze kunnen voor verschillende doeleinden worden gebruikt: langlopende tests die je niet bij elke push wilt uitvoeren of specifieke acties die je zelf wilt beheersen. We zullen een aangepaste pipeline gebruiken om een continue leveringsworkflow op te zetten waarbij pushes naar de hoofdbranch automatisch worden geïmplementeerd in een staging-omgeving en commits handmatig kunnen worden geïmplementeerd voor productie.
Nu we onze staging-implementatie hebben ingesteld, kunnen we eenvoudig een aangepaste pipeline toevoegen aan onze bitbucket-pipelines.yml-configuratie die we zullen gebruiken om de trigger handmatig in productie te brengen.
bitbucket-pipelines.yml
image: node:16
clone:
depth: full
pipelines:
branches:
main:
- step:
name: deploy_to_staging
script:
- npm install
- npm test
- git push https://heroku:$HEROKU_API_KEY@git.heroku.com/thawing-river-12585.git main
custom:
prod-deployment:
- step:
name: deploy_to_production
script:
- npm install
- npm test
- git push https://heroku:$HEROKU_API_KEY@git.heroku.com/fierce-basin-45507.git production:main
Zorg ervoor dat je de Git push-URL voor main vervangt door de staging-URL van git remote -vv, en de Git push-URL voor productie met de productie-URL van git remote -vv.
Nadat je de nieuwe configuratie naar je Bitbucket-repository hebt gepusht, kun je naar de commit gaan en klikken op de link Pipeline uitvoeren onder de commit-informatie om de implementatie naar productie te triggeren.
De actie Pipeline uitvoeren geeft een overzicht van de beschikbare aangepaste pipelines
Druk gewoon op de knop Uitvoeren en je wordt doorgestuurd naar de productie-implementatiepijplijn waar je de logs kunt monitoren.
In het gedeelte Commit-informatie van de pipeline kun je de naam zien van de aangepaste pipeline die is gebruikt. Je bent nu klaar om je nieuwe Bitbucket Pipelines-configuratie te gebruiken voor continue levering en je kunt je Hello World in productie controleren om er zeker van te zijn dat alles goed is gegaan!
Onze Hello World-toepassing is geïmplemeteerd voor productie met behulp van een handmatige trigger
Je kunt de uiteindelijke bron van dit voorbeeld vinden in de repository waarnaar hieronder is gelinkt.
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.