Distribuzione di ImageLabeller con GitHub

Warren è un ex sviluppatore diventato Technical Evangelist che collabora con Atlassian dal 2021. Ha lavorato su tutto, dal software di telecomunicazione COBOL in esecuzione su mainframe alla moderna infrastruttura cloud di AWS. È appassionato di tecnologia e ha un background di ricerca nel campo dell'apprendimento automatico. In qualità di Technical Evangelist, Warren fa conoscere le funzionalità dei prodotti Atlassian e delle integrazioni dei partner attraverso demo, linee guida e video. Nel tempo libero, puoi trovarlo a praticare il suo amato jiu-jitsu brasiliano.
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.
1git add --all
2git commit -m "IM-9 add s3_infra repository to github"
3git remote add origin git@github.com:PmmQuickStartGuides01/s3_infra.git
4git branch -m mainline
5git push -u origin mainlineAzioni 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 .
1git checkout -b IM-9
2mkdir -p .github/workflows && cd .github/workflowsCrea deploy-test-staging.yml con il seguente yaml nella nuova directory . 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.
1name: deploy-s3-infra-test-staging
2on:
3 push:
4 branches:
5 - '*'
6 - '!mainline'
7
8jobs:
9 deploy-us-west-1:
10 runs-on: ubuntu-latest
11 outputs:
12 env-name: ${{ steps.env-name.outputs.environment }}
13 steps:
14 - name: Checkout code
15 uses: actions/checkout@v2
16 - name: Configure AWS credentials
17 id: creds
18 uses: aws-actions/configure-aws-credentials@v1
19 with:
20 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
21 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
22 aws-region: "us-west-1"
23 - name: Deploy to AWS CloudFormation
24 uses: aws-actions/aws-cloudformation-github-deploy@v1
25 with:
26 name: OpenDevOpsS3Infra
27 template: template.yml
28 no-fail-on-empty-changeset: "1"
29
30 deploy-us-east-2:
31 runs-on: ubuntu-latest
32 needs: deploy-us-west-1
33 steps:
34 - name: Checkout code
35 uses: actions/checkout@v2
36 - name: Configure AWS credentials
37 id: creds
38 uses: aws-actions/configure-aws-credentials@v1
39 with:
40 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
41 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
42 aws-region: "us-east-2"
43 - name: Deploy to AWS CloudFormation
44 uses: aws-actions/aws-cloudformation-github-deploy@v1
45 with:
46 name: OpenDevOpsS3Infra
47 template: template.yml
48 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.
1name: deploy-s3-infra-prod
2on:
3 pull_request:
4 branches:
5 - mainline
6
7jobs:
8 deploy-us-west-2:
9 runs-on: ubuntu-latest
10 outputs:
11 env-name: ${{ steps.env-name.outputs.environment }}
12 steps:
13 - name: Checkout code
14 uses: actions/checkout@v2
15 - name: Configure AWS credentials
16 id: creds
17 uses: aws-actions/configure-aws-credentials@v1
18 with:
19 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
20 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
21 aws-region: "us-west-2"
22 - name: Deploy to AWS CloudFormation
23 uses: aws-actions/aws-cloudformation-github-deploy@v1
24 with:
25 name: OpenDevOpsS3Infra
26 template: template.yml
27 no-fail-on-empty-changeset: "1"
28
29 deploy-ca-central-1:
30 runs-on: ubuntu-latest
31 needs: deploy-us-west-2
32 steps:
33 - name: Checkout code
34 uses: actions/checkout@v2
35 - name: Configure AWS credentials
36 id: creds
37 uses: aws-actions/configure-aws-credentials@v1
38 with:
39 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
40 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
41 aws-region: "ca-central-1"
42 - name: Deploy to AWS CloudFormation
43 uses: aws-actions/aws-cloudformation-github-deploy@v1
44 with:
45 name: OpenDevOpsS3Infra
46 template: template.yml
47 no-fail-on-empty-changeset: "1"
48
49 deploy-us-east-1:
50 runs-on: ubuntu-latest
51 needs: deploy-ca-central-1
52 steps:
53 - name: Checkout code
54 uses: actions/checkout@v2
55 - name: Configure AWS credentials
56 id: creds
57 uses: aws-actions/configure-aws-credentials@v1
58 with:
59 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
60 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
61 aws-region: "us-east-1"
62 - name: Deploy to AWS CloudFormation
63 uses: aws-actions/aws-cloudformation-github-deploy@v1
64 with:
65 name: OpenDevOpsS3Infra
66 template: template.yml
67 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.
1name: deploy-s3-infra-test-staging
2on:
3 push:
4 branches:
5 - '*'
6 - '!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.
1jobs:
2 deploy-us-west-1:
3 runs-on: ubuntu-latest
4 outputs:
5 env-name: ${{ steps.env-name.outputs.environment }}
6 steps:
7 - name: Checkout code
8 uses: actions/checkout@v2
9 - name: Configure AWS credentials
10 id: creds
11 uses: aws-actions/configure-aws-credentials@v1
12 with:
13 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
14 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
15 aws-region: "us-west-1"
16 - name: Deploy to AWS CloudFormation
17 uses: aws-actions/aws-cloudformation-github-deploy@v1
18 with:
19 name: OpenDevOpsS3Infra
20 template: template.yml
21 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.
1deploy-us-east-1:
2 runs-on: ubuntu-latest
3 needs: deploy-ca-central-1
4 steps:
5 - name: Checkout code
6 uses: actions/checkout@v2
7 - name: Configure AWS credentials
8 id: creds
9 uses: aws-actions/configure-aws-credentials@v1
10 with:
11 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
12 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
13 aws-region: "us-east-1"
14 - name: Deploy to AWS CloudFormation
15 uses: aws-actions/aws-cloudformation-github-deploy@v1
16 with:
17 name: OpenDevOpsS3Infra
18 template: template.yml
19 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.
1git add --all
2git commit -m "IM-9 add GitHub actions to s3_infra"
3git push -u origin IM-9Clicca 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.
1git add --all
2git commit -m "IM-8 add SubmitImage to github"
3git remote add origin git@github.com:PmmQuickStartGuides01/submitImage.git
4git branch -m mainline
5git push -u origin mainlineAzioni 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 .
1git checkout -b IM-8
2mkdir -p .github/workflows && cd .github/workflowsCrea deploy-test-staging.yml con il seguente yaml nella nuova directory . 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.
1name: deploy-submit-image-test-staging
2on:
3 push:
4 branches:
5 - '*'
6 - '!mainline'
7
8env:
9 aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
10
11jobs:
12 run-unit-tests:
13 runs-on: ubuntu-latest
14 steps:
15 - name: Install Go
16 uses: actions/setup-go@v2
17 with:
18 go-version: 1.16.x
19 - name: Checkout code
20 uses: actions/checkout@v2
21 - name: Test
22 run: |
23 cd ${{ github.workspace }}/submitImage
24 ls
25 go test ./opendevopslambda...
26
27 deploy-us-west-1:
28 runs-on: ubuntu-latest
29 needs: run-unit-tests
30 outputs:
31 env-name: ${{ steps.env-name.outputs.environment }}
32 steps:
33 - name: Install Go
34 uses: actions/setup-go@v2
35 with:
36 go-version: 1.16.x
37 - uses: actions/checkout@v2
38 - name: Configure AWS credentials
39 id: creds
40 uses: aws-actions/configure-aws-credentials@v1
41 with:
42 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
43 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
44 aws-region: "us-west-1"
45 - name: SAM Validate
46 run: |
47 sam --version
48 sam validate
49 - name: SAM Build
50 run: |
51 sam build
52 - name: SAM Deploy
53 continue-on-error: true
54 run: |
55 sam deploy --template-file .aws-sam/build/template.yaml \
56 --stack-name "OpenDevOpsSubmitImage" \
57 --s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \
58 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
59
60 # integration-test-us-west-1:
61 # runs-on: ubuntu-latest
62 # needs: deploy-us-west-1
63 # steps:
64 # - name: Pull systemTests repo
65 # uses: actions/checkout@master
66 # with:
67 # repository: PmmQuickStartGuides01/systemTests
68 # token: ${{ secrets.ACCESS_KEY }}
69 # - name: Configure AWS credentials
70 # id: creds
71 # uses: aws-actions/configure-aws-credentials@v1
72 # with:
73 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
74 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
75 # aws-region: "us-west-1"
76 # - name: Install Go
77 # uses: actions/setup-go@v2
78 # with:
79 # go-version: 1.16.x
80 # - name: Run integration tests
81 # run: go test -v ./... -aws_region=us-west-1
82
83 deploy-us-east-2:
84 runs-on: ubuntu-latest
85 needs: deploy-us-west-1
86 outputs:
87 env-name: ${{ steps.env-name.outputs.environment }}
88 steps:
89 - name: Install Go
90 uses: actions/setup-go@v2
91 with:
92 go-version: 1.16.x
93 - uses: actions/checkout@v2
94 - name: Configure AWS credentials
95 id: creds
96 uses: aws-actions/configure-aws-credentials@v1
97 with:
98 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
99 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
100 aws-region: "us-east-2"
101 - name: SAM Validate
102 run: |
103 sam --version
104 sam validate
105 - name: SAM Build
106 run: |
107 sam build
108 - name: SAM Deploy
109 continue-on-error: true
110 run: |
111 sam deploy --template-file .aws-sam/build/template.yaml \
112 --stack-name "OpenDevOpsSubmitImage" \
113 --s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \
114 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
115
116 # integration-test-us-east-2:
117 # runs-on: ubuntu-latest
118 # needs: deploy-us-east-2
119 # steps:
120 # - name: Pull systemTests repo
121 # uses: actions/checkout@master
122 # with:
123 # repository: PmmQuickStartGuides01/systemTests
124 # token: ${{ secrets.ACCESS_KEY }}
125 # - name: Configure AWS credentials
126 # id: creds
127 # uses: aws-actions/configure-aws-credentials@v1
128 # with:
129 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
130 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
131 # aws-region: "us-east-2"
132 # - name: Install Go
133 # uses: actions/setup-go@v2
134 # with:
135 # go-version: 1.16.x
136 # - name: Run integration tests
137 # run: go test -v ./... -aws_region=us-east-2Quindi, 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.
1name: deploy-submit-image-prod
2on:
3 pull_request:
4 branches:
5 - mainline
6
7env:
8 aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
9
10jobs:
11 deploy-us-west-2:
12 runs-on: ubuntu-latest
13 outputs:
14 env-name: ${{ steps.env-name.outputs.environment }}
15 steps:
16 - name: Install Go
17 uses: actions/setup-go@v2
18 with:
19 go-version: 1.16.x
20 - uses: actions/checkout@v2
21 - name: Configure AWS credentials
22 id: creds
23 uses: aws-actions/configure-aws-credentials@v1
24 with:
25 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
26 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
27 aws-region: "us-west-2"
28 - name: SAM Validate
29 run: |
30 sam --version
31 sam validate
32 - name: SAM Build
33 run: |
34 sam build
35 - name: SAM Deploy
36 continue-on-error: true
37 run: |
38 sam deploy --template-file .aws-sam/build/template.yaml \
39 --stack-name "OpenDevOpsSubmitImage" \
40 --s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
41 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
42
43 # integration-test-us-west-2:
44 # runs-on: ubuntu-latest
45 # needs: deploy-us-west-2
46 # steps:
47 # - name: Pull systemTests repo
48 # uses: actions/checkout@master
49 # with:
50 # repository: PmmQuickStartGuides01/systemTests
51 # token: ${{ secrets.ACCESS_KEY }}
52 # - name: Configure AWS credentials
53 # id: creds
54 # uses: aws-actions/configure-aws-credentials@v1
55 # with:
56 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
57 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
58 # aws-region: "us-west-2"
59 # - name: Install Go
60 # uses: actions/setup-go@v2
61 # with:
62 # go-version: 1.16.x
63 # - name: Run integration tests
64 # run: go test -v ./... -aws_region=us-west-2
65
66 deploy-us-east-1:
67 runs-on: ubuntu-latest
68 needs: deploy-us-west-2
69 outputs:
70 env-name: ${{ steps.env-name.outputs.environment }}
71 steps:
72 - name: Install Go
73 uses: actions/setup-go@v2
74 with:
75 go-version: 1.16.x
76 - uses: actions/checkout@v2
77 - name: Configure AWS credentials
78 id: creds
79 uses: aws-actions/configure-aws-credentials@v1
80 with:
81 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
82 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
83 aws-region: "us-east-1"
84 - name: SAM Validate
85 run: |
86 sam --version
87 sam validate
88 - name: SAM Build
89 run: |
90 sam build
91 - name: SAM Deploy
92 continue-on-error: true
93 run: |
94 sam deploy --template-file .aws-sam/build/template.yaml \
95 --stack-name "OpenDevOpsSubmitImage" \
96 --s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \
97 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
98
99 # integration-test-us-east-1:
100 # runs-on: ubuntu-latest
101 # needs: deploy-us-east-1
102 # steps:
103 # - name: Pull systemTests repo
104 # uses: actions/checkout@master
105 # with:
106 # repository: PmmQuickStartGuides01/systemTests
107 # token: ${{ secrets.ACCESS_KEY }}
108 # - name: Configure AWS credentials
109 # id: creds
110 # uses: aws-actions/configure-aws-credentials@v1
111 # with:
112 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
113 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
114 # aws-region: "us-east-1"
115 # - name: Install Go
116 # uses: actions/setup-go@v2
117 # with:
118 # go-version: 1.16.x
119 # - name: Run integration tests
120 # run: go test -v ./... -aws_region=us-east-1
121
122 deploy-ca-central-1:
123 runs-on: ubuntu-latest
124 needs: deploy-us-east-1
125 outputs:
126 env-name: ${{ steps.env-name.outputs.environment }}
127 steps:
128 - name: Install Go
129 uses: actions/setup-go@v2
130 with:
131 go-version: 1.16.x
132 - uses: actions/checkout@v2
133 - name: Configure AWS credentials
134 id: creds
135 uses: aws-actions/configure-aws-credentials@v1
136 with:
137 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
138 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
139 aws-region: "ca-central-1"
140 - name: SAM Validate
141 run: |
142 sam --version
143 sam validate
144 - name: SAM Build
145 run: |
146 sam build
147 - name: SAM Deploy
148 continue-on-error: true
149
150 run: |
151 sam deploy --template-file .aws-sam/build/template.yaml \
152 --stack-name "OpenDevOpsSubmitImage" \
153 --s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \
154 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
155
156 # integration-test-ca-central-1:
157 # runs-on: ubuntu-latest
158 # needs: deploy-ca-central-1
159 # steps:
160 # - name: Pull systemTests repo
161 # uses: actions/checkout@master
162 # with:
163 # repository: PmmQuickStartGuides01/systemTests
164 # token: ${{ secrets.ACCESS_KEY }}
165 # - name: Configure AWS credentials
166 # id: creds
167 # uses: aws-actions/configure-aws-credentials@v1
168 # with:
169 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
170 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
171 # aws-region: "ca-central-1"
172 # - name: Install Go
173 # uses: actions/setup-go@v2
174 # with:
175 # go-version: 1.16.x
176 # - name: Run integration tests
177 # run: go test -v ./... -aws_region=ca-central-1L'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.
1needs: deploy-us-east-1Comprendere le azioni GitHub
Questo processo utilizza AWS SAM per distribuire l'AWS Lambda SubmitImage su us-west-2.
1deploy-us-west-2:
2 runs-on: ubuntu-latest
3 outputs:
4 env-name: ${{ steps.env-name.outputs.environment }}
5 steps:
6 - name: Install Go
7 uses: actions/setup-go@v2
8 with:
9 go-version: 1.16.x
10 - uses: actions/checkout@v2
11 - name: Configure AWS credentials
12 id: creds
13 uses: aws-actions/configure-aws-credentials@v1
14 with:
15 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
16 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
17 aws-region: "us-west-2"
18 - name: SAM Validate
19 run: |
20 sam --version
21 sam validate
22 - name: SAM Build
23 run: |
24 sam build
25 - name: SAM Deploy
26 continue-on-error: true
27 run: |
28 sam deploy --template-file .aws-sam/build/template.yaml \
29 --stack-name "OpenDevOpsSubmitImage" \
30 --s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
31 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAMQuesto processo clona il repository SystemTests ed esegue test di integrazione in us-west-2.
1integration-test-us-west-2:
2 runs-on: ubuntu-latest
3 needs: deploy-us-west-2
4 steps:
5 - name: Pull systemTests repo
6 uses: actions/checkout@master
7 with:
8 repository: PmmQuickStartGuides01/systemTests
9 token: ${{ secrets.ACCESS_KEY }}
10 - name: Configure AWS credentials
11 id: creds
12 uses: aws-actions/configure-aws-credentials@v1
13 with:
14 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
15 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
16 aws-region: "us-west-2"
17 - name: Install Go
18 uses: actions/setup-go@v2
19 with:
20 go-version: 1.16.x
21 - name: Run integration tests
22 run: go test -v ./... -aws_region=us-west-2Questo passaggio utilizza il token di accesso personale per clonare il repository SystemTests.
1- name: Pull systemTests repo
2 uses: actions/checkout@master
3 with:
4 repository: PmmQuickStartGuides01/systemTests
5 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.
1git add --all
2git commit -m "IM-8 add github actions to SubmitImage"
3git push -u origin IM-8Clicca 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.
1git add --all
2git commit -m "IM-11 add InvokeLabeller to github"
3git remote add origin git@github.com:PmmQuickStartGuides01/InvokeLabeller.git
4git branch -m mainline
5git push -u origin mainlineAzioni 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 .
1git checkout -b IM-11
2mkdir -p .github/workflows && cd .github/workflowsCrea deploy-test-staging.yml con il seguente yaml nella nuova directory . 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.
1name: deploy-invoke-labeller-test-staging
2on:
3 push:
4 branches:
5 - '*'
6 - '!mainline'
7
8env:
9 aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
10
11jobs:
12 run-unit-tests:
13 runs-on: ubuntu-latest
14 steps:
15 - name: Checkout code
16 uses: actions/checkout@v2
17 - uses: actions/setup-python@v2
18 with:
19 python-version: '3.x'
20 - name: Test
21 run: |
22 pip3 install pytest
23 pip3 install moto
24 pip3 install -r tst/requirements.txt --user
25 python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
26
27 deploy-us-west-1:
28 runs-on: ubuntu-latest
29 needs: run-unit-tests
30 outputs:
31 env-name: ${{ steps.env-name.outputs.environment }}
32 steps:
33 - name: Install Go
34 uses: actions/setup-go@v2
35 with:
36 go-version: 1.16.x
37 - uses: actions/checkout@v2
38 - name: Configure AWS credentials
39 id: creds
40 uses: aws-actions/configure-aws-credentials@v1
41 with:
42 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
43 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
44 aws-region: "us-west-1"
45 - name: SAM Validate
46 run: |
47 sam --version
48 sam validate
49 - name: SAM Build
50 run: |
51 sam build
52 - name: SAM Deploy
53 continue-on-error: true
54 run: |
55 sam deploy --template-file .aws-sam/build/template.yaml \
56 --stack-name "OpenDevOpsImageLabeller" \
57 --s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \
58 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
59
60 # integration-test-us-west-1:
61 # runs-on: ubuntu-latest
62 # needs: deploy-us-west-1
63 # steps:
64 # - name: Pull systemTests repo
65 # uses: actions/checkout@master
66 # with:
67 # repository: PmmQuickStartGuides01/systemTests
68 # token: ${{ secrets.ACCESS_KEY }}
69 # - name: Configure AWS credentials
70 # id: creds
71 # uses: aws-actions/configure-aws-credentials@v1
72 # with:
73 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
74 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
75 # aws-region: "us-west-1"
76 # - name: Install Go
77 # uses: actions/setup-go@v2
78 # with:
79 # go-version: 1.16.x
80 # - name: Run integration tests
81 # run: go test -v ./... -aws_region=us-west-1
82
83 deploy-us-east-2:
84 runs-on: ubuntu-latest
85 needs: deploy-us-west-1
86 outputs:
87 env-name: ${{ steps.env-name.outputs.environment }}
88 steps:
89 - name: Install Go
90 uses: actions/setup-go@v2
91 with:
92 go-version: 1.16.x
93 - uses: actions/checkout@v2
94 - name: Configure AWS credentials
95 id: creds
96 uses: aws-actions/configure-aws-credentials@v1
97 with:
98 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
99 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
100 aws-region: "us-east-2"
101 - name: SAM Validate
102 run: |
103 sam --version
104 sam validate
105 - name: SAM Build
106 run: |
107 sam build
108 - name: SAM Deploy
109 continue-on-error: true
110 run: |
111 sam deploy --template-file .aws-sam/build/template.yaml \
112 --stack-name "OpenDevOpsImageLabeller" \
113 --s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \
114 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
115
116 # integration-test-us-east-2:
117 # runs-on: ubuntu-latest
118 # needs: deploy-us-east-2
119 # steps:
120 # - name: Pull systemTests repo
121 # uses: actions/checkout@master
122 # with:
123 # repository: PmmQuickStartGuides01/systemTests
124 # token: ${{ secrets.ACCESS_KEY }}
125 # - name: Configure AWS credentials
126 # id: creds
127 # uses: aws-actions/configure-aws-credentials@v1
128 # with:
129 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
130 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
131 # aws-region: "us-east-2"
132 # - name: Install Go
133 # uses: actions/setup-go@v2
134 # with:
135 # go-version: 1.16.x
136 # - name: Run integration tests
137 # run: go test -v ./... -aws_region=us-east-2Quindi, 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.
1name: deploy-invoke-labeller-prod
2on:
3 pull_request:
4 branches:
5 - mainline
6
7env:
8 aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
9
10jobs:
11 deploy-us-west-2:
12 runs-on: ubuntu-latest
13 outputs:
14 env-name: ${{ steps.env-name.outputs.environment }}
15 steps:
16 - name: Install Go
17 uses: actions/setup-go@v2
18 with:
19 go-version: 1.16.x
20 - uses: actions/checkout@v2
21 - name: Configure AWS credentials
22 id: creds
23 uses: aws-actions/configure-aws-credentials@v1
24 with:
25 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
26 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
27 aws-region: "us-west-2"
28 - name: SAM Validate
29 run: |
30 sam --version
31 sam validate
32 - name: SAM Build
33 run: |
34 sam build
35 - name: SAM Deploy
36 continue-on-error: true
37 run: |
38 sam deploy --template-file .aws-sam/build/template.yaml \
39 --stack-name "OpenDevOpsImageLabeller" \
40 --s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
41 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
42
43 # integration-test-us-west-2:
44 # runs-on: ubuntu-latest
45 # needs: deploy-us-west-2
46 # steps:
47 # - name: Pull systemTests repo
48 # uses: actions/checkout@master
49 # with:
50 # repository: PmmQuickStartGuides01/systemTests
51 # token: ${{ secrets.ACCESS_KEY }}
52 # - name: Configure AWS credentials
53 # id: creds
54 # uses: aws-actions/configure-aws-credentials@v1
55 # with:
56 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
57 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
58 # aws-region: "us-west-2"
59 # - name: Install Go
60 # uses: actions/setup-go@v2
61 # with:
62 # go-version: 1.16.x
63 # - name: Run integration tests
64 # run: go test -v ./... -aws_region=us-west-2
65
66 deploy-us-east-1:
67 runs-on: ubuntu-latest
68 needs: deploy-us-west-2
69 outputs:
70 env-name: ${{ steps.env-name.outputs.environment }}
71 steps:
72 - name: Install Go
73 uses: actions/setup-go@v2
74 with:
75 go-version: 1.16.x
76 - uses: actions/checkout@v2
77 - name: Configure AWS credentials
78 id: creds
79 uses: aws-actions/configure-aws-credentials@v1
80 with:
81 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
82 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
83 aws-region: "us-east-1"
84 - name: SAM Validate
85 run: |
86 sam --version
87 sam validate
88 - name: SAM Build
89 run: |
90 sam build
91 - name: SAM Deploy
92 continue-on-error: true
93 run: |
94 sam deploy --template-file .aws-sam/build/template.yaml \
95 --stack-name "OpenDevOpsImageLabeller" \
96 --s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \
97 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
98
99 # integration-test-us-east-1:
100 # runs-on: ubuntu-latest
101 # needs: deploy-us-east-1
102 # steps:
103 # - name: Pull systemTests repo
104 # uses: actions/checkout@master
105 # with:
106 # repository: PmmQuickStartGuides01/systemTests
107 # token: ${{ secrets.ACCESS_KEY }}
108 # - name: Configure AWS credentials
109 # id: creds
110 # uses: aws-actions/configure-aws-credentials@v1
111 # with:
112 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
113 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
114 # aws-region: "us-east-1"
115 # - name: Install Go
116 # uses: actions/setup-go@v2
117 # with:
118 # go-version: 1.16.x
119 # - name: Run integration tests
120 # run: go test -v ./... -aws_region=us-east-1
121
122 deploy-ca-central-1:
123 runs-on: ubuntu-latest
124 needs: deploy-us-east-1
125 outputs:
126 env-name: ${{ steps.env-name.outputs.environment }}
127 steps:
128 - name: Install Go
129 uses: actions/setup-go@v2
130 with:
131 go-version: 1.16.x
132 - uses: actions/checkout@v2
133 - name: Configure AWS credentials
134 id: creds
135 uses: aws-actions/configure-aws-credentials@v1
136 with:
137 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
138 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
139 aws-region: "ca-central-1"
140 - name: SAM Validate
141 run: |
142 sam --version
143 sam validate
144 - name: SAM Build
145 run: |
146 sam build
147 - name: SAM Deploy
148 continue-on-error: true
149
150 run: |
151 sam deploy --template-file .aws-sam/build/template.yaml \
152 --stack-name "OpenDevOpsImageLabeller" \
153 --s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \
154 --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
155
156 # integration-test-ca-central-1:
157 # runs-on: ubuntu-latest
158 # needs: deploy-ca-central-1
159 # steps:
160 # - name: Pull systemTests repo
161 # uses: actions/checkout@master
162 # with:
163 # repository: PmmQuickStartGuides01/systemTests
164 # token: ${{ secrets.ACCESS_KEY }}
165 # - name: Configure AWS credentials
166 # id: creds
167 # uses: aws-actions/configure-aws-credentials@v1
168 # with:
169 # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
170 # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
171 # aws-region: "ca-central-1"
172 # - name: Install Go
173 # uses: actions/setup-go@v2
174 # with:
175 # go-version: 1.16.x
176 # - name: Run integration tests
177 # run: go test -v ./... -aws_region=ca-central-1Per 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 Bitbucket. Prima di iniziare, ti consigliamo di leggere le pagine sull'architettura di ImageLabeller e sulla configurazione di AWS SageMaker per contestualizzare i contenuti.
1needs: deploy-us-east-1Aggiornamento 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.
1def query_endpoint(img):
2 endpoint_name = 'jumpstart-dft-image-labeller-endpoint'
3 client = boto3.client(service_name='runtime.sagemaker', region_name='us-west-1')
4 response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/x-image', Body=img)
5 model_predictions = json.loads(response['Body'].read())['predictions'][0]
6 return model_predictionsPush 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.
1git add --all
2git commit -m "IM-11 add github actions to InvokeLabeller"
3git push -u origin IM-11Clicca 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.
1git add --all
2git commit -m "IM-7 add SystemTests repository to GitHub"
3git remote add origin git@github.com:PmmQuickStartGuides01/systemTests.git
4git branch -M mainline
5git push -u origin mainlineIl 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.