Artikelen
Tutorials
Interactieve handleidingen
ImageLabeller implementeren met Bitbucket
Warren Marusiak
Senior Technical Evangelist
Om te demonstreren hoe je toepassingen ontwikkelt, implementeert en beheert met behulp van Jira Software en verschillende bijbehorende tools, heeft ons team ImageLabeller aangemaakt, een eenvoudige demotoepassing gebouwd op AWS die gebruikmaakt van machine learning om labels op afbeeldingen aan te brengen.
Op deze pagina wordt beschreven hoe je ImageLabeller implementeert met Bitbucket. We raden je aan om, voordat je begint, de pagina's ImageLabeller-architectuur en de AWS SageMaker instellen te lezen voor meer context.
Vereisten
Volg deze instructies als je nog geen SSH hebt geconfigureerd voor je Bitbucket-account.
Openbare GitHub-repository's met ImageLabeller-code
Demovideo van Bitbucket-pipelines
Een repository voor de AWS S3-infrastructuur aanmaken
In een standaard ontwikkelaarslus neemt een ontwikkelaar doorgaans een taak over van Jira, verplaatst deze naar werk in uitvoering en voltooit vervolgens het ontwikkelingswerk. De Jira issue-ID is de sleutel die het ontwikkelingswerk koppelt aan de Jira-issue. Deze ID is de belangrijkste integratiecomponent tussen de twee systemen.
Maak in Jira een nieuwe issue aan om een AWS S3-infrastructuurrepository aan Bitbucket toe te voegen. Noteer de issue-ID. In dit voorbeeld is dat IM-5.
Ga naar Bitbucket > Aanmaken > Repository.
Selecteer de juiste Workspace en het juiste Project. Stel de standaardnaam van de branch in op mainline. Klik op Repository aanmaken om verder te gaan.
Ga in je terminal naar je s3_infra-repository en voer het volgende uit om je template.yml-bestand van AWS CloudFormation naar Bitbucket te pushen.
git add --all
git commit -m "IM-5 add s3_infra repository to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/s3_infra.git
git branch -m mainline
git push -u origin mainline
Schakel Bitbucket Pipelines in
Ga naar de Repository-instellingen > Instellingen > Pipelines inschakelen.
Voeg een repositoryvariabele voor AWS-toegangssleutels toe
Ga naar Repository-variabelen, voer je AWS-toegangscode in en klik op Toevoegen. Voer vervolgens je geheime AWS-toegangssleutel in en klik op Toevoegen.
Implementatieomgevingen instellen
Klik op Implementaties.
Klik op omgeving toevoegen om nieuwe omgevingen toe te voegen. In dit voorbeeld is er een testomgeving in US-WEST-1, een stagingomgeving in US-EAST-2 en drie productieomgevingen in US-WEST-2, US-EAST-1 en CA-CENTRAL-1 .
bitbucket-pipelines.yml voor implementatie in AWS
Ga naar je s3_infra-repository in je terminal en maak een branch aan die vernoemd is naar je Jira-issue-ID.
git checkout -b IM-5
Maak een bitbucket-pipelines.yml-bestand aan met de volgende yaml. Hierdoor wordt een implementatieworkflow voor je test-, staging- en productieomgevingen gedefinieerd.
definitions:
steps:
- step: &deploy-test-usw1
name: Deploy Test us-west-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-staging-use2
name: Deploy Staging us-east-2
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-2'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-production-usw2
name: Deploy Production us-west-2
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-production-use1
name: Deploy Production us-east-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-production-cac1
name: Deploy Production ca-central-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'ca-central-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
pipelines:
default:
- step:
<<: *deploy-test-usw1
deployment: Test us-west-1
- step:
<<: *deploy-staging-use2
deployment: Staging us-east-2
branches:
mainline:
- step:
<<: *deploy-production-usw2
deployment: Production us-west-2
- step:
<<: *deploy-production-use1
deployment: Production us-east-1
- step:
<<: *deploy-production-cac1
deployment: Production ca-central-1
Inzicht in een bitbucket-pipelines.yml-bestand
Definities en stappen
Definieer een reeks stappen in de sectie definities. Elke stap heeft een alias die in het hele bitbucket-pipelines.yml-bestand gebruikt wordt, een naam die verschijnt op het Bitbucket-implementatiescherm en een script. Een script is een verzameling van een of meer opdrachten.
definitions:
steps:
- step: &deploy-test-usw1
name: Deploy Test us-west-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
Pipes
In deze stap wordt de atlassian/aws-cloudformation-deploy
pipe gebruikt om de AWS S3-buckets te implementeren die gedefinieerd zijn in het s3_infra-sjabloon.yml-bestand.
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
De set met beschikbare pipes kun je hier vinden. De documentatie voor de pipe atlassian/aws-cloudformation-deploy
kun je hier vinden.
Pipelines
Pipelines voeren een aantal stappen uit. De standaardpipeline is de reeks stappen die wordt uitgevoerd voor branches die niet uitdrukkelijk onder pipelines worden genoemd. In deze standaardpipeline worden stappen uitgevoerd die naar test- en stagingomgevingen implementeren.
pipelines:
default:
- step:
<<: *deploy-test-usw1
deployment: Test us-west-1
- step:
<<: *deploy-staging-use2
deployment: Staging us-east-2
Implementaties maken integratie tussen Jira en Bitbucket mogelijk.
deployment: Test us-west-1
Onder branches kun je een reeks stappen definiëren die worden uitgevoerd voor een bepaalde branch met een naam. Het fragment hieronder definieert een reeks stappen voor de mainline-branch.
branches:
mainline:
- step:
<<: *deploy-production-usw2
deployment: Production us-west-2
- step:
<<: *deploy-production-use1
deployment: Production us-east-1
- step:
<<: *deploy-production-cac1
deployment: Production ca-central-1
Lees dit referentieartikel voor meer informatie over dit onderwerp.
Naar een functie-branch pushen
Voer vanaf de opdrachtregel het volgende uit om je wijzigingen naar de IM-5-branch van je s3_infra-repository te pushen. Vermeld de Jira-issue-ID in commit-berichten en branchnamen om de Jira Bitbucket-integratie mogelijk te maken om bij te houden wat er in je project gebeurt.
git add --all
git commit -m "IM-5 add bitbucket-pipelines.yml"
git push -u origin IM-5
Klik op Pipelines en vervolgens op IM-5 om de lopende pipeline te zien.
Klik op de pipeline zelf voor meer informatie over de uitvoering. In de pipeline werden stappen uitgevoerd voor de implementatie in een testomgeving in us-west-1 en een stagingomgeving in us-east-2.
Een pull-aanvraag aanmaken
Klik op Pull requests en vervolgens op Pull request aanmaken om een pull request te maken.
Kies je functie-branch als de bronbranch, vink het selectievakje Branch sluiten aan en klik vervolgens op Pull request aanmaken.
Bekijk de wijzigingen in de code. Daarna kun je de pull request Goedkeuren en Samenvoegen.
Als je op Samenvoegen klikt, wordt het scherm voor samenvoeging van de pull request geopend. Vink het selectievakje bij Overgangsissue aan en klik op Samenvoegen.
Klik op Pipelines om de mainline pipeline te monitoren.
De IM-5-branch is verdwenen. De mainline-branch blijft over en er loopt een pipeline. Klik op de pipeline.
In de pipeline werden stappen uitgevoerd om te implementeren in Productieomgevingen in us-west-2, us-east-1 en ca-central-1. Het is mogelijk om een pipeline opnieuw uit te voeren door op de knop Opnieuw uitvoeren te klikken als een pipeline mislukt.
Een slechte implementatie terugdraaien
Klik op Implementaties om een implementatie terug te draaien.
Klik op de omgeving die je wilt terugdraaien voor een lijst met historische implementaties, kies de versie waarnaar je terug wilt draaien en klik vervolgens op Opnieuw implementeren.
Controleer of de wijziging juist is en klik op Opnieuw implementeren.
Alleen de gekozen omgeving wordt opnieuw geïmplementeerd.
Een repository voor SubmitImage AWS Lambda aanmaken
Ga naar Jira en maak een Jira-issue om een SubmitImage-repository toe te voegen aan Bitbucket. Let op de issue-ID. In dit voorbeeld is dat IM-6.
Ga naar Bitbucket, klik op Aanmaken en vervolgens op Repository.
Selecteer de juiste Workspace en het juiste Project. Stel de standaardnaam van de branch in op mainline. Klik op Repository aanmaken om verder te gaan.
Ga in je terminal naar je SubmitImage-repository en voer het volgende uit om je AWS Lambda-code naar Bitbucket te pushen. Vermeld de Jira-issue-ID in commit-berichten en branchnamen om de Jira Bitbucket-integratie mogelijk te maken om bij te houden wat er in je project gebeurt.
git add --all
git commit -m "IM-6 add SubmitImage to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/submitimage.git
git branch -m mainline
git push -u origin mainline
Pipelines inschakelen
Ga naar de Repository-instellingen, klik op Instellingen en vervolgens op Pipelines inschakelen.
Repository-variabelen toevoegen
Klik op Repository-variabelen om de ID van je AWS-toegangssleutel, geheime AWS-toegangssleutel en AWS-account-ID toe te voegen. Geef de IAM-gebruiker die is gekoppeld aan de AWS-toegangssleutel AdministratorAccess. Je kunt ervoor kiezen om een gedetailleerdere toegangscontrole te gebruiken door een individueel AWS-toegangsbeleid te kiezen.
Implementatieomgevingen toevoegen
Klik op Implementaties en vervolgens op omgeving toevoegen om nieuwe omgevingen toe te voegen. In dit voorbeeld is er een testomgeving in us-west-1, een stagingomgeving in us-east-2 en drie productieomgevingen in us-west-2, us-east-1 en ca-central-1.
SSH-sleutels aanmaken
Ga naar je SubmitImage-repository in Bitbucket en klik op Repository-instellingen, daarna op SSH-sleutels en vervolgens op Sleutels genereren.
Je hebt deze SSH-sleutel nodig als je de SystemTests-repository aanmaakt.
bitbucket-pipelines.yml voor implementatie in AWS
Ga naar je SubmitImage-repository in je terminal en maak een branch aan die vernoemd is naar je Jira-issue-ID.
git checkout -b IM-6
Maak een bitbucket-pipelines.yml-bestand aan met de volgende yaml. Hierdoor wordt een Bitbucket-pipeline voor je test-, staging- en productieomgevingen gedefinieerd. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
definitions:
steps:
-step: &rununittests
name: run unit tests
image: golang:buster
script:
- cd submitImage
- go test ./opendevopslambda/...
-step: &deploy-test-usw1
name: Deploy Test us-west-1
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-1-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-usw1
name: Integration test usw1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-1
-step: &deploy-staging-use2
name: Deploy Staging us-east-2
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-2'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-2-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-use2
name: Integration test use2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-2
-step: &deploy-production-usw2
name: Deploy Production us-west-2
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-2-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-usw2
name: Integration test usw2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-2
-step: &deploy-production-use1
name: Deploy Production us-east-1
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-1'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-1-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-use1
name: Integration test use1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-1
-step: &deploy-production-cac1
name: Deploy Production ca-central-1
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'ca-central-1'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-cac1
name: Integration test cac1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=ca-central-1
pipelines:
default:
- step: *rununittests
- step:
<<: *deploy-test-usw1
deployment: Test us-west-1
# - step: *integration-test-usw1
- step:
<<: *deploy-staging-use2
deployment: Staging us-east-2
# - step: *integration-test-use2
branches:
mainline:
- step:
<<: *deploy-production-usw2
deployment: Production us-west-2
# - step: *integration-test-usw2
- step:
<<: *deploy-production-use1
deployment: Production us-east-1
# - step: *integration-test-use1
- step:
<<: *deploy-production-cac1
deployment: Production ca-central-1
# - step: *integration-test-cac1
Op de uitvoering van de integratietests wordt voorlopig niet gereageerd. De systeemtests slagen alleen als de volledige toepassing geïmplementeerd is. Haal reacties op de integratieteststappen in je repository weg en voer nog een push uit om de implementatiepipeline uit te voeren nadat alle onderdelen van ImageLabeller geïmplementeerd zijn. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
Inzicht in een bitbucket-pipelines.yml-bestand
In deze stap worden unittests uitgevoerd op basis van de SubmitImage-codebasis.
-step: &rununittests
name: run unit tests
image: golang:buster
script:
- cd submitImage
- go test ./opendevopslambda/...
Deze stap gebruikt AWS SAM om je SubmitImage AWS Lambda te implementeren in us-west-2. De documentatie voor deze pipe kun je hier vinden.
-step: &deploy-usw2-prod
name: deploy us-west-2 prod
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-2-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
Deze stap kloont de SystemTests-repository en voert integratietests uit in us-west-2. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
-step: &integration-test-usw2
name: Integration test usw2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-2
Naar een functie-branch pushen
Voer vanaf de opdrachtregel het volgende uit om je wijzigingen naar de IM-8-branch van je SubmitImage-repository te pushen.
git add --all
git commit -m "IM-6 add bitbucket-pipelines.yml to SubmitImage"
git push -u origin IM-6
Klik op Pipelines en vervolgens op IM-6 om de lopende pipeline te zien.
Een pull-aanvraag aanmaken
Klik op Pull requests en vervolgens op Pull request aanmaken om een pull request te maken. Voltooi de pull request en klik op Pipelines om de productie-implementatie te bekijken.
Een repository voor InvokeLabeller AWS Lambda aanmaken
Ga naar Jira en maak een Jira-issue om een InvokeLabeller-repository toe te voegen aan Bitbucket. Let op de issue-ID. In dit voorbeeld is dat IM-10.
Ga naar Bitbucket, klik op Aanmaken en vervolgens op Repository. Selecteer de juiste Workspace en het juiste Project. Stel de standaardnaam van de branch in op mainline. Klik op Repository aanmaken om verder te gaan.
Ga in je terminal naar je InvokeLabeller-repository en voer het volgende uit om je AWS Lambda-code naar Bitbucket te pushen. Vermeld de Jira-issue-ID in commit-berichten en branchnamen om de Jira Bitbucket-integratie mogelijk te maken om bij te houden wat er in je project gebeurt.
git add --all
git commit -m "IM-10 add InvokeLabeller to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/invokelabeller.git
git branch -m mainline
git push -u origin mainline
Pipelines inschakelen
Ga naar de Repository-instellingen, klik op Instellingen en vervolgens op Pipelines inschakelen.
Repository-variabelen toevoegen
Klik op Repository-variabelen om de ID van je AWS-toegangssleutel, geheime AWS-toegangssleutel en AWS-account-ID toe te voegen. Geef de IAM-gebruiker die is gekoppeld aan de AWS-toegangssleutel AdministratorAccess. Je kunt ervoor kiezen om een gedetailleerdere toegangscontrole te gebruiken door een individueel AWS-toegangsbeleid te kiezen, maar de details worden aan de lezer overgelaten.
Implementatieomgevingen toevoegen
Klik op Implementaties en vervolgens op omgeving toevoegen om nieuwe omgevingen toe te voegen. In dit voorbeeld is er een testomgeving in us-west-1, een stagingomgeving in us-east-2 en drie productieomgevingen in us-west-2, us-east-1 en ca-central-1.
SSH-sleutels aanmaken
Ga naar je SubmitImage-repository in Bitbucket en klik op Repository-instellingen, daarna op SSH-sleutels en vervolgens op Sleutels genereren.
bitbucket-pipelines.yml voor implementatie in AWS
Ga naar je InvokeLabeller-repository in je terminal en maak een branch aan die vernoemd is naar je Jira-issue-ID.
git checkout -b IM-10
Maak een bitbucket-pipelines.yml-bestand aan met de volgende yaml. Hierdoor wordt een Bitbucket-pipeline voor je test-, staging- en productieomgevingen gedefinieerd. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
definitions:
steps:
-step: &rununittests
name: run unit tests
image: python:rc-buster
script:
- pip3 install pytest
- pip3 install moto
- pip3 install -r tst/requirements.txt --user
- python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
-step: &deploy-usw1-test
name: deploy us-west-1 test
image: amazon/aws-sam-cli-build-image-python3.8
script:
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-1-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-usw1
name: integration test usw1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-1
-step: &deploy-use2-staging
name: deploy us-east-2 staging
image: amazon/aws-sam-cli-build-image-python3.8
script:
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-2'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-2-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-use2
name: integration test use2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-2
-step: &deploy-usw2-prod
name: deploy us-west-2 prod
image: amazon/aws-sam-cli-build-image-python3.8
script:
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-2-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-usw2
name: integration test usw2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-2
-step: &deploy-use1-prod
name: deploy us-east-1 prod
image: amazon/aws-sam-cli-build-image-python3.8
script:
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-1'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-1-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-use1
name: integration test use1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-1
-step: &deploy-cac1-prod
name: deply ca-central-1 prod
image: amazon/aws-sam-cli-build-image-python3.8
script:
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'ca-central-1'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-cac1
name: integration test cac1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=ca-central-1
pipelines:
default:
- step: *rununittests
- step:
<<: *deploy-usw1-test
deployment: us-west-1 Test
# - step: *integration-test-usw1
- step:
<<: *deploy-use2-staging
deployment: us-east-2 Staging
# - step: *integration-test-use2
branches:
mainline:
- step:
<<: *deploy-usw2-prod
deployment: us-west-2 Prod
# - step: *integration-test-usw2
- step:
<<: *deploy-use1-prod
deployment: us-east-1 Prod
# - step: *integration-test-use1
- step:
<<: *deploy-cac1-prod
deployment: ca-central-1 Prod
# - step: *integration-test-cac1
Op de uitvoering van de integratietests wordt voorlopig niet gereageerd. De systeemtests slagen alleen als de volledige toepassing geïmplementeerd is. Haal reacties op de integratieteststappen in je repository weg en voer nog een push uit om de implementatiepipeline uit te voeren nadat alle onderdelen van ImageLabeller geïmplementeerd zijn. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
Inzicht in een bitbucket-pipelines.yml-bestand
In deze stap worden unittests uitgevoerd op basis van de InvokeLabeller-codebasis.
-step: &rununittests
name: run unit tests
image: golang:buster
script:
- cd submitImage
- go test ./opendevopslambda/...
src/app.py bijwerken met het AWS SageMaker-eindpunt
Open het bestand src/app.py van InvokeLabeller en zoek naar query_endpoint. Wijzig de endpoint_name en de region_name van de client zodat ze overeenkomen met je AWS SageMaker-notebook.
def query_endpoint(img):
endpoint_name = 'jumpstart-dft-image-labeller-endpoint'
client = boto3.client(service_name='runtime.sagemaker', region_name='us-west-1')
response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/x-image', Body=img)
model_predictions = json.loads(response['Body'].read())['predictions'][0]
return model_predictions
Naar een functie-branch pushen
Voer vanaf de opdrachtregel het volgende uit om je wijzigingen naar de IM-10-branch van je InvokeLabeller-repository te pushen.
git add --all
git commit -m "IM-10 add bitbucket-pipelines.yml to InvokeLabeller"
git push -u origin IM-10
Klik op Pipelines en vervolgens op IM-10 om de lopende pipeline te zien.
Een pull-aanvraag aanmaken
Klik op Pull requests en vervolgens op Pull request aanmaken om een pull request te maken. Voltooi de pull request en klik op Pipelines om de productie-implementatie te bekijken.
Maak een repository voor systeemtests aan
Ga naar Jira en maak een nieuwe issue om een SystemTests-repository aan Bitbucket toe te voegen. Noteer de issue-ID. In dit voorbeeld is dat IM-7.
Ga naar Bitbucket, klik op Aanmaken en vervolgens op Repository.
Selecteer de juiste Workspace en het juiste Project. Stel de standaardnaam van de branch in op mainline. Klik op Repository aanmaken om verder te gaan.
Ga in je terminal naar je SystemTests-repository en voer het volgende uit om je code naar Bitbucket te pushen.
git add --all
git commit -m "IM-7 add SystemTests repository to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/systemtests.git
git branch -M mainline
git push -u origin mainline
De systemTests-repository heeft geen bitbucket-pipelines.yml-bestand nodig. Het heeft geen eigen pipeline omdat er tests worden uitgevoerd om andere pipelines te laten draaien. Noteer de externe URL van je SystemTests. De CI/CD-pipelines van SubmitImage, GetImageLabel en InvokeLabeller klonen de SystemTests-repository tijdens de teststappen. Je moet de bitbucket-pipelines.yml van latere repository's bijwerken met de juiste URL.
SSH-sleutels toevoegen vanuit SubmitImage, GetImageLabel en InvokeLabeller
Klik op Repository-instellingen en vervolgens op Access-codes.
Klik op Sleutel toevoegen, plak de SSH-sleutel die is gekopieerd uit SubmitImage, GetImageLabel of InvokeLabeller en klik vervolgens op SSH-sleutel toevoegen.
Als je tot hier bent gekomen, gefeliciteerd! Je hebt zojuist ImageLabeller geïmplementeerd. De volgende stap is het instellen van het monitoren van ImageLabeller met behulp van Opsgenie.
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.