Статьи
Обучающие материалы
Интерактивные руководства
Развертывание ImageLabeller с помощью Bitbucket
![Фото Уоррена Марусяка](https://wac-cdn.atlassian.com/dam/jcr:7509aefb-43e8-401d-90fe-0850cbe6bb13/wmarusiak_headshot%20(1).png?cdnVersion=2569)
Уоррен Марусяк
Старший технический эксперт
Чтобы продемонстрировать, как разрабатывать и развертывать приложения, а также управлять ими с помощью Jira Software и различных подключенных инструментов, наша команда создала ImageLabeller — простое демонстрационное приложение на платформе AWS, которое с помощью машинного обучения наносит метки на изображения.
На этой странице мы расскажем, как развернуть ImageLabeller с помощью Bitbucket. Прежде чем начать, рекомендуем ознакомиться с архитектурой ImageLabeller и страницами настройки AWS SageMaker в качестве контекста.
Обязательные условия
Если вы еще не настроили SSH для своего аккаунта Bitbucket, следуйте этим инструкциям.
Общедоступные репозитории GitHub с кодом ImageLabeller
Демонстрационное видео о конвейерах Bitbucket
Создание репозитория для инфраструктуры AWS S3
Стандартный цикл разработки обычно подразумевает, что разработчик берет задачу из Jira, переносит ее в раздел незавершенной работы и начинает работать над ней. Идентификатор задачи Jira — это ключ, который связывает разработку с задачей Jira. Это основной компонент интеграции между двумя системами.
Перейдите в Jira и создайте задачу по добавлению репозитория инфраструктуры AWS S3 в Bitbucket. Обратите внимание на идентификатор задачи (в данном примере — IM-5).
![Снимок экрана: задача Jira по добавлению репозитория инфраструктуры AWS S3 в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:30d6a8e7-de1e-4f4a-90da-86e20ca4034e/Create_a_new_issue.png?cdnVersion=2569)
Перейдите в Bitbucket > Create > Repository (Создать > Репозиторий).
![Создание репозитория в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:91267990-ea45-4412-8c31-9abf326b0ff6/screenshot_system_tests_02.png?cdnVersion=2569)
Выберите необходимые значения в полях Workspace (Рабочее пространство) и Project (Проект). Задайте mainline в качестве Default branch name (Имя ветки по умолчанию). Нажмите Create repository (Создать репозиторий), чтобы продолжить.
![Всплывающее окно для создания нового репозитория в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:aafd17ff-5cf6-4f67-9c24-4270d15b3e64/Select_Workspace_in_Project.png?cdnVersion=2569)
В терминале перейдите в репозиторий s3_infra и выполните следующие команды, чтобы отправить файл template.yml для AWS CloudFormation в Bitbucket.
git add --all
git commit -m "IM-5 add s3_infra repository to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/s3_infra.git
git branch -m mainline
git push -u origin mainline
Активируйте Bitbucket Pipelines
Перейдите в раздел Repository settings > Settings > Enable Pipelines (Настройки репозитория > Настройки > Включить конвейеры).
![Включение конвейеров в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:7e44812e-4b95-4dd2-b312-d1e43dfec625/Enable_pipelines_in_Bitbucket.png?cdnVersion=2569)
Добавление переменных ключей AWS для доступа к репозиторию
Перейдите в раздел Repository variables (Переменные репозитория), введите идентификатор ключа доступа AWS и нажмите Add (Добавить). Затем введите секретный ключ доступа AWS и нажмите Add (Добавить).
![Переменные репозитория в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:82848609-b1f9-4564-ae17-1a94e42f3fdc/Enter_your_AWS_key_ID.png?cdnVersion=2569)
Настройка сред развертывания
Нажмите Deployments (Развертывания).
![Экран настройки развертываний в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:4979e02b-faae-4bbe-ade8-c31ab256709b/Deployments.png?cdnVersion=2569)
Нажмите add environment (добавить среду), чтобы добавить новые среды. В этом примере используется тестовая среда US-WEST-1, промежуточная среда US-EAST-2 и три рабочие среды в US-WEST-2, US-EAST-1 и CA-CENTRAL-1.
![Добавление сред развертывания в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:bb2b3924-e65e-4c84-95c8-3dac9b620388/deployment-environments.png?cdnVersion=2569)
Файл bitbucket-pipelines.yml для развертывания в AWS
Перейдите в репозиторий s3_infra в терминале и создайте ветку с именем, соответствующим идентификатору задачи Jira.
git checkout -b IM-5
Создайте файл bitbucket-pipelines.yml со следующим кодом YAML. В нем задается рабочий процесс развертывания для тестовой, промежуточной и рабочих сред.
definitions:
steps:
- step: &deploy-test-usw1
name: Deploy Test us-west-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-staging-use2
name: Deploy Staging us-east-2
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-2'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-production-usw2
name: Deploy Production us-west-2
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-production-use1
name: Deploy Production us-east-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
- step: &deploy-production-cac1
name: Deploy Production ca-central-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'ca-central-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
pipelines:
default:
- step:
<<: *deploy-test-usw1
deployment: Test us-west-1
- step:
<<: *deploy-staging-use2
deployment: Staging us-east-2
branches:
mainline:
- step:
<<: *deploy-production-usw2
deployment: Production us-west-2
- step:
<<: *deploy-production-use1
deployment: Production us-east-1
- step:
<<: *deploy-production-cac1
deployment: Production ca-central-1
Сведения о файле bitbucket-pipelines.yml
Определения и шаги
Перечислите набор шагов после ключевого слова steps в разделе definitions. Для каждого шага после слова step указывается псевдоним, который служит ссылкой для него в пределах файла bitbucket-pipelines.yml, после слова name — имя, которое отображается на экране развертывания Bitbucket, и сценарий после слова script. Сценарий — это набор из одной или нескольких команд.
definitions:
steps:
- step: &deploy-test-usw1
name: Deploy Test us-west-1
script:
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsS3Infra'
CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
WAIT: 'true'
TEMPLATE: 'template.yml'
Pipes
На этом шаге используется элемент конвейера atlassian/aws-cloudformation-deploy
для развертывания корзин AWS S3, определенных в файле s3_infra template.yml.
- pipe: atlassian/aws-cloudformation-deploy:0.10.0
Доступные элементы конвейера можно найти здесь. Документацию по элементу atlassian/aws-cloudformation-deploy
можно найти здесь.
Pipelines
В разделе pipelines перечислены конвейеры, каждый из которых представляет собой последовательность шагов. В конвейере по умолчанию, default, выполняются шаги для веток, которые не указаны явным образом в других конвейерах. В нашем конвейере по умолчанию будут выполняться этапы развертывания в тестовой и промежуточной средах.
pipelines:
default:
- step:
<<: *deploy-test-usw1
deployment: Test us-west-1
- step:
<<: *deploy-staging-use2
deployment: Staging us-east-2
Параметр deployment обеспечивает интеграцию между Jira и Bitbucket.
deployment: Test us-west-1
В разделе branches можно задать шаги для конкретных веток по их именам. В приведенном ниже фрагменте описан набор шагов для основной ветки mainline.
branches:
mainline:
- step:
<<: *deploy-production-usw2
deployment: Production us-west-2
- step:
<<: *deploy-production-use1
deployment: Production us-east-1
- step:
<<: *deploy-production-cac1
deployment: Production ca-central-1
Дополнительную информацию по этой теме можно найти в этой справочной статье.
Отправка в функциональную ветку
Выполните следующие запросы в командной строке, чтобы отправить изменения в ветку IM-5 репозитория s3_infra. Включите идентификатор задачи Jira в сообщения о коммитах и имена веток, чтобы позволить интеграции Jira с Bitbucket отслеживать, что происходит в проекте.
git add --all
git commit -m "IM-5 add bitbucket-pipelines.yml"
git push -u origin IM-5
Нажмите Pipelines (Конвейеры), а затем — IM-5, чтобы увидеть запущенный конвейер.
![Выполнение конвейера в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:064b8f87-4b16-48d3-87c2-94297c1f95a2/see_the_running_pipeline.png?cdnVersion=2569)
Нажмите сам конвейер, чтобы увидеть подробности выполнения. Конвейер запустил шаги по развертыванию в тестовой среде в us-west-1 и в промежуточной среде в us-east-2.
![Сведения о выполнении конвейера в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:bc21437b-f290-4cc3-99cb-d4a30917f224/see_details_of_the_execution.png?cdnVersion=2569)
Создание запроса pull
Чтобы создать запрос pull, нажмите Pull requests (Запросы pull), а затем — Create pull request (Создать запрос pull).
![Создание запроса pull в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:aa51bc6a-ee8a-487b-9157-f8b37c835bf7/create_pull_request.png?cdnVersion=2569)
Выберите свою функциональную ветку в качестве исходной, отметьте флажок Close branch (Закрыть ветку) и нажмите Create pull request (Создать запрос pull).
![Модальное окно при создании запроса pull в Bitbucket.](https://wac-cdn.atlassian.com/dam/jcr:50ed6bf5-be76-4993-99fa-141c090ed6fb/create_pull_request_modal.png?cdnVersion=2569)
Просмотрите изменения кода в запросе pull, затем нажмите Approve (Подтвердить) и Merge (Объединить).
![Подтверждение и объединение запроса pull в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:a242b7ee-ac5f-4592-b62d-6316057f1f70/approve_and_merge_request.png?cdnVersion=2569)
При нажатии кнопки Merge (Объединить) откроется экран слияния с запросом pull. Отметьте флажок Transition issue (Изменить статус задачи) и нажмите Merge (Объединить).
![Флажок изменения статуса задачи при объединении запроса pull в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:4c9a3536-8aa5-403b-8b94-6f908fd7eeb5/transition_issue_check_box.png?cdnVersion=2569)
Нажмите Pipelines (Конвейеры), чтобы проследить за конвейером для основной ветки.
![Мониторинг основного конвейера в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:fad23065-cc32-4bd9-822a-079d7519b67f/monitor_the_main_pipeline.png?cdnVersion=2569)
Ветка IM-5 исчезла. Осталась основная ветка, и конвейер запущен. Нажмите конвейер.
![Экран конвейера основной ветки в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:2956bbb0-68fd-413d-8dd7-cf0a82005922/pipeline_is_running.png?cdnVersion=2569)
Конвейер выполнил шаги по развертыванию в рабочих средах в us-west-2, us-east-1 и ca-central-1. Если конвейер не сможет успешно завершить работу, можно выполнить его повторно, нажав кнопку Rerun (Перезапустить).
Откат развертываний с ошибками
Чтобы откатить развертывание, нажмите Deployments (Развертывания).
![Экран развертываний в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:11bfda11-c540-4281-9b4c-ff4ee8374e09/deployments(2).png?cdnVersion=2569)
Выберите среду, которую требуется откатить, чтобы получить список прошлых развертываний, выберите версию, до которой будет выполняться откат, и нажмите Redeploy (Развернуть еще раз).
![Выбор среды и версии для отката в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:655283bd-0a91-4526-9164-c50ca21661e9/choose_the_version_you_want_to_deploy.png?cdnVersion=2569)
Проверьте изменения и нажмите Redeploy (Развернуть еще раз).
![Проверка изменений перед повторным развертыванием в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:91ac3fd0-9058-4336-a812-a67586a4d75c/verify_the_change_is_correct.png?cdnVersion=2569)
Повторное развертывание выполняется только для выбранной среды.
![Модальное окно конвейера в Bitbucket, в котором повторно развертывается только выбранная среда](https://wac-cdn.atlassian.com/dam/jcr:85290b0c-83f4-42ce-8c50-d792cd951223/the_chosen_environment_is_redeployed_.png?cdnVersion=2569)
Создание репозитория для SubmitImage AWS Lambda
Перейдите в Jira и создайте задачу для добавления репозитория SubmitImage в Bitbucket. Обратите внимание на идентификатор задачи Jira (в данном примере — IM-6).
![Создание задачи в Jira Software для добавления репозитория SubmitImage в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:249ff2e7-281a-4d01-96d8-c66a60173354/create_a_jira_issue.png?cdnVersion=2569)
Перейдите в Bitbucket и нажмите Create (Создать), а затем — Repository (Репозиторий).
![Создание репозитория в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:1b48a560-9d12-4b15-b963-0c6a4282a628/create_repository.png?cdnVersion=2569)
Выберите необходимые значения в полях Workspace (Рабочее пространство) и Project (Проект). Задайте mainline в качестве Default branch name (Имя ветки по умолчанию). Нажмите Create repository (Создать репозиторий), чтобы продолжить.
![Всплывающее модальное окно при создании нового репозитория в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:5d75d479-8626-4406-a68d-94b2d8fced24/select_the_workspace_and_project.png?cdnVersion=2569)
В терминале перейдите в репозиторий SubmitImage и выполните следующие команды для отправки кода AWS Lambda в Bitbucket. Включите идентификатор задачи Jira в сообщения о коммитах и имена веток, чтобы позволить интеграции Jira с Bitbucket отслеживать, что происходит в проекте.
git add --all
git commit -m "IM-6 add SubmitImage to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/submitimage.git
git branch -m mainline
git push -u origin mainline
Включение конвейеров
Перейдите в раздел Repository settings (Настройки репозитория) и нажмите Settings (Настройки), а затем — Enable Pipelines (Включить конвейеры).
![Включение конвейеров в настройках Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:aee8ea24-7d09-4e8f-9174-04290199157b/enable_pipelines.png?cdnVersion=2569)
Добавление переменных репозитория
Нажмите Repository variables (Переменные репозитория), чтобы добавить идентификатор ключа доступа AWS, секретный ключ доступа AWS и идентификатор аккаунта AWS. Предоставьте пользователю IAM, связанному с ключом доступа AWS, уровень доступа AdministratorAccess (Доступ администратора). Можно использовать более детальный контроль доступа, выбрав отдельные политики доступа AWS.
![Включение конвейеров в настройках Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:32dd3507-1291-4800-9124-03cfd62b3bec/repository_variables.png?cdnVersion=2569)
Добавление сред развертывания
Нажмите Deployments (Развертывания), а затем — add environment (Добавить среду), чтобы добавить новые среды. В этом примере используется тестовая среда us-west-1, промежуточная среда us-east-2 и три рабочие среды в us-west-2, us-east-1 и ca-central-1.
![Среды развертывания в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:bb2b3924-e65e-4c84-95c8-3dac9b620388/deployment-environments.png?cdnVersion=2569)
Создание ключей SSH
Перейдите в свой репозиторий SubmitImage в Bitbucket и нажмите Repository settings (Настройки репозитория), а затем — SSH keys (Ключи SSH), после чего выберите Generate keys (Сгенерировать ключи).
![Генерация ключей SSH в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:b7f0f877-fa93-4ca1-9751-4cb58188c540/create_SSH_keys.png?cdnVersion=2569)
Этот ключ SSH понадобится при создании репозитория SystemTests.
![Сведения о ключе SSH в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:d3cfc01c-b8a5-4afc-bcb1-a844b9334c97/SSH_key_details.png?cdnVersion=2569)
Файл bitbucket-pipelines.yml для развертывания в AWS
Перейдите в репозиторий SubmitImage в терминале и создайте ветку с именем, соответствующим идентификатору задачи Jira.
git checkout -b IM-6
Создайте файл bitbucket-pipelines.yml со следующими данными YAML. В нем задается конвейер Bitbucket для тестовой, промежуточной и производственной сред. Строку git clone для SystemTests необходимо изменить, чтобы в ней был указан ваш репозиторий для системных тестов.
definitions:
steps:
-step: &rununittests
name: run unit tests
image: golang:buster
script:
- cd submitImage
- go test ./opendevopslambda/...
-step: &deploy-test-usw1
name: Deploy Test us-west-1
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-1-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-usw1
name: Integration test usw1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-1
-step: &deploy-staging-use2
name: Deploy Staging us-east-2
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-2'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-2-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-use2
name: Integration test use2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-2
-step: &deploy-production-usw2
name: Deploy Production us-west-2
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-2-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-usw2
name: Integration test usw2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-2
-step: &deploy-production-use1
name: Deploy Production us-east-1
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-1'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-1-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-use1
name: Integration test use1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-1
-step: &deploy-production-cac1
name: Deploy Production ca-central-1
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- ls -lah /opt/atlassian/pipelines/agent/build/build/
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'ca-central-1'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
-step: &integration-test-cac1
name: Integration test cac1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=ca-central-1
pipelines:
default:
- step: *rununittests
- step:
<<: *deploy-test-usw1
deployment: Test us-west-1
# - step: *integration-test-usw1
- step:
<<: *deploy-staging-use2
deployment: Staging us-east-2
# - step: *integration-test-use2
branches:
mainline:
- step:
<<: *deploy-production-usw2
deployment: Production us-west-2
# - step: *integration-test-usw2
- step:
<<: *deploy-production-use1
deployment: Production us-east-1
# - step: *integration-test-use1
- step:
<<: *deploy-production-cac1
deployment: Production ca-central-1
# - step: *integration-test-cac1
Выполнение интеграционных тестов пока вынесено в комментарии. Системные тесты будут успешно выполняться только после развертывания всего приложения. Раскомментируйте этапы интеграционного тестирования в своем репозитории и запустите конвейер развертывания, когда все компоненты ImageLabeller будут развернуты. Строку git clone для SystemTests необходимо изменить, чтобы в ней был указан ваш репозиторий для системных тестов.
Сведения о файле bitbucket-pipelines.yml
На этом шаге выполняются модульные тесты из базы кода SubmitImage.
-step: &rununittests
name: run unit tests
image: golang:buster
script:
- cd submitImage
- go test ./opendevopslambda/...
На этом шаге SubmitImage AWS Lambda развертывается на us-west-2 с помощью AWS SAM. Документацию по этому элементу конвейера можно найти здесь.
-step: &deploy-usw2-prod
name: deploy us-west-2 prod
image: amazon/aws-sam-cli-build-image-provided
script:
- curl https://dl.google.com/go/go1.16.3.linux-amd64.tar.gz -o go1.16.3.tar.gz
- rm -rf /usr/local/go
- tar -C /usr/local -xzf go1.16.3.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
- make
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsSubmitImage'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-2-${AWS_ACCOUNT_ID}/submit-image-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'build/template.yaml'
На этом шаге клонируется репозиторий SystemTests и выполняются интеграционные тесты в us-west-2. Строку git clone для SystemTests необходимо изменить, чтобы в ней был указан ваш репозиторий для системных тестов.
-step: &integration-test-usw2
name: Integration test usw2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-2
Отправка в функциональную ветку
В командной строке выполните следующие запросы, чтобы отправить изменения в ветку IM-8 вашего репозитория SubmitImage.
git add --all
git commit -m "IM-6 add bitbucket-pipelines.yml to SubmitImage"
git push -u origin IM-6
Нажмите Pipelines (Конвейеры), а затем — IM-6, чтобы увидеть запущенный конвейер.
![Снимок экрана: конвейеры Bitbucket Cloud](https://wac-cdn.atlassian.com/dam/jcr:698f5681-788b-4fd3-a751-382139f54b58/screenshot_bbcpipelines.png?cdnVersion=2569)
Создание запроса pull
Чтобы создать запрос pull, нажмите Pull requests (Запросы pull), а затем — Create pull request (Создать запрос pull). Завершите запрос pull и нажмите Pipelines (Конвейеры), чтобы проследить за развертыванием в рабочую среду.
![Конвейер развертывания в рабочую среду в Bitbucket Cloud](https://wac-cdn.atlassian.com/dam/jcr:36623e30-a1e3-4d9f-9fde-6a1cabbabfb1/screenshot_bbcproductiondeployment.png?cdnVersion=2569)
Создание репозитория для InvokeLabeller AWS Lambda
Перейдите в Jira и создайте задачу для добавления репозитория InvokeLabeller в Bitbucket. Обратите внимание на идентификатор задачи Jira (в данном примере — IM-10).
![Снимок экрана: задачи на доске Jira](https://wac-cdn.atlassian.com/dam/jcr:5a3b19fc-1800-4e51-af5e-35fdb7bf8e03/screenshot_jiraissueinvokelabellerAWSlambda.png?cdnVersion=2569)
Перейдите в Bitbucket и нажмите Create (Создать), а затем — Repository (Репозиторий). Выберите необходимые значения в полях Workspace (Рабочее пространство) и Project (Проект). Задайте mainline в качестве Default branch name (Имя ветки по умолчанию). Нажмите Create repository (Создать репозиторий), чтобы продолжить.
![Создание репозитория InvokeLabeller в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:5927d27b-ce4f-4707-ae09-2ee3cba82433/screenshot_bbc_createrepoinvokelabeller.png?cdnVersion=2569)
В терминале перейдите в репозиторий InvokeLabeller и выполните следующие команды для отправки кода AWS Lambda в Bitbucket. Включите идентификатор задачи Jira в сообщения о коммитах и имена веток, чтобы позволить интеграции Jira с Bitbucket отслеживать, что происходит в проекте.
git add --all
git commit -m "IM-10 add InvokeLabeller to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/invokelabeller.git
git branch -m mainline
git push -u origin mainline
Включение конвейеров
Перейдите в раздел Repository settings (Настройки репозитория) и нажмите Settings (Настройки), а затем — Enable Pipelines (Включить конвейеры).
![Включение конвейеров в настройках Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:aee8ea24-7d09-4e8f-9174-04290199157b/enable_pipelines.png?cdnVersion=2569)
Добавление переменных репозитория
Нажмите Repository variables (Переменные репозитория), чтобы добавить идентификатор ключа доступа AWS, секретный ключ доступа AWS и идентификатор аккаунта AWS. Предоставьте пользователю IAM, связанному с ключом доступа AWS, уровень доступа AdministratorAccess (Доступ администратора). Контроль доступа можно настроить более тонко, выбрав отдельные политики доступа AWS, но подробности останутся на усмотрение читателя.
![Добавление переменных репозитория в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:32dd3507-1291-4800-9124-03cfd62b3bec/repository_variables.png?cdnVersion=2569)
Добавление сред развертывания
Нажмите Deployments (Развертывания), а затем — add environment (Добавить среду), чтобы добавить новые среды. В этом примере используется тестовая среда us-west-1, промежуточная среда us-east-2 и три рабочие среды в us-west-2, us-east-1 и ca-central-1.
![Среды развертывания в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:bb2b3924-e65e-4c84-95c8-3dac9b620388/deployment-environments.png?cdnVersion=2569)
Создание ключей SSH
Перейдите в свой репозиторий SubmitImage в Bitbucket и нажмите Repository settings (Настройки репозитория), а затем — SSH keys (Ключи SSH), после чего выберите Generate keys (Сгенерировать ключи).
![Сведения о ключе SSH в Bitbucket Cloud](https://wac-cdn.atlassian.com/dam/jcr:d3cfc01c-b8a5-4afc-bcb1-a844b9334c97/SSH_key_details.png?cdnVersion=2569)
Файл bitbucket-pipelines.yml для развертывания в AWS
Перейдите в репозиторий InvokeLabeller в терминале и создайте ветку с именем, соответствующим идентификатору задачи Jira.
git checkout -b IM-10
Создайте файл bitbucket-pipelines.yml со следующим кодом YAML. В нем задается конвейер Bitbucket для тестовой, промежуточной и рабочей сред. Строку git clone для SystemTests необходимо изменить, чтобы в ней был указан ваш репозиторий для системных тестов.
definitions:
steps:
-step: &rununittests
name: run unit tests
image: python:rc-buster
script:
- pip3 install pytest
- pip3 install moto
- pip3 install -r tst/requirements.txt --user
- python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
-step: &deploy-usw1-test
name: deploy us-west-1 test
image: amazon/aws-sam-cli-build-image-python3.8
script:
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-1'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-1-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-usw1
name: integration test usw1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-1
-step: &deploy-use2-staging
name: deploy us-east-2 staging
image: amazon/aws-sam-cli-build-image-python3.8
script:
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-2'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-2-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-use2
name: integration test use2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-2
-step: &deploy-usw2-prod
name: deploy us-west-2 prod
image: amazon/aws-sam-cli-build-image-python3.8
script:
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-west-2'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-west-2-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-west-2-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-usw2
name: integration test usw2
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-2
-step: &deploy-use1-prod
name: deploy us-east-1 prod
image: amazon/aws-sam-cli-build-image-python3.8
script:
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'us-east-1'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-us-east-1-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-us-east-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-use1
name: integration test use1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-east-1
-step: &deploy-cac1-prod
name: deply ca-central-1 prod
image: amazon/aws-sam-cli-build-image-python3.8
script:
- BITBUCKET_PIPE_SHARED_STORAGE_DIR="/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes"
- chmod -R o+rw $BITBUCKET_PIPE_SHARED_STORAGE_DIR
- pipe: atlassian/aws-sam-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION: 'ca-central-1'
STACK_NAME: 'OpenDevOpsImageLabeller'
CAPABILITIES: [ 'CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM', 'CAPABILITY_AUTO_EXPAND' ]
TEMPLATE: 'https://s3.amazonaws.com/open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}/image-labeller-packaged.yml'
WAIT: 'true'
DEBUG: 'true'
S3_BUCKET: 'open-devops-code-ca-central-1-${AWS_ACCOUNT_ID}'
SAM_TEMPLATE: 'template.yml'
-step: &integration-test-cac1
name: integration test cac1
image: golang:buster
script:
- git clone git@bitbucket.org:pmmquickstartguides01/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=ca-central-1
pipelines:
default:
- step: *rununittests
- step:
<<: *deploy-usw1-test
deployment: us-west-1 Test
# - step: *integration-test-usw1
- step:
<<: *deploy-use2-staging
deployment: us-east-2 Staging
# - step: *integration-test-use2
branches:
mainline:
- step:
<<: *deploy-usw2-prod
deployment: us-west-2 Prod
# - step: *integration-test-usw2
- step:
<<: *deploy-use1-prod
deployment: us-east-1 Prod
# - step: *integration-test-use1
- step:
<<: *deploy-cac1-prod
deployment: ca-central-1 Prod
# - step: *integration-test-cac1
Выполнение интеграционных тестов пока вынесено в комментарии. Системные тесты будут успешно выполняться только после развертывания всего приложения. Раскомментируйте этапы интеграционного тестирования в своем репозитории и запустите конвейер развертывания, когда все компоненты ImageLabeller будут развернуты. Строку git clone для SystemTests необходимо изменить, чтобы в ней был указан ваш репозиторий для системных тестов.
Сведения о файле bitbucket-pipelines.yml
На этом шаге выполняются модульные тесты из базы кода InvokeLabeller.
-step: &rununittests
name: run unit tests
image: golang:buster
script:
- cd submitImage
- go test ./opendevopslambda/...
Изменение конечной точки AWS SageMaker в файле src/app.py
Откройте файл src/app.py для InvokeLabeller и найдите определение query_endpoint. Измените значения endpoint_name и region_name, чтобы они соответствовали указанным в блокноте AWS SageMaker.
def query_endpoint(img):
endpoint_name = 'jumpstart-dft-image-labeller-endpoint'
client = boto3.client(service_name='runtime.sagemaker', region_name='us-west-1')
response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/x-image', Body=img)
model_predictions = json.loads(response['Body'].read())['predictions'][0]
return model_predictions
Отправка в функциональную ветку
В командной строке выполните следующие запросы, чтобы отправить изменения в ветку IM-10 вашего репозитория InvokeLabeller.
git add --all
git commit -m "IM-10 add bitbucket-pipelines.yml to InvokeLabeller"
git push -u origin IM-10
Нажмите Pipelines (Конвейеры), а затем — IM-10, чтобы увидеть запущенный конвейер.
![Просмотр запущенных конвейеров в Bitbucket Cloud](https://wac-cdn.atlassian.com/dam/jcr:1d0cdbca-3e3e-4a8e-b192-94c5b4c1352b/screenshot_bbc_seerunningpipelines.png?cdnVersion=2569)
Создание запроса pull
Чтобы создать запрос pull, нажмите Pull requests (Запросы pull), а затем — Create pull request (Создать запрос pull). Завершите запрос pull и нажмите Pipelines (Конвейеры), чтобы проследить за развертыванием в рабочую среду.
![Просмотр развертывания в рабочую среду в Bitbucket Pipelines](https://wac-cdn.atlassian.com/dam/jcr:56a3b0b5-3d6e-49f5-8c90-152e9716a523/screenshot_bbc_productiondeploymentinvokelabeller.png?cdnVersion=2569)
Создание репозитория для системных тестов
Перейдите в Jira и создайте задачу для добавления репозитория SystemTests в Bitbucket. Обратите внимание на идентификатор задачи (в данном примере — IM-7).
![Просмотр созданной задачи на доске Jira](https://wac-cdn.atlassian.com/dam/jcr:97254cac-7c9c-4d91-a62d-cafde7fe9096/screenshot_system_tests_01.png?cdnVersion=2569)
Перейдите в Bitbucket и нажмите Create (Создать), а затем — Repository (Репозиторий).
![Создание репозитория в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:99f52cd9-487e-4044-bdc1-c844161a4104/Create_repository_in_Bitbucket.png?cdnVersion=2569)
Выберите необходимые значения в полях Workspace (Рабочее пространство) и Project (Проект). Задайте mainline в качестве Default branch name (Имя ветки по умолчанию). Нажмите Create repository (Создать репозиторий), чтобы продолжить.
![Ввод информации при создании нового репозитория в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:46e691ae-a1f1-4b8d-bb48-ab94ea59ace0/screenshot_system_tests_03.png?cdnVersion=2569)
В терминале перейдите в репозиторий SystemTests и запустите следующие команды, чтобы отправить код в Bitbucket.
git add --all
git commit -m "IM-7 add SystemTests repository to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/systemtests.git
git branch -M mainline
git push -u origin mainline
Для репозитория SystemTests не требуется файл bitbucket-pipelines.yml. У него нет своего конвейера, поскольку он содержит тесты для запуска в других конвейерах. Обратите внимание на удаленный URL-адрес вашего SystemTests. Конвейеры CI/CD SubmitImage, GetImageLabel и InvokeLabeller будут клонировать репозиторий SystemTests на этапах тестирования. Файл bitbucket-pipelines.yml в последующих репозиториях нужно будет обновить, указав правильный URL-адрес.
Добавление ключей SSH из SubmitImage, GetImageLabel и InvokeLabeller
Нажмите Repository settings (Настройки репозитория), а затем — Access keys (Ключи доступа).
![Страница настройки ключей доступа в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:6d18f61a-7471-4230-b52a-0925a93e04b3/screenshot_system_tests_04.png?cdnVersion=2569)
Нажмите Add Key (Добавить ключ), вставьте ключ SSH, скопированный из SubmitImage, GetImageLabel или InvokeLabeller, затем выберите Add SSH key (Добавить ключ SSH).
![Добавление ключа SSH в Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:740afece-ec20-49ac-845d-3e1e28cbc20d/screenshot_system_tests_05.png?cdnVersion=2569)
Если вы дошли до этого шага, вас можно поздравить! Вы только что развернули ImageLabeller. Следующий шаг — настройка мониторинга ImageLabeller с помощью Opsgenie.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.
![Рисунок: DevOps](https://wac-cdn.atlassian.com/dam/jcr:bd9d8b2c-ca36-444f-8595-719cb1990e64/Devops-community.png?cdnVersion=2569)
Сообщество DevOps
![Рисунок: DevOps](https://wac-cdn.atlassian.com/dam/jcr:297108ea-d232-4368-af51-b53af230c4fe/Simulation-workshop.png?cdnVersion=2569)
Образовательные программы DevOps
![Рисунок: карта](https://wac-cdn.atlassian.com/dam/jcr:25f6330a-4191-408f-a4e5-2e24bfba67b4/Maturity-model.png?cdnVersion=2569)