Wdrażanie aplikacji ImageLabeller za pomocą GitLab

Warren najpierw był programistą, a następnie został ewangelistą technicznym. Do firmy Atlassian dołączył w 2021 roku. Zajmował się zarówno tworzeniem oprogramowania telekomunikacyjnego w języku COBOL na komputerach mainframe, jak i pracą w nowoczesnej infrastrukturze chmurowej AWS. Pasjonuje się technologiami, a jego doświadczenie badawcze obejmuje uczenie maszynowe. Jako ewangelista techniczny Warren promuje możliwości produktów Atlassian i ich integracji z produktami partnerów, tworząc demonstracje, teksty i filmy. W wolnym czasie ćwiczy brazylijskie jiu-jitsu.

Aby zademonstrować sposób opracowywania i wdrażania aplikacji oraz zarządzania nimi przy użyciu Jira Software oraz różnych połączonych narzędzi, nasz zespół utworzył ImageLabeller, prostą aplikację demonstracyjną opartą na usłudze AWS, która wykorzystuje uczenie maszynowe do oznaczania etykietami obrazów.

Na tej stronie opisano, jak wdrożyć aplikację ImageLabeller za pomocą GitLab. Przed rozpoczęciem najlepiej zapoznać się ze stronami na temat architektury aplikacji ImageLabeller oraz konfiguracji AWS SageMaker, aby uzyskać kontekst.

Wymagania wstępne

Jeśli nie masz jeszcze grupy GitLab, utwórz ją od podstaw, wykonując procedurę opisaną w tym przewodniku GitLab.

Publiczne repozytoria GitHub z kodem aplikacji ImageLabeller

Film z demonstracją integracji systemu Jira z GitLab

Integracja systemu Jira z GitLab

W systemie Jira kliknij kolejno opcje Tablica, Aplikacje, a następnie GitLab.

Zrzut ekranu menu rozwijanego w Jira Software umożliwiającego przejście do GitLab

Kliknij przycisk Pobierz teraz.

Okno modalne aplikacji GitLab w Jira Software

Kliknij Aplikacje, a następnie Zarządzaj aplikacjami.

Okno modalne aplikacji GitLab w Jira Software z menu rozwijanym

Rozwiń pozycję GitLab for Jira.

Rozwinięcie obszaru GitLab na ekranie zarządzania aplikacjami w Jira Software

Kliknij przycisk Dodaj przestrzeń nazw.

Ekran dodawania przestrzeni nazw do konfiguracji GitLab w Jira Software

Wybierz istniejącą przestrzeń nazw i kliknij przycisk Połącz. Ten przewodnik zakłada, że masz już istniejące konto GitLab i grupę GitLab.

Łączenie z przestrzenią nazw GitLab w Jira Software

Dodawanie klucza SSH do GitLab

Kliknij ikonę profilu w prawym górnym rogu, a następnie wybierz opcję Preferences (Preferencje).

Przechodzenie do preferencji za pomocą menu rozwijanego w GitLab

Kliknij opcję SSH Keys (Klucze SSH) i wykonaj instrukcje, aby wygenerować nowy klucz SSH lub użyć istniejącego klucza SSH.

Utworzenie repozytorium dla infrastruktury AWS S3

Standardowa pętla pracy programisty polega zazwyczaj na pobraniu przez programistę zadania z systemu Jira, przeniesieniu go do kolumny prac w toku, a następnie przystąpieniu do prac programistycznych. Identyfikator zgłoszenia Jira jest kluczem łączącym pracę programisty ze zgłoszeniem Jira. Jest on podstawowym składnikiem integracji między dwoma systemami.

Przejdź do systemu Jira i utwórz nowe zgłoszenie dotyczące dodania repozytorium infrastruktury AWS S3 do GitLab. Zanotuj identyfikator zgłoszenia. W tym przykładzie jest to IM-5.

Tworzenie nowego zgłoszenia na tablicy w Jira Software

Przejdź do GitLab i kliknij przycisk New project (Nowy projekt).

Przechodzenie do tworzenia nowego projektu w GitLab

Kliknij opcję Create blank project (Utwórz pusty projekt).

Tworzenie nowego projektu w GitLab

Wprowadź wartość w polu Project name (Nazwa projektu) i wybierz odpowiednią grupę w sekcji Project URL (Adres URL projektu). Kliknij przycisk Create project (Utwórz projekt), aby kontynuować.

Tworzenie nowego projektu — szczegółowy widok ekranu w GitLab

W terminalu przejdź do repozytorium s3_infra i uruchom poniższe polecenie, aby wypchnąć plik template.yml AWS CloudFormation do GitLab.

1git add --all
2git commit -m "IM-5 add s3_infra repository to gitlab"
3git remote add origin git@gitlab.com:pmmquickstartguides/s3_infra.git
4git branch -m mainline
5git push -u origin mainline

