Artikelen
Tutorials
Interactieve handleidingen
ImageLabeller implementeren met GitHub
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 GitHub. We raden je aan om, voordat je begint, de pagina's ImageLabeller-architectuur en de AWS SageMaker instellen te lezen voor meer context.
Vereisten
Als je nog geen GitHub-organisatie hebt, volg dan de stappen in deze GitHub-handleiding om een volledig nieuwe organisatie aan te maken.
Openbare GitHub-repository's met ImageLabeller-code
Demovideo over de integratie van Jira GitHub
Jira en GitHub integreren
Klik vanuit Jira op Bord, daarna op Apps en vervolgens op GitHub.
Klik op Nu ophalen.
Klik op Apps, vervolgens op Apps beheren en breid GitHub uit.
Klik op Aan de slag.
Klik op Aan de slag.
De Jira-plug-in installeren op GitHub
Klik op Jira installeren om de Jira-plug-in op GitHub te installeren. Deze stap is nodig als de Jira-plug-in nog niet is geïnstalleerd in GitHub.
Jira begint vervolgens met het synchroniseren van gegevens van GitHub.
Wanneer de synchronisatie is voltooid, verandert de synchronisatiestatus naar VOLTOOID.
SSH-toegang instellen
Stel GitHub SSH-sleutels in voor je account door de instructies hier te volgen. Aanvullend referentiemateriaal is hier te vinden.
Een persoonlijke toegangstoken (PAT) instellen
Stel een persoonlijke toegangstoken in aan de hand van deze handleiding. De PAT wordt gebruikt om de SystemTest-repo te klonen tijdens de integratieteststappen. Verleen toegang tot de PAT-repo en de workflow.
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 GitHub toe te voegen. Noteer de issue-ID. In dit voorbeeld is dat IM-9.
Ga naar GitHub en klik op Nieuw. Kies de juiste organisatie voor Eigenaar. Klik op Repository aanmaken om verder te gaan.
Voeg een repositoryvariabele voor AWS-toegangssleutels toe
Klik op Instellingen en vervolgens op Geheimen. Klik op Nieuw geheim van de repository en voeg de AWS-toegangssleutel-ID en de geheime toegangssleutel van AWS toe. 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.
Ga in je terminal naar je s3_infra-repository en voer het volgende uit om naar GitHub te pushen.
git add --all
git commit -m "IM-9 add s3_infra repository to github"
git remote add origin git@github.com:PmmQuickStartGuides01/s3_infra.git
git branch -m mainline
git push -u origin mainline
GitHub-acties voor implementatie in AWS
Ga naar je s3_infra-repository in je terminal, maak een branch aan die vernoemd is naar je Jira-issue-ID en maak een .github/workflows map aan.
git checkout -b IM-9
mkdir -p .github/workflows && cd .github/workflows
Maak deploy-test-staging.yml aan met de volgende yaml in de nieuwe .github/workflows map. Dit bepaalt een implementatieworkflow voor je test- en stagingomgevingen die wordt uitgevoerd tijdens pushes naar andere branches dan de mainline.
name: deploy-s3-infra-test-staging
on:
push:
branches:
- '*'
- '!mainline'
jobs:
deploy-us-west-1:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
deploy-us-east-2:
runs-on: ubuntu-latest
needs: deploy-us-west-1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-2"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
Maak vervolgens deploy-prod.yml aan met de volgende yaml. Dit definieert een implementatieworkflow voor je productieomgevingen die wordt uitgevoerd wanneer een pull request wijzigingen samenvoegt in de mainline.
name: deploy-s3-infra-prod
on:
pull_request:
branches:
- mainline
jobs:
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
deploy-ca-central-1:
runs-on: ubuntu-latest
needs: deploy-us-west-2
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "ca-central-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-ca-central-1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
GitHub-acties begrijpen
Triggers
Geef aan het begin van deze bestanden gebeurtenissen aan die de workflow activeren. In deploy-test-staging.yml wordt het evenement naar alle branches verplaatst, behalve de mainline.
name: deploy-s3-infra-test-staging
on:
push:
branches:
- '*'
- '!mainline'
Workflows kunnen getriggerd worden door veel gebeurtenissen. Raadpleeg de documentatie hier voor meer informatie
Jobs
Een workflow bevat veel taken die worden uitgevoerd wanneer de activerende gebeurtenis plaatsvindt. Elke taak heeft een aantal stappen die worden uitgevoerd wanneer de taak wordt uitgevoerd. In dit voorbeeld is er een stap om de code van de repository uit te checken, een stap om AWS-inloggegevens te configureren en een stap om naar AWS te implementeren met behulp van AWS CloudFormation.
jobs:
deploy-us-west-1:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
Volgorde afdwingen met behoeften
Je kunt een volgorde voor je taken specificeren op basis van je behoeften. GitHub voert alle stappen standaard parallel uit. Gebruik behoeften om ervoor te zorgen dat de ene stap van de andere afhangt.
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-ca-central-1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
Naar een functie-branch pushen
Voer vanaf de opdrachtregel het volgende uit om je code naar de IM-9-branch van je s3_infra-repository te pushen.
git add --all
git commit -m "IM-9 add GitHub actions to s3_infra"
git push -u origin IM-9
Klik op Acties om de lopende workflows te zien.
Een pull request aanmaken
Klik op Pull requests en vervolgens op Pull request aanmaken.
Kies je functie-branch als bronbranch en klik vervolgens op Pull request aanmaken.
Bekijk de wijzigingen in de code en klik vervolgens op Pull request samenvoegen om de wijzigingen te accepteren.
Klik op Acties om te zien of de implementatie van de productie is gestart. GitHub voert de taken uit in deploy-prod.yml omdat deze branch de mainline is.
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 GitHub. Let op de issue-ID. In dit voorbeeld is dat IM-8.
Ga naar GitHub en klik op Nieuw. Kies de juiste organisatie voor Eigenaar. Klik op Repository aanmaken om verder te gaan.
Klik op Instellingen en vervolgens op Geheimen. Voeg je persoonlijke toegangstoken toe als ACCESS_KEY, je AWS-toegangssleutel-ID als AWS_ACCESS_KEY_ID, je geheime AWS-toegangssleutel als AWS_SECRET_ACCESS_KEY en je AWS-account-ID als AWS_ACCOUNT_ID.
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 github"
git remote add origin git@github.com:PmmQuickStartGuides01/submitImage.git
git branch -m mainline
git push -u origin mainline
GitHub-acties voor implementatie in AWS
Ga naar je SubmitImage-repository in je terminal, maak een branch aan die vernoemd is naar je Jira-issue-ID en maak een .github/workflows- map aan.
git checkout -b IM-8
mkdir -p .github/workflows && cd .github/workflows
Maak deploy-test-staging.yml aan met de volgende yaml in de nieuwe .github/workflows map aan. Dit bepaalt een implementatieworkflow voor je test- en stagingomgevingen die wordt uitgevoerd tijdens pushes naar andere branches dan de mainline. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
name: deploy-submit-image-test-staging
on:
push:
branches:
- '*'
- '!mainline'
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
run-unit-tests:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Checkout code
uses: actions/checkout@v2
- name: Test
run: |
cd ${{ github.workspace }}/submitImage
ls
go test ./opendevopslambda...
deploy-us-west-1:
runs-on: ubuntu-latest
needs: run-unit-tests
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-1:
# runs-on: ubuntu-latest
# needs: deploy-us-west-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-west-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-1
deploy-us-east-2:
runs-on: ubuntu-latest
needs: deploy-us-west-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-2:
# runs-on: ubuntu-latest
# needs: deploy-us-east-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-east-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-2
Maak vervolgens deploy-prod.yml aan met de volgende yaml. Dit definieert een implementatieworkflow voor je productieomgevingen die wordt uitgevoerd wanneer een pull request wijzigingen samenvoegt in de mainline.
name: deploy-submit-image-prod
on:
pull_request:
branches:
- mainline
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-2:
# runs-on: ubuntu-latest
# needs: deploy-us-west-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-west-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-2
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-us-west-2
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-1:
# runs-on: ubuntu-latest
# needs: deploy-us-east-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-east-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-1
deploy-ca-central-1:
runs-on: ubuntu-latest
needs: deploy-us-east-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "ca-central-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-ca-central-1:
# runs-on: ubuntu-latest
# needs: deploy-ca-central-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "ca-central-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: 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. Werk de sectie met behoeften bij om de stappen op volgorde uit te voeren. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
needs: deploy-us-east-1
GitHub-acties begrijpen
Deze taak gebruikt AWS SAM om je SubmitImage AWS Lambda te implementeren in us-west-2.
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
Deze taak kloont de SystemTests-repository en voert integratietests uit in us-west-2.
integration-test-us-west-2:
runs-on: ubuntu-latest
needs: deploy-us-west-2
steps:
- name: Pull systemTests repo
uses: actions/checkout@master
with:
repository: PmmQuickStartGuides01/systemTests
token: ${{ secrets.ACCESS_KEY }}
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Run integration tests
run: go test -v ./... -aws_region=us-west-2
In deze stap wordt de persoonlijke toegangstoken gebruikt om de SystemTests-repository te klonen.
- name: Pull systemTests repo
uses: actions/checkout@master
with:
repository: PmmQuickStartGuides01/systemTests
token: ${{ secrets.ACCESS_KEY }}
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 GitHub-integratie mogelijk te maken om bij te houden wat er in je project gebeurt.
git add --all
git commit -m "IM-8 add github actions to SubmitImage"
git push -u origin IM-8
Klik op Acties om de lopende workflows te zien.
Let op dat de opdracht voor de unittest geslaagd is en dat de implementatie naar Test us-west-1 is begonnen.
De eerder gedefinieerde systeemtests worden uitgevoerd als onderdeel van de taken integration-test-us-west-1 en integration-test-us-east-2.
Een pull-aanvraag aanmaken
Klik op Pull requests en vervolgens op Nieuwe pull request om een pull request te maken.
Kies ervoor om vanuit je functie-branch samen te voegen.
Klik op Pull-aanvraag aanmaken.
Voeg de pull request samen en verwijder de functie-branch. Klik op Acties om de implementatie van de productie te monitoren.
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 GitHub. Let op de issue-ID. In dit voorbeeld is dat IM-11.
Ga naar GitHub en klik op Nieuw. Kies de juiste organisatie voor Eigenaar. Klik op Repository aanmaken om verder te gaan.
Klik op Instellingen en vervolgens op Geheimen. Voeg je persoonlijke toegangstoken toe als ACCESS_KEY, je AWS-toegangssleutel-ID als AWS_ACCESS_KEY_ID, je geheime AWS-toegangssleutel als AWS_SECRET_ACCESS_KEY en je AWS-account-ID als AWS_ACCOUNT_ID.
Ga in je terminal naar je InvokeLabeller-repository en voer het volgende uit om je code naar GitHub te pushen.
git add --all
git commit -m "IM-11 add InvokeLabeller to github"
git remote add origin git@github.com:PmmQuickStartGuides01/InvokeLabeller.git
git branch -m mainline
git push -u origin mainline
GitHub-acties voor implementatie in AWS
Ga naar je InvokeLabeller-repository in je terminal, maak een branch aan die vernoemd is naar je Jira-issue-ID en maak een .github/workflows map aan.
git checkout -b IM-11
mkdir -p .github/workflows && cd .github/workflows
Maak deploy-test-staging.yml aan met de volgende yaml in de nieuwe .github/workflows map. Dit bepaalt een implementatieworkflow voor je test- en stagingomgevingen die wordt uitgevoerd tijdens pushes naar andere branches dan de mainline. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
name: deploy-invoke-labeller-test-staging
on:
push:
branches:
- '*'
- '!mainline'
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
run-unit-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Test
run: |
pip3 install pytest
pip3 install moto
pip3 install -r tst/requirements.txt --user
python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
deploy-us-west-1:
runs-on: ubuntu-latest
needs: run-unit-tests
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-1:
# runs-on: ubuntu-latest
# needs: deploy-us-west-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-west-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-1
deploy-us-east-2:
runs-on: ubuntu-latest
needs: deploy-us-west-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-2:
# runs-on: ubuntu-latest
# needs: deploy-us-east-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-east-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-2
Maak vervolgens deploy-prod.yml aan met de volgende yaml. Dit definieert een implementatieworkflow voor je productieomgevingen die wordt uitgevoerd wanneer een pull request wijzigingen samenvoegt in de mainline.
name: deploy-invoke-labeller-prod
on:
pull_request:
branches:
- mainline
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-2:
# runs-on: ubuntu-latest
# needs: deploy-us-west-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-west-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-2
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-us-west-2
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-1:
# runs-on: ubuntu-latest
# needs: deploy-us-east-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-east-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-1
deploy-ca-central-1:
runs-on: ubuntu-latest
needs: deploy-us-east-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "ca-central-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-ca-central-1:
# runs-on: ubuntu-latest
# needs: deploy-ca-central-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "ca-central-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: 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. Werk de sectie met behoeften bij om de stappen op volgorde uit te voeren. Je moet de git-kloonlijn bijwerken om SystemTests te gebruiken als SystemTests-repository.
needs: deploy-us-east-1
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-11-branch van je InvokeLabeller-repository te pushen. Vermeld de Jira-issue-ID in commit-berichten en branchnamen om de Jira GitHub-integratie mogelijk te maken om bij te houden wat er in je project gebeurt.
git add --all
git commit -m "IM-11 add github actions to InvokeLabeller"
git push -u origin IM-11
Klik op Acties om de lopende workflows te zien. De eerder gedefinieerde systeemtests worden uitgevoerd als onderdeel van de integration-test-us-west-1 en integration-test-us-east-2 jobs.
Een pull-aanvraag aanmaken
Klik op Pull requests en vervolgens op Nieuwe pull request om een pull request te maken. Kies ervoor om vanuit je functie-branch samen te voegen.
Klik op Acties om de implementatie van de productie te monitoren.
Een repository voor SystemTests aanmaken
Ga naar Jira en maak een Jira-issue om een SystemTests-repository toe te voegen aan GitHub. Let op de issue-ID. In dit voorbeeld is dat IM-7.
Ga naar GitHub en klik op Nieuw. Kies de juiste organisatie voor Eigenaar. 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 GitHub te pushen.
git add --all
git commit -m "IM-7 add SystemTests repository to GitHub"
git remote add origin git@github.com:PmmQuickStartGuides01/systemTests.git
git branch -M mainline
git push -u origin mainline
De SystemTests-repository heeft geen GitHub-acties nodig. Het heeft geen eigen pipeline omdat er tests worden uitgevoerd om andere pipelines uit te voeren. Zodra alle componenten van de ImageLabeller-toepassing geïmplementeerd zijn, kunnen de stappen voor de integratietest van de CI/CD-workflowbestanden ontdaan worden van reacties, gecommit en gepusht. De tests slagen alleen als alle onderdelen van de toepassing naar behoren werken.
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 gitlab-ci.yml van latere repository's bijwerken met de juiste URL.
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.