Artikelen
Tutorials
Interactieve handleidingen
ImageLabeller implementeren met GitLab
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 GitLab. We raden je aan om, voordat je begint, de pagina's ImageLabeller-architectuur en AWS SageMaker instellen te lezen voor meer context.
Vereisten
Als je nog geen GitLab-groep hebt, volg dan de stappen in deze GitLab-handleiding om een volledig nieuwe groep aan te maken.
Openbare GitHub-repository's met ImageLabeller-code
Demovideo over de integratie van Jira GitLab
Jira en GitLab integreren
Klik vanuit Jira op Bord, daarna op Apps en vervolgens op GitLab.
Klik op Nu ophalen.
Klik op Apps en vervolgens op Je apps beheren.
GitLab voor Jira uitbeiden.
Klik op Naamruimte toevoegen.
Selecteer je bestaande naamruimte en klik op Koppelen. In deze handleiding wordt ervan uitgegaan dat je al een bestaand GitLab-account en een GitLab-groep hebt.
SSH-sleutel toevoegen aan GitLab
Klik op je profielfoto rechtsbovenin en klik op Voorkeuren.
Klik op SSH-sleutels en volg de instructies om een nieuwe SSH-sleutel te genereren of een bestaande SSH-sleutel te gebruiken.
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 doet 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.
Ga naar Jira en maak een nieuwe issue om een AWS S3-infrastructuurrepository aan GitLab toe te voegen. Noteer de issue-ID. In dit voorbeeld is dat IM-5.
Ga naar GitLab en klik op Nieuw project.
Klik op Leeg project aanmaken.
Voeg een Projectnaam toe en kies de juiste groep in Project-URL. Klik op Project 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 GitLab te pushen.
git add --all
git commit -m "IM-5 add s3_infra repository to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/s3_infra.git
git branch -m mainline
git push -u origin mainline
AWS-toegangssleutel toevoegen
Klik op Instellingen en vervolgens op CI/CD. Scrol naar beneden en vouw Variabelen uit. Klik op Variabele toevoegen.
Maak twee variabelen aan. Eén voor je AWS-toegangssleutel-ID en één voor je geheime AWS-toegangssleutel.
Bescherm de variabelen zodat ze alleen worden gebruikt voor pipelines die op beschermde branches lopen, en voor tags. Geef de IAM-gebruiker die is gekoppeld aan de AWS-toegangssleutel AdministratorAccess. Je kunt er ook voor kiezen om een gedetailleerdere toegangscontrole te gebruiken door een individueel AWS-toegangsbeleid te kiezen.
Configureer beveiligde branches voor toegang tot beschermde variabelen
Klik op Instellingen en vervolgens op Repository. Scrol naar beneden en vouw Beschermde branches uit.
Voer het voorvoegsel van je Jira-issue-ID en een * in.
De Jira-issue-ID's zijn net als IM-5 en IM-6 in dit voorbeeld: het voorvoegsel is IM-.
Voer IM-* in en klik op Beveiligen.
Je ziet mainline en IM-* als beschermde branches.
Implementatieomgevingen instellen
Klik op Implementaties en vervolgens op Omgevingen. Klik op Nieuwe omgeving om nieuwe omgevingen toe te voegen. In dit voorbeeld zijn er testomgevingen in US-WEST-1 en in US-EAST-2 en Productieomgevingen in US-WEST-2, US-EAST-1 en CA-CENTRAL-1 .
.gitlab-ci.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 .gitlab-ci.yml-bestand met de volgende yaml. Hierdoor wordt een implementatieworkflow voor je test-, staging- en productieomgevingen gedefinieerd.
stages:
- merge-request
- test-us-west-1
- test-us-east-2
- production-us-west-2
- production-us-east-1
- production-ca-central-1
merge-request-pipeline-job:
stage: merge-request
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This pipeline always succeeds and enables merges during merge requests"
- echo true
deploy-test-us-west-1:
stage: test-us-west-1
environment: test-us-west-1
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-west-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
deploy-test-us-east-2:
stage: test-us-east-2
environment: test-us-east-2
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-east-2 --template-file template.yml --stack-name OpenDevOpsS3Infra
deploy-production-us-west-2:
stage: production-us-west-2
environment: production-us-west-2
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-west-2 --template-file template.yml --stack-name OpenDevOpsS3Infra
deploy-production-us-east-1:
stage: production-us-east-1
environment: production-us-east-1
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-east-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
deploy-production-ca-central-1:
stage: production-ca-central-1
environment: production-ca-central-1
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region ca-central-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
Een .gitlab-ci.yml-bestand begrijpen
Fases
Voeg een stagesblok toe om de uitvoeringsvolgorde van je GitLab-pipeline te bepalen. De stages worden uitgevoerd in de volgorde waarin ze zijn gedefinieerd in het stagesblok Taken die verband houden met een stage worden parallel uitgevoerd.
stages:
- merge-request
- test-us-west-1
- test-us-east-2
- production-us-west-2
- production-us-east-1
- production-ca-central-1
Jobs
Taken houden verband met een stage en kunnen geassocieerd worden met een omgeving. Regels bepalen of een bepaalde taak al dan niet wordt uitgevoerd. De regel in dit voorbeeld controleert of de pipelinebranch niet de standaardbranch is en of de pipeline niet automatisch wordt beheerd als onderdeel van een samenvoegingsverzoek.
Je kunt voor elke opdracht een andere afbeelding specificeren. Je kunt afbeeldingen instellen met de tools die je nodig hebt voor je taakscripts. De scriptsectie definieert de reeks stappen die worden uitgevoerd wanneer de taak wordt uitgevoerd.
deploy-test-us-west-1:
stage: test-us-west-1
environment: test-us-west-1
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-west-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
pipeline voor samenvoegingsverzoeken
Een pipeline wordt automatisch beheerd door GitLab wanneer een samenvoegingsverzoek goedgekeurd wordt. Je kunt een taak creëren voor deze pipeline door een regel toe te voegen. In dit voorbeeld lukt de taak altijd.
merge-request-pipeline-job:
stage: merge-request
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This pipeline always succeeds and enables merges during merge requests"
- echo true
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 GitLab-integratie mogelijk te maken om bij te houden wat er in je project gebeurt.
git add --all
git commit -m "IM-5 add .gitlab-ci.yml to s3_infra"
git push -u origin IM-5
Klik op CI/CD en vervolgens op Pipelines om te zien hoe de pipeline draait.
Klik op de pipeline-ID van de lopende pipeline.
Klik op een taak voor meer informatie.
Maak een samenvoegingsverzoek aan
Klik op Verzoeken samenvoegen en vervolgens op Samenvoegingsverzoek aanmaken om een samenvoegingsverzoek aan te maken.
Kies je functie-branch als bronbranch en klik vervolgens op Branches vergelijken en verdergaan.
Kies een uitvoerder en een beoordelaar.
Klik op Samenvoegingsverzoek aanmaken.
Bekijk de wijzigingen in de code en klik vervolgens op Goedkeuren.
Klik op CI/CI en vervolgens op Pipelines om de pipeline voor samenvoegingsverzoeken te zien draaien.
Klik op de pipeline-ID. Let op dat de merge-request-pipeline-job de enige taak is die is uitgevoerd.
Ga terug naar het samenvoegingsverzoek door te klikken op samenvoegingsverzoeken, vervolgens op het actieve samenvoegingsverzoek en op Samenvoegen te klikken. Dit is het begin van een nieuwe pipeline.
Klik op CI/CD en vervolgens op Pipelines. Klik op de pipeline-ID.
Een repository voor SystemTests aanmaken
Ga naar Jira en maak een Jira-issue om een SystemTests-repository toe te voegen aan GitLab. Let op de issue-ID. In dit voorbeeld is dat IM-7.
Voeg een Projectnaam toe en kies de juiste groep in Project-URL. Klik op Project aanmaken om verder te gaan.
Ga in je terminal naar je SystemTests-repository en voer het volgende uit om je code naar GitLab te pushen.
git add --all
git commit -m "IM-7 add SystemTests repository to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/systemtests.git
git branch -m mainline
git push -u origin mainline
De SystemTests-repository heeft geen .gitlab-ci.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 bitbucketgitlab-ci.yml van latere repository's bijwerken met de juiste URL.
Voeg een Implementatie-token toe
Je moet een implementatietoken toevoegen om deze repository te klonen tijdens de uitvoering van andere pipelines. Klik op Instellingen en vervolgens op Repository. Scrol naar beneden en vouw Implementatietokens uit.
Voer een naam in, vink read_repository aan en klik op Implementatietoken aanmaken.
De gebruikersnaam van de implementatietoken wordt automatisch gegenereerd. Het wachtwoord voor de implementatietoken wordt één keer verstrekt bij het aanmaken. Voeg het toe aan een tool voor geheim beheer, zodat deze later geraadpleegd kan worden. Verderop in deze handleiding wordt naar de gebruikersnaam van het implementatietoken verwezen als gitlab_deploy_token, en naar het wachtwoord voor de implementatietoken als gitlab_deploy_password.
Een repository voor SubmitImage AWS Lambda aanmaken
Ga naar Jira en maak een Jira-issue om een SubmitImage AWS Lambda-repository toe te voegen aan GitLab. Noteer de issue-ID. In dit voorbeeld is dat IM-8.
Ga naar GitLab en klik op Nieuw project en vervolgens op Leeg project aanmaken. Voeg een Projectnaam toe en kies de juiste groep in Project-URL. Klik op Project aanmaken om verder te gaan.
Ga in je terminal naar je SubmitImage-repository en voer het volgende uit om je code naar GitHub te pushen.
git add --all
git commit -m "IM-8 add SubmitImage to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/submitimage.git
git branch -m mainline
git push -u origin mainline
Je moet AWS-toegangssleutels toevoegen, beveiligde branches configureren en implementatieomgevingen instellen.
Voeg vervolgens de implementatiesleutels uit je SystemTests-repository toe, zodat de SubmitImage GitLab-pipeline gedownload en de SystemTests uitgevoerd kan worden.
Voeg tot slot je AWS-account-ID toe als CI/CD-variabele.
.gitlab-ci.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-8
Maak een .gitlab-ci.yml-bestand aan met de volgende yaml. Hierdoor wordt een implementatieworkflow voor je test-, staging- en productieomgevingen gedefinieerd. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
stages:
- merge-request
- run-unit-tests
#US-WEST-1
- deploy-us-west-1
- test-us-west-1
#US-EAST-2
- deploy-us-east-2
- test-us-east-2
#US-WEST-2
- deploy-us-west-2
- test-us-west-2
#US-EAST-1
- deploy-us-east-1
- test-us-east-1
#CA-CENTRAL-1
- deploy-ca-central-1
- test-ca-central-1
merge-request-pipeline-job:
stage: merge-request
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This pipeline always succeeds and enables merge"
- echo true
run-unit-tests:
stage: run-unit-tests
image: golang:buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
script:
- cd submitImage
- go test ./opendevopslambda/...
#US-WEST-1
deploy-us-west-1:
stage: deploy-us-west-1
environment: test-us-west-1
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --region us-west-1
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-1 --no-fail-on-empty-changeset
#test-us-west-1:
# stage: test-us-west-1
# environment: test-us-west-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-west-1
#US-EAST-2
deploy-us-east-2:
stage: deploy-us-east-2
environment: test-us-east-2
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --region us-east-2
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-2 --no-fail-on-empty-changeset
#test-us-east-2:
# stage: test-us-east-2
# environment: test-us-east-2
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-east-2
#US-WEST-2
deploy-us-west-2:
stage: deploy-us-west-2
environment: production-us-west-2
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --region us-west-2
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-2 --no-fail-on-empty-changeset
#test-us-west-2:
# stage: test-us-west-2
# environment: production-us-west-2
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-west-2
#US-EAST-1
deploy-us-east-1:
stage: deploy-us-east-1
environment: production-us-east-1
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --region us-east-1
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-1 --no-fail-on-empty-changeset
#test-us-east-1:
# stage: test-us-east-1
# environment: production-us-east-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-east-1
#CA-CENTRAL-1
deploy-central-1:
stage: deploy-ca-central-1
environment: production-ca-central-1
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --region ca-central-1
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region ca-central-1 --no-fail-on-empty-changeset
#test-central-1:
# stage: test-ca-central-1
# environment: production-ca-central-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=ca-central-1
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.
Een .gitlab-ci.yml-bestand begrijpen
In deze stap worden unittests uitgevoerd die deel uitmaken van de SubmitImage-repository.
unit-test-us-west-1:
stage: unit-test-us-west-1
environment: test-us-west-1
image: golang:buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
script:
- cd submitImage
- go test ./opendevopslambda/...
In deze stap wordt de SubmitImage AWS Lambda geïmplementeerd met behulp van AWS SAM. Let op de sectie before_script. Deze stap wordt vóór de scriptsectie uitgevoerd en kan gebruikt worden om afhankelijkheden te installeren en verschillende tools in te stellen.
deploy-us-west-1:
stage: deploy-us-west-1
environment: test-us-west-1
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --region us-west-1
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-1 --no-fail-on-empty-changeset
In deze stap worden de integratietests gedownload en uitgevoerd in de SystemTests-repository. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
test-us-west-1:
stage: test-us-west-1
environment: test-us-west-1
image: golang:buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-1
In de git-kloonregel wordt er verwezen naar het eerder gemaakte implementatietoken.
- git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
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. Vermeld de Jira-issue-ID in commit-berichten en branchnamen om de Jira GitLab-integratie mogelijk te maken om bij te houden wat er in je project gebeurt.
git add --all
git commit -m "IM-8 add .gitlab-ci.yml to SubmitImage"
git push -u origin IM-8
Klik op CI/CD en vervolgens op Pipelines om te zien hoe de pipeline draait.
Maak een samenvoegingsverzoek aan
Maak een samenvoegingsverzoek aan om in je productieomgevingen te implementeren nadat GitLab in je testomgevingen is geïmplementeerd. Kies de IM-8-branch.
Klik op CI/CD en vervolgens op Pipelines om de lopende pipeline voor een samenvoegingsverzoek te zien.
Voeg de wijzigingen samen naar de mainline nadat de pipeline voor samenvoegingsverzoeken is voltooid. Klik op CI/CD en vervolgens op Pipelines om de lopende productiepipeline te zien.
Een repository voor InvokeLabeller AWS Lambda aanmaken
Ga naar Jira en maak een Jira-issue om een InvokeLabeller AWS Lambda-repository toe te voegen aan GitLab. Let op de issue-ID. In dit voorbeeld is dat IM-10.
Ga naar GitLab en klik op Nieuw project en vervolgens op Leeg project aanmaken. Voeg een Projectnaam toe en kies de juiste groep in Project-URL. Klik op Project aanmaken om verder te gaan.
Ga in je terminal naar je InvokeLabeller-repository en voer het volgende uit om je code naar GitLab te pushen.
git add --all
git commit -m "IM-10 add InvokeLabeller to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/invokelabeller.git
git branch -m mainline
git push -u origin mainline
Je moet AWS-toegangssleutels toevoegen, beveiligde branches configureren en implementatieomgevingen instellen.
Voeg vervolgens de implementatiesleutels uit je SystemTests-repository toe, zodat de InvokeLabeller GitLab-pipeline gedownload en de SystemTests uitgevoerd kan worden.
Voeg tot slot je AWS-account-ID toe als CI/CD-variabele.
.gitlab-ci.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 .gitlab-ci.yml-bestand aan met de volgende yaml. Hierdoor wordt een implementatieworkflow voor je test-, staging- en productieomgevingen gedefinieerd. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
stages:
- merge-request
- run-unit-tests
#US-WEST-1
- deploy-us-west-1
- test-us-west-1
#US-EAST-2
- deploy-us-east-2
- test-us-east-2
#US-WEST-2
- deploy-us-west-2
- test-us-west-2
#US-EAST-1
- deploy-us-east-1
- test-us-east-1
#CA-CENTRAL-1
- deploy-ca-central-1
- test-ca-central-1
merge-request-pipeline-job:
stage: merge-request
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This pipeline always succeeds and enables merge"
- echo true
run-unit-tests:
stage: run-unit-tests
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install pytest
- pip3 install moto
- pip3 install -r tst/requirements.txt --user
script:
- python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
#US-WEST-1
deploy-us-west-1:
stage: deploy-us-west-1
environment: test-us-west-1
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --region us-west-1
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-1 --no-fail-on-empty-changeset
#test-us-west-1:
# stage: test-us-west-1
# environment: test-us-west-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-west-1
#US-EAST-2
deploy-us-east-2:
stage: deploy-us-east-2
environment: test-us-east-2
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --region us-east-2
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-2 --no-fail-on-empty-changeset
#test-us-east-2:
# stage: test-us-east-2
# environment: test-us-east-2
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-east-2
#US-WEST-2
deploy-us-west-2:
stage: deploy-us-west-2
environment: production-us-west-2
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --region us-west-2
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-2 --no-fail-on-empty-changeset
#test-us-west-2:
# stage: test-us-west-2
# environment: production-us-west-2
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-west-2
#US-EAST-1
deploy-us-east-1:
stage: deploy-us-east-1
environment: production-us-east-1
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --region us-east-1
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-1 --no-fail-on-empty-changeset
#test-us-east-1:
# stage: test-us-east-1
# environment: production-us-east-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-east-1
#CA-CENTRAL-1
deploy-central-1:
stage: deploy-ca-central-1
environment: production-ca-central-1
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --region ca-central-1
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region ca-central-1 --no-fail-on-empty-changeset
#test-central-1:
# stage: test-ca-central-1
# environment: production-ca-central-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=ca-central-1
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.
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. Vermeld de Jira-issue-ID in commit-berichten en branchnamen om de Jira GitLab-integratie mogelijk te maken om bij te houden wat er in je project gebeurt.
git add --all
git commit -m "IM-10 add .gitlab-ci.yml to InvokeLabeller"
git push -u origin IM-10
Klik op CI/CD en vervolgens op Pipelines om te zien hoe de pipeline draait.
Maak een samenvoegingsverzoek aan
Maak een samenvoegingsverzoek aan om in je productieomgevingen te implementeren nadat GitLab in je testomgevingen is geïmplementeerd. Kies de IM-10-branch.
Voeg de wijzigingen samen naar de mainline nadat de pipeline voor samenvoegingsverzoeken is voltooid. Klik op CI/CD en vervolgens op Pipelines om de lopende productiepipeline te zien.
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.