Dodawanie klucza dostępu AWS

Kliknij opcję Settings (Ustawienia), a następnie pozycję CI/CD. Przewiń w dół i rozwiń obszar Variables (Zmienne). Kliknij przycisk Add variable (Dodaj zmienną).

Strona ustawień CI/CD w GitLab

Utwórz dwie zmienne. Jedną dla identyfikatora klucza dostępu AWS, a drugą dla tajnego klucza dostępu AWS.

Okno modalne dodawania zmiennej pozwalające dodać klucze AWS w GitLab

Zabezpiecz zmienne tak, aby były używane jedynie przez pipeline'y uruchamiane na chronionych gałęziach i tagach. Przyznaj użytkownikowi IAM powiązanemu z kluczem dostępu AWS dostęp administratora. Możesz również zdecydować się na użycie bardziej szczegółowych ustawień kontroli dostępu, wybierając poszczególne zasady dostępu AWS.

Klucze AWS wymienione w sekcji zmiennych na stronie ustawień CI/CD w GitLab

Konfiguracja chronionych gałęzi w celu uzyskania dostępu do chronionych zmiennych

Kliknij opcję Settings (Ustawienia), a następnie Repository (Repozytorium). Przewiń w dół i rozwiń obszar Protected branches (Gałęzie chronione).

Wprowadź przedrostek identyfikatora zgłoszenia Jira oraz symbol *.

W tym przykładzie, gdzie identyfikatory zgłoszeń Jira mają postać IM-5, IM-6 itp., przedrostkiem jest IM-.

Wprowadź IM-* i kliknij przycisk Protect (Chroń).

Konfigurowanie gałęzi chronionych w GitLab

Gałąź mainline oraz gałęzie IM-* zostaną wyświetlone jako gałęzie chronione.

Konfiguracja środowisk wdrożeniowych

Kliknij kolejno opcje Deployments (Wdrożenia), a następnie Environments (Środowiska). Kliknij przycisk New environment (Nowe środowisko), aby dodać nowe środowiska. W tym przykładzie występują środowiska testowe w regionach US-WEST-1 i US-EAST-2 oraz trzy środowiska produkcyjne w regionach US-WEST-2, US-EAST-1 i CA-CENTRAL-1.

Konfigurowanie środowisk wdrożeniowych w GitLab

Plik .gitlab-ci.yml wdrażania w AWS

Przejdź do repozytorium s3_infra w terminalu i utwórz gałąź o nazwie zgodnej z identyfikatorem zgłoszenia Jira.

1git checkout -b IM-5

Utwórz plik .gitlab-ci.yml zawierający poniższy kod yaml. Definiuje on wdrożeniowy przepływ pracy dla środowiska testowego, przejściowego i produkcyjnego.

1stages:
2  - merge-request
3  - test-us-west-1
4  - test-us-east-2
5  - production-us-west-2
6  - production-us-east-1
7  - production-ca-central-1
8
9merge-request-pipeline-job:
10  stage: merge-request
11  rules:
12    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
13  script:
14    - echo "This pipeline always succeeds and enables merges during merge requests"
15    - echo true
16
17deploy-test-us-west-1:
18  stage: test-us-west-1
19  environment: test-us-west-1
20  rules:
21    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
22  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
23  script:
24    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
25    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
26    - aws cloudformation deploy --region us-west-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
27
28deploy-test-us-east-2:
29  stage: test-us-east-2
30  environment: test-us-east-2
31  rules:
32    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
33  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
34  script:
35    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
36    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
37    - aws cloudformation deploy --region us-east-2 --template-file template.yml --stack-name OpenDevOpsS3Infra
38
39deploy-production-us-west-2:
40  stage: production-us-west-2
41  environment: production-us-west-2
42  rules:
43    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
44  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
45  script:
46    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
47    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
48    - aws cloudformation deploy --region us-west-2 --template-file template.yml --stack-name OpenDevOpsS3Infra
49
50deploy-production-us-east-1:
51  stage: production-us-east-1
52  environment: production-us-east-1
53  rules:
54    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
55  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
56  script:
57    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
58    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
59    - aws cloudformation deploy --region us-east-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
60
61deploy-production-ca-central-1:
62  stage: production-ca-central-1
63  environment: production-ca-central-1
64  rules:
65    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
66  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
67  script:
68    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
69    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
70    - aws cloudformation deploy --region ca-central-1 --template-file template.yml --stack-name OpenDevOpsS3Infra

Informacje o pliku .gitlab-ci.yml

Etapy

Dodaj blok stages, aby zdefiniować kolejność wykonywania pipeline'u w GitLab. Etapy są wykonywane w kolejności, w której zostały zdefiniowane w bloku stages. Zadania powiązane z danym etapem są wykonywane równolegle.

