Implemente o ImageLabeller com o GitHub
Warren Marusiak
Evangelista tecnológico sênior
Para demonstrar como desenvolver, implementar e gerenciar aplicativos usando o Jira Software e várias ferramentas conectadas, nossa equipe criou o ImageLabeller, um aplicativo de demonstração simples gerado na AWS que usa aprendizado de máquina para aplicar etiquetas às imagens.
Esta página aborda como implementar o ImageLabeller com o GitHub. Antes de começar, recomendamos a leitura das páginas da arquitetura do ImageLabeller e da configuração do AWS SageMaker para contextualizar.
Pré-requisitos
Se você ainda não tem uma organização no GitHub, siga as etapas deste guia do GitHub para criar uma do zero.
Repositórios do GitHub voltados para o público com código ImageLabeller
Vídeo de demonstração da integração com o Jira GitHub
Integre o Jira e o GitHub
No Jira, clique em Quadro, depois em Aplicativos e depois em GitHub.
Clique em Obter agora.
Clique em Aplicativos, depois em Gerenciar aplicativos e expanda o GitHub.
Clique em Começar.
Clique em Começar.
Instale o plugin Jira no GitHub
Clique em Instalar o Jira para instalar o plug-in do Jira no GitHub. Essa etapa é necessária se o plug-in do Jira ainda não estiver instalado no GitHub.
O Jira vai começar a sincronizar dados do GitHub.
Quando a sincronização é concluída, o Status da sincronização muda para CONCLUÍDO.
Configurar o acesso SSH
Configure as chaves SSH do GitHub para sua conta seguindo as instruções aqui. Material de referência adicional está presente aqui.
Configurar um token de acesso pessoal
Configure um token de acesso pessoal seguindo este guia. O PAT é usado para clonar o repositório SystemTest durante as etapas de teste de integração. Dê acesso ao repositório PAT e ao fluxo de trabalho.
Crie um repositório para a infraestrutura do AWS S3
Um ciclo de desenvolvimento padrão, em geral, faz com que um desenvolvedor pegue uma tarefa do Jira, a mova para o trabalho em andamento e, em seguida, faça o trabalho de desenvolvimento. O ID do item do Jira é a chave que vincula o trabalho de desenvolvimento ao item do Jira. É o principal componente de integração entre os dois sistemas.
Acesse o Jira e crie um item novo para adicionar um repositório de infraestrutura do AWS S3 ao GitHub. Anote o ID do item. GI-9 neste exemplo.
Acesse o GitHub e clique em Novo. Escolha a organização apropriada para o proprietário. Clique em Criar repositório para continuar.
Adicionar variáveis de repositório de chaves de acesso da AWS
Clique em Configurações e depois em Segredos. Clique em Novo segredo do repositório e adicione o ID da chave de acesso da AWS e a chave de acesso secreta da AWS. Dê ao usuário do IAM associado à chave de acesso da AWS AdministratorAccess. Você pode optar por usar um controle de acesso mais refinado escolhendo políticas de acesso individuais da AWS, mas as informações são deixadas para o leitor.
No seu terminal, acesse seu repositório s3_infra e execute o seguinte para enviar para o GitHub.
git add --all
git commit -m "IM-9 add s3_infra repository to github"
git remote add origin git@github.com:PmmQuickStartGuides01/s3_infra.git
git branch -m mainline
git push -u origin mainline
Ações do GitHub para implementação na AWS
Acesse seu repositório s3_infra em seu terminal, crie uma ramificação com o nome do seu ID de item do Jira e crie um diretório .github/workflows .
git checkout -b IM-9
mkdir -p .github/workflows && cd .github/workflows
Crie deploy-test-staging.yml com o seguinte yaml no novo diretório .github/workflows . Isso define um fluxo de trabalho de implementação para seus ambientes de teste e staging que é executado durante envios para filiais que não sejam a linha principal.
name: deploy-s3-infra-test-staging
on:
push:
branches:
- '*'
- '!mainline'
jobs:
deploy-us-west-1:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
deploy-us-east-2:
runs-on: ubuntu-latest
needs: deploy-us-west-1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-2"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
Em seguida, crie o deploy-prod.yml com o yaml abaixo. Ele define o fluxo de trabalho da implementação nos ambientes de produção que é executado quando uma solicitação pull mescla as alterações na linha principal.
name: deploy-s3-infra-prod
on:
pull_request:
branches:
- mainline
jobs:
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
deploy-ca-central-1:
runs-on: ubuntu-latest
needs: deploy-us-west-2
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "ca-central-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-ca-central-1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
Entendendo as ações do GitHub
Acionadores
Declare eventos que acionam o fluxo de trabalho na parte superior desses arquivos. Em deploy-test-staging.yml, o evento é enviado para todas as ramificações, exceto a linha principal.
name: deploy-s3-infra-test-staging
on:
push:
branches:
- '*'
- '!mainline'
Muitos eventos podem acionar fluxos de trabalho. Consulte a documentação aqui para obter mais informações.
Tarefas
Um fluxo de trabalho contém muitos trabalhos que são executados quando o evento acionador ocorre. Cada trabalho tem um conjunto de etapas que são realizadas quando o trabalho é executado. Neste exemplo, há uma etapa para verificar o código do repositório, uma etapa para configurar as credenciais da AWS e uma etapa para implementar na AWS usando o AWS CloudFormation.
jobs:
deploy-us-west-1:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
Impondo a ordem com as necessidades
Você pode especificar um pedido para seus trabalhos usando as necessidades. Por padrão, o GitHub executa todas as etapas em paralelo. Use as necessidades para fazer uma etapa depender da outra.
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-ca-central-1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
Enviando para uma ramificação de recursos
Na linha de comando, execute o seguinte para enviar seu código para a ramificação GI-9 do seu repositório s3_infra.
git add --all
git commit -m "IM-9 add GitHub actions to s3_infra"
git push -u origin IM-9
Clique em Ações para ver os fluxos de trabalho em execução.
Como criar uma solicitação pull
Clique em Solicitações pull e depois em Criar solicitações pull.
Escolha sua ramificação de recursos como ramificação de origem e clique em Criar solicitação pull.
Analise as alterações no código e clique em Mesclar solicitação pull para aceitar as alterações.
Clique em Ações para ver se a implementação da Produção foi iniciada. O GitHub executa os trabalhos em deploy-prod.yml porque a ramificação é a linha principal.
Crie um repositório para o SubmitImage AWS Lambda
Acesse o Jira e crie um item do Jira para adicionar um repositório SubmitImage AWS Lambda ao GitHub. Anote o ID do item do Jira. GI-8 neste exemplo.
Acesse o GitHub e clique em Novo. Escolha a organização apropriada para o proprietário. Clique em Criar repositório para continuar.
Clique em Configurações e depois em Segredos. Adicione seu token de acesso pessoal como ACCESS_KEY, seu ID de chave de acesso da AWS como AWS_ACCESS_KEY_ID, sua chave de acesso secreta da AWS como AWS_SECRET_ACCESS_KEY e seu ID de conta da AWS como AWS_ACCOUNT_ID.
No seu terminal, acesse seu repositório SubmitImage e execute o seguinte para enviar seu código para o GitHub.
git add --all
git commit -m "IM-8 add SubmitImage to github"
git remote add origin git@github.com:PmmQuickStartGuides01/submitImage.git
git branch -m mainline
git push -u origin mainline
Ações do GitHub para implementação na AWS
Acesse seu repositório SubmitImage em seu terminal, crie uma ramificação com o nome do seu ID de item do Jira e crie um diretório .github/workflows .
git checkout -b IM-8
mkdir -p .github/workflows && cd .github/workflows
Crie deploy-test-staging.yml com o seguinte yaml no novo diretório .github/workflows . Isso define um fluxo de trabalho de implementação para seus ambientes de teste e staging que é executado durante envios para filiais que não sejam a linha principal. Você deve atualizar a linha de clone do git para que SystemTests seja seu repositório SystemTests.
name: deploy-submit-image-test-staging
on:
push:
branches:
- '*'
- '!mainline'
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
run-unit-tests:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Checkout code
uses: actions/checkout@v2
- name: Test
run: |
cd ${{ github.workspace }}/submitImage
ls
go test ./opendevopslambda...
deploy-us-west-1:
runs-on: ubuntu-latest
needs: run-unit-tests
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-1:
# runs-on: ubuntu-latest
# needs: deploy-us-west-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-west-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-1
deploy-us-east-2:
runs-on: ubuntu-latest
needs: deploy-us-west-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-2:
# runs-on: ubuntu-latest
# needs: deploy-us-east-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-east-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-2
Em seguida, crie o deploy-prod.yml com o yaml abaixo. Ele define o fluxo de trabalho da implementação nos ambientes de produção que é executado quando uma solicitação pull mescla as alterações na linha principal.
name: deploy-submit-image-prod
on:
pull_request:
branches:
- mainline
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-2:
# runs-on: ubuntu-latest
# needs: deploy-us-west-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-west-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-2
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-us-west-2
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-1:
# runs-on: ubuntu-latest
# needs: deploy-us-east-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-east-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-1
deploy-ca-central-1:
runs-on: ubuntu-latest
needs: deploy-us-east-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "ca-central-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-ca-central-1:
# runs-on: ubuntu-latest
# needs: deploy-ca-central-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "ca-central-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=ca-central-1
A execução dos testes de integração está comentada por enquanto. Os testes do sistema só vão ser aprovados quando todo o aplicativo for implementado. Remova os comentários das etapas do teste de integração em seu repositório e faça outra tentativa para executar o Pipeline de implementação depois que todos os componentes do ImageLabeller forem implementados. Atualize a seção de necessidades para executar as etapas em ordem. Você deve atualizar a linha de clone do git para que SystemTests seja seu repositório SystemTests.
needs: deploy-us-east-1
Entendendo as ações do GitHub
Essa tarefa usa o AWS SAM para implementar seu SubmitImage AWS Lambda no us-west-2.
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
Essa tarefa clona o repositório SystemTests e executa testes de integração no us-west-2.
integration-test-us-west-2:
runs-on: ubuntu-latest
needs: deploy-us-west-2
steps:
- name: Pull systemTests repo
uses: actions/checkout@master
with:
repository: PmmQuickStartGuides01/systemTests
token: ${{ secrets.ACCESS_KEY }}
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Run integration tests
run: go test -v ./... -aws_region=us-west-2
Essa etapa usa o Token de Acesso Pessoal para clonar o repositório SystemTests.
- name: Pull systemTests repo
uses: actions/checkout@master
with:
repository: PmmQuickStartGuides01/systemTests
token: ${{ secrets.ACCESS_KEY }}
Enviando para uma ramificação de recursos
Execute o seguinte na linha de comando para enviar suas alterações para a ramificação GI-8 do seu repositório SubmitImage. Inclua o ID do item do Jira nas mensagens de commit e nos nomes das ramificações para permitir a integração com o Jira GitHub e acompanhar o que está acontecendo em seu projeto.
git add --all
git commit -m "IM-8 add github actions to SubmitImage"
git push -u origin IM-8
Clique em Ações para ver os fluxos de trabalho em execução.
Observe que o trabalho de teste de unidade foi aprovado e a implementação no Teste us-west-1 foi iniciada.
Os testes de sistema definidos em uma etapa anterior são executados como parte das tarefas integration-test-us-west-1 e integration-test-us-east-2.
Criar uma solicitação pull
Para criar uma solicitação pull, clique em Solicitações pull e depois em Nova solicitação pull.
Escolha mesclar a partir de sua ramificação de recursos.
Clique em Criar solicitação pull.
Mescle o solicitação pull e exclua a ramificação do recurso. Clique em Ações para monitorar a implementação da Produção.
Crie um repositório para InvokeLabeller AWS Lambda
Acesse o Jira e crie um item do Jira para adicionar um repositório InvokeLabeller AWS Lambda ao GitHub. Anote o ID do item do Jira. GI-11 neste exemplo.
Acesse o GitHub e clique em Novo. Escolha a organização apropriada para o proprietário. Clique em Criar repositório para continuar.
Clique em Configurações e depois em Segredos. Adicione seu token de acesso pessoal como ACCESS_KEY, seu ID de chave de acesso da AWS como AWS_ACCESS_KEY_ID, sua chave de acesso secreta da AWS como AWS_SECRET_ACCESS_KEY e seu ID de conta da AWS como AWS_ACCOUNT_ID.
No seu terminal, acesse seu repositório InvokeLabeller e execute o seguinte para enviar seu código para o GitHub.
git add --all
git commit -m "IM-11 add InvokeLabeller to github"
git remote add origin git@github.com:PmmQuickStartGuides01/InvokeLabeller.git
git branch -m mainline
git push -u origin mainline
Ações do GitHub para implementação na AWS
Acesse seu repositório InvokeLabeller em seu terminal, crie uma ramificação com o nome do seu ID de item do Jira e crie um diretório .github/workflows .
git checkout -b IM-11
mkdir -p .github/workflows && cd .github/workflows
Crie deploy-test-staging.yml com o seguinte yaml no novo diretório .github/workflows . Isso define um fluxo de trabalho de implementação para seus ambientes de teste e staging que é executado durante envios para filiais que não sejam a linha principal. Você deve atualizar a linha de clone do git para que SystemTests seja seu repositório SystemTests.
name: deploy-invoke-labeller-test-staging
on:
push:
branches:
- '*'
- '!mainline'
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
run-unit-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Test
run: |
pip3 install pytest
pip3 install moto
pip3 install -r tst/requirements.txt --user
python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
deploy-us-west-1:
runs-on: ubuntu-latest
needs: run-unit-tests
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-1:
# runs-on: ubuntu-latest
# needs: deploy-us-west-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-west-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-1
deploy-us-east-2:
runs-on: ubuntu-latest
needs: deploy-us-west-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-2:
# runs-on: ubuntu-latest
# needs: deploy-us-east-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-east-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-2
Em seguida, crie o deploy-prod.yml com o yaml abaixo. Ele define o fluxo de trabalho da implementação nos ambientes de produção que é executado quando uma solicitação pull mescla as alterações na linha principal.
name: deploy-invoke-labeller-prod
on:
pull_request:
branches:
- mainline
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-west-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-2:
# runs-on: ubuntu-latest
# needs: deploy-us-west-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-west-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-2
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-us-west-2
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "us-east-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-1:
# runs-on: ubuntu-latest
# needs: deploy-us-east-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "us-east-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-1
deploy-ca-central-1:
runs-on: ubuntu-latest
needs: deploy-us-east-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: "ca-central-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-ca-central-1:
# runs-on: ubuntu-latest
# needs: deploy-ca-central-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# uses: aws-actions/configure-aws-credentials@v1
# with:
# aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
# aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# aws-region: "ca-central-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=ca-central-1
A execução dos testes de integração está comentada por enquanto. Os testes do sistema só vão ser aprovados quando todo o aplicativo for implementado. Remova os comentários das etapas do teste de integração em seu repositório e faça outra tentativa para executar o Pipeline de implementação depois que todos os componentes do ImageLabeller forem implementados. Atualize a seção de necessidades para executar as etapas em ordem. Você deve atualizar a linha de clone do git para que SystemTests seja seu repositório SystemTests.
needs: deploy-us-east-1
Atualize o src/app.py com o endpoint do AWS SageMaker
Abra o arquivo src/app.py do InvokeLabeller e procure por query_endpoint. Altere o endpoint_name e o region_name do cliente para que correspondam ao seu notebook 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
Enviando para uma ramificação de recursos
Execute o seguinte na linha de comando para enviar suas alterações para a ramificação GI-11 do seu repositório InvokeLabeller. Inclua o ID do item do Jira nas mensagens de commit e nos nomes das ramificações para permitir a integração com o Jira GitHub e acompanhar o que está acontecendo em seu projeto.
git add --all
git commit -m "IM-11 add github actions to InvokeLabeller"
git push -u origin IM-11
Clique em Ações para ver os fluxos de trabalho em execução. Os testes de sistema definidos em uma etapa anterior são executados como parte das tarefas integration-test-us-west-1 e integration-test-us-east-2.
Criar uma solicitação pull
Para criar uma solicitação pull, clique em Solicitações pull e depois em Nova solicitação pull. Escolha mesclar a partir de sua ramificação de recursos.
Clique em Ações para monitorar a implementação da Produção.
Crie um repositório para SystemTests
Acesse o Jira e crie um item do Jira para adicionar um repositório SystemTests ao GitHub. Anote o ID do item do Jira. Neste exemplo, é GI-7.
Acesse o GitHub e clique em Novo. Escolha a organização apropriada para o proprietário. Clique em Criar repositório para continuar.
No seu terminal, acesse seu repositório SystemTests e execute o seguinte para enviar seu código para o GitHub.
git add --all
git commit -m "IM-7 add SystemTests repository to GitHub"
git remote add origin git@github.com:PmmQuickStartGuides01/systemTests.git
git branch -M mainline
git push -u origin mainline
O repositório SystemTests não precisa de ações do GitHub. Ele não tem um pipeline próprio, pois oferece testes para a execução de outros pipelines. As etapas de teste de integração dos arquivos de fluxo de trabalho de IC/CD (integração/implementação contínuas) podem ter comentários removidos, podem fazer commit e ser enviadas depois que todos os componentes do aplicativo ImageLabeller forem implementados. Os testes só vão ser aprovados mediante o funcionamento correto de todos os componentes do aplicativo.
Anote o URL remoto do seu SystemTests. Os pipelines de IC/CD SubmitImage, GetImageLabel e InvokeLabeller vão clonar o repositório SystemTests durante as etapas de teste. Você vai precisar atualizar o gitlab-ci.yml de repositórios posteriores com o URL correto.
Se você chegou até aqui, parabéns! Você acabou de implementar o ImageLabeller. A próxima etapa é configurar o monitoramento do ImageLabeller com o Opsgenie.
Compartilhe este artigo
Próximo tópico
Leitura recomendada
Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.