Articoli
Tutorial
Guide interattive
Distribuzione di ImageLabeller con GitHub
Warren Marusiak
Senior Technical Evangelist
Per fornire una dimostrazione di come sviluppare, distribuire e gestire applicazioni utilizzando Jira Software e vari strumenti connessi, il nostro team ha creato ImageLabeller, una semplice applicazione demo basata su AWS che utilizza l'apprendimento automatico per applicare etichette alle immagini.
In questa pagina viene spiegato come distribuire ImageLabeller con GitHub. Prima di iniziare, ti consigliamo di leggere le pagine sull'architettura di ImageLabeller e sulla configurazione di AWS SageMaker per contestualizzare i contenuti.
Prerequisiti
Se non hai già un'organizzazione GitHub, segui i passaggi di questa guida GitHub per crearne una da zero.
Repository GitHub pubblici con codice ImageLabeller
Video demo dell'integrazione con Jira GitHub
Integrazione tra Jira e GitHub
Da Jira clicca su Board, quindi su App e infine su GitHub.
Clicca su Get it now (Installa ora).
Clicca su App, quindi su Gestisci le app ed espandi GitHub.
Clicca su Get started (Inizia).
Clicca su Get started (Inizia).
Installazione del plug-in Jira in GitHub
Clicca su Install Jira (Installa Jira) per installare il plug-in Jira su GitHub. Questo passaggio è necessario se il plug-in Jira non è già installato in GitHub.
Jira inizierà a sincronizzare i dati da GitHub.
Al termine della sincronizzazione, in Sync Status (Stato sincronizzazione) viene visualizzato COMPLETE (COMPLETO).
Configurazione dell'accesso SSH
Configura le chiavi SSH di GitHub per il tuo account seguendo le istruzioni fornite qui. In questa pagina è disponibile materiale di riferimento aggiuntivo.
Configurazione di un token di accesso personale
Configura un token di accesso personale seguendo questa guida. Il token di accesso personale è utilizzato per clonare il repository SystemTests durante le fasi di test di integrazione. Concedi l'accesso al repository del token di accesso personale e al flusso di lavoro.
Creazione di un repository per l'infrastruttura AWS S3
In un ciclo di sviluppo standard, uno sviluppatore generalmente sposta un task da Jira nel lavoro in corso e poi si occupa dell'attività di sviluppo. L'ID del ticket Jira è la chiave che collega l'attività di sviluppo al ticket Jira. È il componente di integrazione principale tra i due sistemi.
Vai su Jira e crea un nuovo ticket per aggiungere un repository di infrastruttura AWS S3 a GitHub. Prendi nota dell'ID del ticket, che in questo esempio è IM-9.
Vai su GitHub e clicca su New (Nuovo). In Owner (Responsabile) scegli l'organizzazione appropriata. Clicca su Create repository (Crea repository) per procedere.
Aggiunta di variabili del repository delle chiavi di accesso a AWS
Clicca su Settings (Impostazioni), quindi su Secrets (Segreti). Clicca su New repository secret (Nuovo segreto repository) e aggiungi l'ID della chiave di accesso AWS e la chiave di accesso segreta AWS. Fornisci la chiave di accesso AWS AdministratorAccess all'utente IAM associato. Puoi decidere di utilizzare un controllo degli accessi più dettagliato scegliendo le policy di accesso AWS individuali, ma i dettagli sono lasciati al lettore.
Nel terminale utilizzato, vai al repository s3_infra ed esegui lo script seguente per effettuare il push a GitHub.
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
Azioni GitHub per la distribuzione in AWS
Vai al repository s3_infra nel terminale utilizzato, crea un branch che abbia lo stesso nome dell'ID del ticket Jira e crea una directory .github/workflows.
git checkout -b IM-9
mkdir -p .github/workflows && cd .github/workflows
Crea deploy-test-staging.yml con il seguente yaml nella nuova directory .github/workflows. In questo modo si definisce un flusso di lavoro di distribuzione per gli ambienti di test e staging che viene eseguito durante i push verso branch diversi dalla 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"
Quindi, crea deploy-prod.yml con il seguente yaml. In questo modo si definisce un flusso di lavoro di distribuzione per i tuoi ambienti di produzione che viene eseguito quando una pull request effettua il merge delle modifiche nella 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"
Comprendere le azioni GitHub
Trigger
Dichiara gli eventi che attivano il flusso di lavoro nella parte superiore di questi file. In deploy-test-staging.yml l'evento viene inviato a tutti i branch tranne che alla mainline.
name: deploy-s3-infra-test-staging
on:
push:
branches:
- '*'
- '!mainline'
Gli eventi che possono attivare i flussi di lavoro sono numerosi. Consulta la documentazione qui per maggiori informazioni.
Processi
Un flusso di lavoro contiene molti processi che vengono eseguiti quando si verifica l'evento trigger. Ogni processo presenta una serie di passaggi che vengono effettuati quando il processo viene eseguito. È presente un passaggio per verificare il codice del repository, un passaggio per configurare le credenziali AWS e un passaggio per la distribuzione in AWS utilizzando AWS CloudFormation, come in questo esempio.
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"
Leggi di più sui processi in questa pagina e altre informazioni sui passaggi in questa pagina.
Applicazione di un ordine con needs
Puoi specificare un ordine per i tuoi processi utilizzando needs. GitHub esegue tutti i passaggi in parallelo per impostazione predefinita. Utilizza needs per far dipendere un passaggio da un altro.
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"
Push di un branch di funzioni
Dalla riga di comando esegui lo script riportato di seguito per effettuare il push del codice al branch IM-9 del repository s3_infra.
git add --all
git commit -m "IM-9 add GitHub actions to s3_infra"
git push -u origin IM-9
Clicca su Actions (Azioni) per vedere i flussi di lavoro in esecuzione.
Creazione di una pull request
Clicca su Pull request seguito da Create pull request (Crea pull request).
Scegli il branch di funzioni come branch di origine, quindi clicca su Create pull request (Crea pull request).
Rivedi le modifiche al codice, quindi clicca su Merge pull request (Effettua il merge delle pull request) per accettare le modifiche.
Clicca su Actions (Azioni) per vedere che la distribuzione della produzione è iniziata. GitHub esegue i processi in deploy-prod.yml perché il branch è la mainline.
Creazione di un repository per l'AWS Lambda SubmitImage
Vai su Jira e crea un ticket Jira per aggiungere un repository AWS Lambda SubmitImage a GitHub. Prendi nota dell'ID del ticket Jira, che in questo esempio è IM-8.
Vai su GitHub e clicca su New (Nuovo). In Owner (Responsabile) scegli l'organizzazione appropriata. Clicca su Create repository (Crea repository) per procedere.
Clicca su Settings (Impostazioni), quindi su Secrets (Segreti). Aggiungi il tuo token di accesso personale come ACCESS_KEY, l'ID della tua chiave di accesso AWS come AWS_ACCESS_KEY_ID, la tua chiave di accesso segreta AWS come AWS_SECRET_ACCESS_KEY e l'ID del tuo account AWS come AWS_ACCOUNT_ID.
Nel terminale utilizzato, vai al repository SubmitImage ed esegui i comandi seguenti per effettuare il push del codice a GitHub.
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
Azioni GitHub per la distribuzione in AWS
Vai al repository SubmitImage nel terminale utilizzato, crea un branch che abbia lo stesso nome dell'ID del ticket Jira e crea una directory .github/workflows.
git checkout -b IM-8
mkdir -p .github/workflows && cd .github/workflows
Crea deploy-test-staging.yml con il seguente yaml nella nuova directory .github/workflows. In questo modo si definisce un flusso di lavoro di distribuzione per gli ambienti di test e staging che viene eseguito durante i push verso branch diversi dalla mainline. Devi aggiornare la riga git clone affinché SystemTests sia il tuo repository SystemTests.
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
Quindi, crea deploy-prod.yml con il seguente yaml. In questo modo si definisce un flusso di lavoro di distribuzione per i tuoi ambienti di produzione che viene eseguito quando una pull request effettua il merge delle modifiche nella 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
L'esecuzione dei test di integrazione è commentata per ora. I test di sistema passeranno solo quando viene distribuita l'intera applicazione. Decommenta i passaggi dei test di integrazione nel repository ed effettua un altro push per eseguire la pipeline di distribuzione dopo che tutti i componenti di ImageLabeller sono stati distribuiti. Aggiorna la sezione needs per eseguire i passaggi nell'ordine. Devi aggiornare la riga git clone affinché SystemTests sia il tuo repository SystemTests.
needs: deploy-us-east-1
Comprendere le azioni GitHub
Questo processo utilizza AWS SAM per distribuire l'AWS Lambda SubmitImage su 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
Questo processo clona il repository SystemTests ed esegue test di integrazione 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
Questo passaggio utilizza il token di accesso personale per clonare il repository SystemTests.
- name: Pull systemTests repo
uses: actions/checkout@master
with:
repository: PmmQuickStartGuides01/systemTests
token: ${{ secrets.ACCESS_KEY }}
Push di un branch di funzioni
Esegui lo script seguente dalla riga di comando per effettuare il push delle modifiche al branch IM-8 del repository SubmitImage. Includi l'ID del ticket Jira nei messaggi di commit e i nomi dei branch per abilitare l'integrazione di Jira GitHub e tenere traccia di ciò che sta accadendo nel progetto.
git add --all
git commit -m "IM-8 add github actions to SubmitImage"
git push -u origin IM-8
Clicca su Actions (Azioni) per vedere i flussi di lavoro in esecuzione.
Tieni presente che il processo di test unitario è stato superato ed è iniziata la distribuzione al test us-west-1.
I test di sistema definiti in precedenza vengono eseguiti come parte dei processi integration-test-us-west-1 e integration-test-us-east-2.
Creare una pull request
Per creare una pull request, clicca su Pull request, quindi su New pull request (Nuova pull request).
Scegli di effettuare il merge dal branch di funzioni.
Clicca su Create pull request (Crea pull request).
Effettua il merge della pull request ed elimina il branch di funzioni. Clicca su Actions (Azioni) per monitorare la distribuzione della produzione.
Creazione di un repository per l'AWS Lambda InvokeLabeller
Vai su Jira e crea un ticket Jira per aggiungere un repository AWS Lambda InvokeLabeller a GitHub. Prendi nota dell'ID del ticket Jira, che in questo esempio è IM-11.
Vai su GitHub e clicca su New (Nuovo). In Owner (Responsabile) scegli l'organizzazione appropriata. Clicca su Create repository (Crea repository) per procedere.
Clicca su Settings (Impostazioni), quindi su Secrets (Segreti). Aggiungi il tuo token di accesso personale come ACCESS_KEY, l'ID della tua chiave di accesso AWS come AWS_ACCESS_KEY_ID, la tua chiave di accesso segreta AWS come AWS_SECRET_ACCESS_KEY e l'ID del tuo account AWS come AWS_ACCOUNT_ID.
Nel terminale utilizzato, vai al repository InvokeLabeller ed esegui i comandi seguenti per effettuare il push del codice a GitHub.
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
Azioni GitHub per la distribuzione in AWS
Vai al repository InvokeLabeller nel terminale utilizzato, crea un branch che abbia lo stesso nome dell'ID del ticket Jira e crea una directory .github/workflows.
git checkout -b IM-11
mkdir -p .github/workflows && cd .github/workflows
Crea deploy-test-staging.yml con il seguente yaml nella nuova directory .github/workflows. In questo modo si definisce un flusso di lavoro di distribuzione per gli ambienti di test e staging che viene eseguito durante i push verso branch diversi dalla mainline. Devi aggiornare la riga git clone affinché SystemTests sia il tuo repository SystemTests.
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
Quindi, crea deploy-prod.yml con il seguente yaml. In questo modo si definisce un flusso di lavoro di distribuzione per i tuoi ambienti di produzione che viene eseguito quando una pull request effettua il merge delle modifiche nella 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
L'esecuzione dei test di integrazione è commentata per ora. I test di sistema passeranno solo quando viene distribuita l'intera applicazione. Decommenta i passaggi dei test di integrazione nel repository ed effettua un altro push per eseguire la pipeline di distribuzione dopo che tutti i componenti di ImageLabeller sono stati distribuiti. Aggiorna la sezione needs per eseguire i passaggi nell'ordine. Devi aggiornare la riga git clone affinché SystemTests sia il tuo repository SystemTests.
needs: deploy-us-east-1
Aggiornamento di src/app.py con l'endpoint AWS SageMaker
Apri il file src/app.py di InvokeLabeller e cerca query_endpoint. Modifica la voce endpoint_name e la voce region_name del client in modo che corrispondano al notebook AWS SageMaker utilizzato.
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
Push di un branch di funzioni
Esegui i comandi seguenti dalla riga di comando per effettuare il push delle modifiche al branch IM-11 del repository InvokeLabeller. Includi l'ID del ticket Jira nei messaggi di commit e i nomi dei branch per abilitare l'integrazione di Jira GitHub e tenere traccia di ciò che sta accadendo nel progetto.
git add --all
git commit -m "IM-11 add github actions to InvokeLabeller"
git push -u origin IM-11
Clicca su Actions (Azioni) per vedere i flussi di lavoro in esecuzione. I test di sistema definiti in precedenza vengono eseguiti come parte dei processi integration-test-us-west-1 e integration-test-us-east-2.
Creare una pull request
Per creare una pull request, clicca su Pull request, quindi su New pull request (Nuova pull request). Scegli di effettuare il merge dal branch di funzioni.
Clicca su Actions (Azioni) per monitorare la distribuzione della produzione.
Creazione di un repository per SystemTests
Vai su Jira e crea un ticket Jira per aggiungere un repository SystemTests a GitHub. Prendi nota dell'ID del ticket Jira, che in questo esempio è IM-7.
Vai su GitHub e clicca su New (Nuovo). In Owner (Responsabile) scegli l'organizzazione appropriata. Clicca su Create repository (Crea repository) per procedere.
Nel terminale utilizzato, vai al repository SystemTests ed esegui i comandi seguenti per effettuare il push del codice a GitHub.
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
Il repository SystemTests non richiede azioni GitHub. Non dispone di una pipeline propria poiché fornisce i test per l'esecuzione di altre pipeline. I passaggi del test di integrazione dei file di flusso di lavoro CI/CD possono essere decommentati, sottoposti a commit e sottoposti a push una volta distribuiti tutti i componenti dell'applicazione ImageLabeller. I test passeranno solo se tutti i componenti dell'applicazione funzionano correttamente.
Prendi nota dell'URL remoto del repository SystemTests. Le pipeline CI/CD di SubmitImage, GetImageLabel e InvokeLabeller cloneranno il repository SystemTests durante i passaggi di test. Dovrai aggiornare il file gitlab-ci.yml dei repository successivi con l'URL corretto.
Congratulazioni! Hai appena distribuito ImageLabeller. Il passaggio successivo prevede la configurazione del monitoraggio di ImageLabeller con Opsgenie.
Condividi l'articolo
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.