1stages:
2  - merge-request
3  - test-us-west-1
4  - test-us-east-2
5  - production-us-west-2
6  - production-us-east-1
7  - production-ca-central-1

Zadania

Zadania są powiązane z etapem i mogą być powiązane ze środowiskiem. Reguły określają, czy konkretne zadanie będzie wykonywane. Reguła w tym przykładzie sprawdza, czy gałąź pipeline'u nie jest gałęzią domyślną oraz czy pipeline nie jest uruchamiany automatycznie w ramach wniosku o scalenie.

Dla każdego zadania można zdefiniować inny obraz. Obrazy można skonfigurować za pomocą narzędzi niezbędnych do tworzenia skryptów zadań. Sekcja script definiuje zestaw kroków uruchamianych podczas wykonywania zadania.

1deploy-test-us-west-1:
2  stage: test-us-west-1
3  environment: test-us-west-1
4  rules:
5    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
6  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
7  script:
8    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
9    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
10    - aws cloudformation deploy --region us-west-1 --template-file template.yml --stack-name OpenDevOpsS3Infra

Pipeline wniosku o scalenie

Pipeline jest uruchamiany automatycznie przez GitLab po zatwierdzeniu wniosku o scalenie. Zadanie można utworzyć dla tego pipeline'u przez dodanie reguły. W tym przykładzie zadanie zawsze przebiega pomyślnie.

1merge-request-pipeline-job:
2  stage: merge-request
3  rules:
4    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
5  script:
6    - echo "This pipeline always succeeds and enables merges during merge requests"
7    - echo true

Wypychanie do gałęzi funkcji

Wykonaj poniższą instrukcję z poziomu wiersza polecenia, aby wypchnąć zmiany do gałęzi IM-5 repozytorium s3_infra. Uwzględnij identyfikator zgłoszenia Jira w komunikatach commita oraz nazwach gałęzi, aby wykorzystać integrację systemu Jira z GitLab do śledzenia, co dzieje się z Twoim projektem.

1git add --all
2git commit -m "IM-5 add .gitlab-ci.yml to s3_infra"
3git push -u origin IM-5

