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.

Menu a discesa dell'app JSW

Clicca su Get it now (Installa ora).

App Jira Software GitHub

Clicca su App, quindi su Gestisci le app ed espandi GitHub.

Immagine della gestione delle app in JSW

Clicca su Get started (Inizia).

Clicca su Get started (Inizia).

Immagine della configurazione di GitHub

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.

Immagine della connessione dell'organizzazione GitHub a Jira

Jira inizierà a sincronizzare i dati da GitHub.

Al termine della sincronizzazione, in Sync Status (Stato sincronizzazione) viene visualizzato COMPLETE (COMPLETO).

Screenshot della modifica della sincronizzazione dello stato

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.

Infrastruttura AWS S3

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 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 .

1git checkout -b IM-9
2mkdir -p .github/workflows && cd .github/workflows

Crea 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-9

Clicca su Actions (Azioni) per vedere i flussi di lavoro in esecuzione.

Immagine dei flussi di lavoro in esecuzione

Creazione di una pull request

Clicca su Pull request seguito da Create pull request (Crea pull request).

Immagine del confronto delle modifiche

Scegli il branch di funzioni come branch di origine, quindi clicca su Create pull request (Crea pull request).

Immagine della creazione di una 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.

Immagine della board IM

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 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 .

1git checkout -b IM-8
2mkdir -p .github/workflows && cd .github/workflows

Crea 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-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.

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-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.

1needs: deploy-us-east-1
Comprendere 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_IAM

Questo 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-2

Questo 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-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.

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 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 .

1git checkout -b IM-11
2mkdir -p .github/workflows && cd .github/workflows

Crea 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-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.

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-1

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 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-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.

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_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.

1git add --all
2git commit -m "IM-11 add github actions to InvokeLabeller"
3git 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.

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 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.

Consigliata per te

Community DevOps

Percorso di apprendimento DevOps

Inizia gratis

Morty Proxy This is a proxified and sanitized view of the page, visit original site.