Kliknij opcję CI/CD, a następnie Pipelines (Pipeline'y), aby wyświetlić przebieg pipeline'u.

Ekran pipeline'ów CI/CD w GitLab

Kliknij identyfikator uruchomionego pipeline'u.

Identyfikator uruchomionego pipeline'u w GitLab

Kliknij zadanie, aby zobaczyć więcej szczegółów.

Ekran szczegółów zadania dla pipeline'u uruchomionego w GitLab

Tworzenie wniosku o scalenie

Aby utworzyć wniosek o scalenie, kliknij opcję Merge requests (Wnioski o scalenie), a następnie przycisk Create merge request (Utwórz wniosek o scalenie).

Ekran wniosków o scalenie w GitLab

Wybierz gałąź funkcji jako gałąź źródłową, a następnie kliknij przycisk Compare branches and continue (Porównaj gałęzie i kontynuuj).

Porównanie gałęzi źródłowej i gałęzi docelowej w GitLab

Wybierz odpowiednie osoby w sekcjach Assignee (Osoba przypisana) i Reviewer (Recenzent).

Wybór recenzenta wniosku o scalenie w GitLab

Kliknij przycisk Create merge request (Utwórz wniosek o scalenie).

Kliknięcie przycisku utworzenia wniosku o scalenie w GitLab

Przejrzyj zmiany kodu, a następnie kliknij przycisk Approve (Zatwierdź).

Ekran szczegółów wniosku o scalenie w GitLab, na którym można przeglądać zmiany

Kliknij opcję CI/CD, a następnie opcję Pipelines (Pipeline'y), aby wyświetlić przebieg pipeline'u wniosku o scalenie.

Przechodzenie do ekranu pipeline'ów w GitLab w celu przejrzenia uruchomionych wniosków o scalenie

Kliknij identyfikator pipeline'u. Zwróć uwagę, że zadanie merge-request-pipeline-job jest jedynym uruchomionym zadaniem.

Strona ze szczegółami pipeline'u przedstawiająca tylko zadanie merge-request-pipeline-job uruchomione w GitLab

Wróć do wniosku o scalenie, klikając opcję Merge requests (Wnioski o scalenie), a następnie kliknij aktywny wniosek o scalenie i przycisk Merge (Scal). To spowoduje zainicjowanie kolejnego pipeline'u.

Scalanie aktywnego wniosku o scalenie w GitLab

Kliknij kolejno opcje CI/CD i Pipelines (Pipeline'y). Kliknij identyfikator pipeline'u.

Strona ze szczegółami pipeline'u w GitLab przedstawiająca scalenie gałęzi IM-5 z gałęzią mainline

Utworzenie repozytorium SystemTests

Przejdź do systemu Jira i utwórz zgłoszenie Jira dotyczące dodania repozytorium SystemTests do GitLab. Zanotuj identyfikator tego zgłoszenia Jira. W tym przykładzie jest to IM-7.

Tworzenie zgłoszenia o dodanie repozytorium GitLab dla funkcji AWS Lambda SubmitImage w Jira Software

Wprowadź wartość w polu Project name (Nazwa projektu) i wybierz odpowiednią grupę w sekcji Project URL (Adres URL projektu). Kliknij przycisk Create project (Utwórz projekt), aby kontynuować.

Wypełnianie szczegółów projektu podczas tworzenia nowego projektu w GitLab

W terminalu przejdź do repozytorium SystemTests i uruchom poniższe polecenie, aby wypchnąć kod do GitLab.

1git add --all
2git commit -m "IM-8 add SubmitImage to gitlab"
3git remote add origin git@gitlab.com:pmmquickstartguides/submitimage.git
4git branch -m mainline
5git push -u origin mainline

Repozytorium SystemTests nie wymaga pliku .gitlab-ci.yml. Nie ma własnych pipeline'ów, ponieważ udostępnia testy do uruchomienia w innych pipeline'ach. Zwróć uwagę na zdalny adres URL repozytorium SystemTests. Pipeline'y CI/CD SubmitImage, GetImageLabel i InvokeLabeller będą klonować repozytorium SystemTests podczas poszczególnych kroków testów. Konieczne będzie zaktualizowanie plików gitlab-ci.yml utworzonych później repozytoriów o poprawny adres URL.

Dodawanie tokena wdrożenia

Musisz dodać token wdrożenia, aby sklonować to repozytorium podczas wykonywania innych pipeline'ów. Kliknij opcję Settings (Ustawienia), a następnie Repository (Repozytorium). Przewiń w dół i rozwiń obszar Deploy tokens (Tokeny wdrożenia).

Wprowadzanie przykładowej nazwy „cloneMe” w obszarze tokenów wdrożenia w GitLab

Wprowadź nazwę, zaznacz pozycję read_repository i kliknij przycisk Create deploy token (Utwórz token wdrożenia).

Zaznaczanie pola wyboru „read_repository” na stronie ustawień tokenów wdrożenia w GitLab

Nazwa użytkownika tokena wdrożenia jest generowana automatycznie. Hasło tokena wdrożenia podaje się jeden raz podczas jego tworzenia. Dodaj token do narzędzia zarządzania tajnymi kluczami, aby można było się do niego później odwołać. W dalszej części tego przewodnika odniesieniem do nazwy użytkownika tokena wdrożenia będzie gitlab_deploy_token, a odniesieniem do hasła tokena wdrożenia — gitlab_deploy_password.

Ekran tokenów wdrożenia w GitLab przedstawiający nazwę użytkownika i hasło tokena wdrożenia

Utworzenie repozytorium dla funkcji AWS Lambda SubmitImage

Przejdź do systemu Jira i utwórz nowe zgłoszenie dotyczące dodania repozytorium funkcji AWS Lambda SubmitImage do GitLab. Zanotuj identyfikator zgłoszenia. W tym przykładzie jest to IM-8.

Tablica aplikacji ImageLabeller w Jira Software — wyróżnienie zgłoszenia IM-8 o dodanie repozytorium GitLab dla funkcji AWS Lambda SubmitImage

Przejdź do GitLab, a następnie kliknij kolejno opcje New project (Nowy projekt) i Create blank project (Utwórz pusty projekt). Wprowadź wartość w polu Project name (Nazwa projektu) i wybierz odpowiednią grupę w sekcji Project URL (Adres URL projektu). Kliknij przycisk Create project (Utwórz projekt), aby kontynuować.

Wypełnianie szczegółów projektu podczas tworzenia nowego projektu w GitLab

W terminalu przejdź do repozytorium SumbitImage i uruchom poniższe polecenie, aby wypchnąć kod do GitLab.

1git add --all
2git commit -m "IM-8 add SubmitImage to gitlab"
3git remote add origin git@gitlab.com:pmmquickstartguides/submitimage.git
4git branch -m mainline
5git push -u origin mainline

Następnie dodaj klucze wdrożenia z repozytorium SystemTests, aby umożliwić pobranie pipeline'u GitLab SubmitImage i uruchom SystemTests.

Na końcu dodaj swój identyfikator konta AWS jako zmienną CI/CD.

Zrzut ekranu zmiennych w GitLab

Plik .gitlab-ci.yml wdrażania w AWS

Przejdź do repozytorium SubmitImage w terminalu i utwórz gałąź o nazwie zgodnej z identyfikatorem zgłoszenia Jira.

1git checkout -b IM-8

Utwórz plik .gitlab-ci.yml zawierający poniższy kod yaml. Definiuje on wdrożeniowy przepływ pracy dla środowiska testowego, przejściowego i produkcyjnego. Musisz zaktualizować wiersz git clone dla SystemTests zgodnie z Twoim repozytorium SystemTests.

1stages:
2  - merge-request
3  - run-unit-tests
4#US-WEST-1
5  - deploy-us-west-1
6  - test-us-west-1
7#US-EAST-2
8  - deploy-us-east-2
9  - test-us-east-2
10#US-WEST-2
11  - deploy-us-west-2
12  - test-us-west-2
13#US-EAST-1
14  - deploy-us-east-1
15  - test-us-east-1
16#CA-CENTRAL-1
17  - deploy-ca-central-1
18  - test-ca-central-1
19
20merge-request-pipeline-job:
21  stage: merge-request
22  rules:
23    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
24  script:
25    - echo "This pipeline always succeeds and enables merge"
26    - echo true
27
28run-unit-tests:
29  stage: run-unit-tests
30  image: golang:buster
31  rules:
32    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
33  script:
34    - cd submitImage
35    - go test ./opendevopslambda/...
36
37#US-WEST-1
38deploy-us-west-1:
39  stage: deploy-us-west-1
40  environment: test-us-west-1
41  image: python:latest
42  rules:
43    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
44  before_script:
45    - pip3 install awscli --upgrade
46    - pip3 install aws-sam-cli --upgrade
47    - wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
48    - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
49    - export PATH=$PATH:/usr/local/go/bin
50    - go version
51  script:
52    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
53    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
54    - sam build
55    - sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --region us-west-1
56    - sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage  --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-1 --no-fail-on-empty-changeset
57
58      #test-us-west-1:
59      #  stage: test-us-west-1
60      #  environment: test-us-west-1
61      #  image: golang:buster
62      #  rules:
63      #    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
64      #  script:
65      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
66      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
67      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
68      #    - cd systemtests
69      #    - go test -v ./... -aws_region=us-west-1
70
71#US-EAST-2
72deploy-us-east-2:
73  stage: deploy-us-east-2
74  environment: test-us-east-2
75  image: python:latest
76  rules:
77    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
78  before_script:
79    - pip3 install awscli --upgrade
80    - pip3 install aws-sam-cli --upgrade
81    - wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
82    - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
83    - export PATH=$PATH:/usr/local/go/bin
84    - go version
85  script:
86    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
87    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
88    - sam build
89    - sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --region us-east-2
90    - sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage  --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-2 --no-fail-on-empty-changeset
91
92      #test-us-east-2:
93      #  stage: test-us-east-2
94      #  environment: test-us-east-2
95      #  image: golang:buster
96      #  rules:
97      #    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
98      #  script:
99      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
100      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
101      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
102      #    - cd systemtests
103      #    - go test -v ./... -aws_region=us-east-2
104
105#US-WEST-2
106deploy-us-west-2:
107  stage: deploy-us-west-2
108  environment: production-us-west-2
109  image: python:latest
110  rules:
111    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
112  before_script:
113    - pip3 install awscli --upgrade
114    - pip3 install aws-sam-cli --upgrade
115    - wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
116    - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
117    - export PATH=$PATH:/usr/local/go/bin
118    - go version
119  script:
120    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
121    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
122    - sam build
123    - sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --region us-west-2
124    - sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage  --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-2 --no-fail-on-empty-changeset
125
126      #test-us-west-2:
127      #  stage: test-us-west-2
128      #  environment: production-us-west-2
129      #  image: golang:buster
130      #  rules:
131      #    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
132      #  script:
133      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
134      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
135      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
136      #    - cd systemtests
137      #    - go test -v ./... -aws_region=us-west-2
138
139#US-EAST-1
140deploy-us-east-1:
141  stage: deploy-us-east-1
142  environment: production-us-east-1
143  image: python:latest
144  rules:
145    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
146  before_script:
147    - pip3 install awscli --upgrade
148    - pip3 install aws-sam-cli --upgrade
149    - wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
150    - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
151    - export PATH=$PATH:/usr/local/go/bin
152    - go version
153  script:
154    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
155    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
156    - sam build
157    - sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --region us-east-1
158    - sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage  --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-1 --no-fail-on-empty-changeset
159
160      #test-us-east-1:
161      #  stage: test-us-east-1
162      #  environment: production-us-east-1
163      #  image: golang:buster
164      #  rules:
165      #    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
166      #  script:
167      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
168      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
169      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
170      #    - cd systemtests
171      #    - go test -v ./... -aws_region=us-east-1
172
173#CA-CENTRAL-1
174deploy-central-1:
175  stage: deploy-ca-central-1
176  environment: production-ca-central-1
177  image: python:latest
178  rules:
179    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
180  before_script:
181    - pip3 install awscli --upgrade
182    - pip3 install aws-sam-cli --upgrade
183    - wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
184    - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
185    - export PATH=$PATH:/usr/local/go/bin
186    - go version
187  script:
188    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
189    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
190    - sam build
191    - sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --region ca-central-1
192    - sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage  --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region ca-central-1 --no-fail-on-empty-changeset
193
194      #test-central-1:
195      #  stage: test-ca-central-1
196      #  environment: production-ca-central-1
197      #  image: golang:buster
198      #  rules:
199      #    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
200      #  script:
201      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
202      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
203      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
204      #    - cd systemtests
205      #    - go test -v ./... -aws_region=ca-central-1

Wykonanie testów integracyjnych jest na ten moment ujęte w komentarz. Testy systemowe zakończą się powodzeniem tylko wówczas, gdy cała aplikacja zostanie wdrożona. Po wdrożeniu wszystkich komponentów aplikacji ImageLabeller usuń oznaczenie komentarzem kroki testów integracyjnych w swoim repozytorium i wykonaj kolejne wypchnięcie, aby uruchomić pipeline wdrożenia. Musisz zaktualizować wiersz git clone dla SystemTests zgodnie z Twoim repozytorium SystemTests.

Informacje o pliku .gitlab-ci.yml

Ten krok wykonuje testy jednostkowe będące częścią repozytorium SubmitImage.

1unit-test-us-west-1:
2  stage: unit-test-us-west-1
3  environment: test-us-west-1
4  image: golang:buster
5  rules:
6    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
7  script:
8    - cd submitImage
9    - go test ./opendevopslambda/...

To zadanie wykorzystuje AWS SAM do wdrożenia funkcji AWS Lambda SubmitImage. Zwróć uwagę na sekcję before_script. Ten krok jest uruchamiany przed sekcją script i można go używać do instalowania zależności i konfigurowania różnych narzędzi.

1deploy-us-west-1:
2  stage: deploy-us-west-1
3  environment: test-us-west-1
4  image: python:latest
5  rules:
6    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
7  before_script:
8    - pip3 install awscli --upgrade
9    - pip3 install aws-sam-cli --upgrade
10    - wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
11    - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
12    - export PATH=$PATH:/usr/local/go/bin
13    - go version
14  script:
15    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
16    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
17    - sam build
18    - sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --region us-west-1
19    - sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage  --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-1 --no-fail-on-empty-changeset

Ten krok pobiera i uruchamia testy integracyjne w repozytorium SystemTests. Musisz zaktualizować wiersz git clone dla SystemTests zgodnie z Twoim repozytorium SystemTests.

1test-us-west-1:
2  stage: test-us-west-1
3  environment: test-us-west-1
4  image: golang:buster
5  rules:
6    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
7  script:
8    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
9    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
10    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
11    - cd systemtests
12    - go test -v ./... -aws_region=us-west-1

Wiersz git clone zawiera odwołanie do utworzonego wcześniej tokena wdrożenia.

1- git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git

Wypychanie do gałęzi funkcji

Wykonaj poniższą instrukcję z poziomu wiersza polecenia, aby wypchnąć zmiany do gałęzi IM-8 repozytorium SubmitImage. Uwzględnij identyfikator zgłoszenia Jira w komunikatach commita oraz nazwach gałęzi, aby wykorzystać integrację systemu Jira z GitLab do śledzenia, co dzieje się z Twoim projektem.

Kliknij opcję CI/CD, a następnie Pipelines (Pipeline'y), aby wyświetlić przebieg pipeline'u.

Zrzut ekranu przebiegu pipeline'u w GitLab

Tworzenie wniosku o scalenie

Utwórz wniosek o scalenie, aby dokonać wdrożenia w środowiskach produkcyjnych po tym, jak GitLab przeprowadzi wdrożenia w środowiskach testowych. Wybierz gałąź IM-8.

Zrzut ekranu wniosków o scalenie w GitLab

Kliknij opcję CI/CD, a następnie Pipelines (Pipeline'y), aby wyświetlić uruchomiony pipeline wniosku o scalenie.

Zrzut ekranu uruchamiania wniosku o scalenie w GitLab

Po ukończeniu pipeline'u wniosku o scalenie scal zmiany z gałęzią mainline. Kliknij opcję CI/CD, a następnie Pipeline'y, aby wyświetlić uruchomiony pipeline produkcyjny.

Zrzut ekranu uruchamiania pipeline'u produkcyjnego w GitLab

Utworzenie repozytorium dla funkcji AWS Lambda InvokeLabeller

Przejdź do systemu Jira i utwórz nowe zgłoszenie dotyczące dodania repozytorium funkcji AWS Lambda InvokeLabeller do GitLab. Zanotuj identyfikator zgłoszenia. W tym przykładzie jest to IM-10.

Zrzut ekranu zgłoszenia jira o utworzenie repozytorium „InvokeLabeller” w GitLab

Przejdź do GitLab, a następnie kliknij kolejno opcje New project (Nowy projekt) i Create blank project (Utwórz pusty projekt). Wprowadź wartość w polu Project name (Nazwa projektu) i wybierz odpowiednią grupę w sekcji Project URL (Adres URL projektu). Kliknij przycisk Create project (Utwórz projekt), aby kontynuować.

Zrzut ekranu tworzenia nowego projektu „InvokeLabeller” w GitLab

W terminalu przejdź do repozytorium InvokeLabeller i uruchom poniższe polecenie, aby wypchnąć kod do GitLab.

1git add --all
2git commit -m "IM-10 add InvokeLabeller to gitlab"
3git remote add origin git@gitlab.com:pmmquickstartguides/invokelabeller.git
4git branch -m mainline
5git push -u origin mainline

Następnie dodaj klucze wdrożenia z repozytorium SystemTests, aby umożliwić pobranie pipeline'u GitLab InvokeLabeller i uruchom SystemTests.

Na końcu dodaj swój identyfikator konta AWS jako zmienną CI/CD.

Zrzut ekranu strony zmiennych w GitLab

Plik .gitlab-ci.yml wdrażania w AWS

Przejdź do repozytorium InvokeLabeller w terminalu i utwórz gałąź o nazwie zgodnej z identyfikatorem zgłoszenia Jira.

1git checkout -b IM-10

Utwórz plik .gitlab-ci.yml zawierający poniższy kod yaml. Definiuje on wdrożeniowy przepływ pracy dla środowiska testowego, przejściowego i produkcyjnego. Musisz zaktualizować wiersz git clone dla SystemTests zgodnie z Twoim repozytorium SystemTests.

1stages:
2  - merge-request
3  - run-unit-tests
4#US-WEST-1
5  - deploy-us-west-1
6  - test-us-west-1
7#US-EAST-2
8  - deploy-us-east-2
9  - test-us-east-2
10#US-WEST-2
11  - deploy-us-west-2
12  - test-us-west-2
13#US-EAST-1
14  - deploy-us-east-1
15  - test-us-east-1
16#CA-CENTRAL-1
17  - deploy-ca-central-1
18  - test-ca-central-1
19
20merge-request-pipeline-job:
21  stage: merge-request
22  rules:
23    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
24  script:
25    - echo "This pipeline always succeeds and enables merge"
26    - echo true
27
28run-unit-tests:
29  stage: run-unit-tests
30  image: python:3.8-buster
31  rules:
32    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
33  before_script:
34    - pip3 install pytest
35    - pip3 install moto
36    - pip3 install -r tst/requirements.txt --user
37  script:
38    - python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
39
40#US-WEST-1
41deploy-us-west-1:
42  stage: deploy-us-west-1
43  environment: test-us-west-1
44  image: python:3.8-buster
45  rules:
46    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
47  before_script:
48    - pip3 install awscli --upgrade
49    - pip3 install aws-sam-cli --upgrade
50  script:
51    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
52    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
53    - sam build
54    - sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --region us-west-1
55    - sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller  --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-1 --no-fail-on-empty-changeset
56
57      #test-us-west-1:
58      #  stage: test-us-west-1
59      #  environment: test-us-west-1
60      #  image: golang:buster
61      #  rules:
62      #    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
63      #  script:
64      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
65      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
66      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
67      #    - cd systemtests
68      #    - go test -v ./... -aws_region=us-west-1
69
70#US-EAST-2
71deploy-us-east-2:
72  stage: deploy-us-east-2
73  environment: test-us-east-2
74  image: python:3.8-buster
75  rules:
76    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
77  before_script:
78    - pip3 install awscli --upgrade
79    - pip3 install aws-sam-cli --upgrade
80  script:
81    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
82    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
83    - sam build
84    - sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --region us-east-2
85    - sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller  --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-2 --no-fail-on-empty-changeset
86
87      #test-us-east-2:
88      #  stage: test-us-east-2
89      #  environment: test-us-east-2
90      #  image: golang:buster
91      #  rules:
92      #    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
93      #  script:
94      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
95      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
96      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
97      #    - cd systemtests
98      #    - go test -v ./... -aws_region=us-east-2
99
100#US-WEST-2
101deploy-us-west-2:
102  stage: deploy-us-west-2
103  environment: production-us-west-2
104  image: python:3.8-buster
105  rules:
106    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
107  before_script:
108    - pip3 install awscli --upgrade
109    - pip3 install aws-sam-cli --upgrade
110  script:
111    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
112    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
113    - sam build
114    - sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --region us-west-2
115    - sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller  --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-2 --no-fail-on-empty-changeset
116
117      #test-us-west-2:
118      #  stage: test-us-west-2
119      #  environment: production-us-west-2
120      #  image: golang:buster
121      #  rules:
122      #    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
123      #  script:
124      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
125      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
126      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
127      #    - cd systemtests
128      #    - go test -v ./... -aws_region=us-west-2
129
130#US-EAST-1
131deploy-us-east-1:
132  stage: deploy-us-east-1
133  environment: production-us-east-1
134  image: python:3.8-buster
135  rules:
136    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
137  before_script:
138    - pip3 install awscli --upgrade
139    - pip3 install aws-sam-cli --upgrade
140  script:
141    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
142    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
143    - sam build
144    - sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --region us-east-1
145    - sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller  --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-1 --no-fail-on-empty-changeset
146
147      #test-us-east-1:
148      #  stage: test-us-east-1
149      #  environment: production-us-east-1
150      #  image: golang:buster
151      #  rules:
152      #    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
153      #  script:
154      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
155      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
156      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
157      #    - cd systemtests
158      #    - go test -v ./... -aws_region=us-east-1
159
160#CA-CENTRAL-1
161deploy-central-1:
162  stage: deploy-ca-central-1
163  environment: production-ca-central-1
164  image: python:3.8-buster
165  rules:
166    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
167  before_script:
168    - pip3 install awscli --upgrade
169    - pip3 install aws-sam-cli --upgrade
170  script:
171    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
172    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
173    - sam build
174    - sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --region ca-central-1
175    - sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller  --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region ca-central-1 --no-fail-on-empty-changeset
176
177      #test-central-1:
178      #  stage: test-ca-central-1
179      #  environment: production-ca-central-1
180      #  image: golang:buster
181      #  rules:
182      #    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
183      #  script:
184      #    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
185      #    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
186      #    - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
187      #    - cd systemtests
188      #    - go test -v ./... -aws_region=ca-central-1

Aby zademonstrować sposób opracowywania i wdrażania aplikacji oraz zarządzania nimi przy użyciu Jira Software oraz różnych połączonych narzędzi, nasz zespół utworzył ImageLabeller, prostą aplikację demonstracyjną opartą na usłudze AWS, która wykorzystuje uczenie maszynowe do oznaczania etykietami obrazów.

Na tej stronie opisano, jak wdrożyć aplikację ImageLabeller za pomocą Bitbucket. Przed rozpoczęciem najlepiej zapoznać się ze stronami na temat architektury aplikacji ImageLabeller oraz konfiguracji AWS SageMaker, aby uzyskać kontekst.

Aktualizacja pliku src/app.py o punkt końcowy AWS SageMager

Otwórz plik src/app.py w repozytorium InvokeLabeller i wyszukaj pozycję query_endpoint. Zmień wartości endpoint_name i client region_name zgodnie z notesem AWS SageMaker.

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

Wypychanie do gałęzi funkcji

Wykonaj poniższą instrukcję z poziomu wiersza polecenia, aby wypchnąć zmiany do gałęzi IM-10 repozytorium InvokeLabeller. Uwzględnij identyfikator zgłoszenia Jira w komunikatach commita oraz nazwach gałęzi, aby wykorzystać integrację systemu Jira z GitLab do śledzenia, co dzieje się z Twoim projektem.

1git add --all
2git commit -m "IM-10 add .gitlab-ci.yml to InvokeLabeller"
3git push -u origin IM-10

Kliknij opcję CI/CD, a następnie Pipelines (Pipeline'y), aby wyświetlić przebieg pipeline'u.

Zrzut ekranu uruchamiania pipeline'u w GitLab

Tworzenie wniosku o scalenie

Utwórz wniosek o scalenie, aby dokonać wdrożenia w środowiskach produkcyjnych po tym, jak GitLab przeprowadzi wdrożenia w środowiskach testowych. Wybierz gałąź IM-10.

Zrzut ekranu tworzenia wniosku o scalenie w GitLab

Po ukończeniu pipeline'u wniosku o scalenie scal zmiany z gałęzią mainline. Kliknij opcję CI/CD, a następnie Pipeline'y, aby wyświetlić uruchomiony pipeline produkcyjny.

Zrzut ekranu uruchamiania pipeline'u produkcyjnego w GitLab

Aby zademonstrować sposób opracowywania i wdrażania aplikacji oraz zarządzania nimi przy użyciu Jira Software oraz różnych połączonych narzędzi, nasz zespół utworzył ImageLabeller, prostą aplikację demonstracyjną opartą na usłudze AWS, która wykorzystuje uczenie maszynowe do oznaczania etykietami obrazów.

Na tej stronie opisano, jak wdrożyć aplikację ImageLabeller za pomocą Bitbucket. Przed rozpoczęciem najlepiej zapoznać się ze stronami na temat architektury aplikacji ImageLabeller oraz konfiguracji AWS SageMaker, aby uzyskać kontekst.

Polecane dla Ciebie

Społeczność DevOps

Ścieżka szkoleniowa DevOps

Zacznij korzystać bezpłatnie

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