Adicione o macOS aos seus pipelines de integração contínua com o AWS CodeBuild


Adicione o macOS aos seus pipelines de integração contínua com o AWS CodeBuild

A partir de hoje, você pode criar aplicativos em Mac OS com AWS CodeBuild. Agora você pode criar artefatos em gerenciados Maçã M2 máquinas que funcionam em macOS 14 Sonoma. O AWS CodeBuild é um serviço de integração contínua totalmente gerenciado que compila código-fonte, executa testes e produz pacotes de software program prontos para implantação.

Construindo, testando, assinando e distribuindo aplicativos para sistemas Apple (iOS, iPadOS, watchOS, tvOSe Mac OS) requer o uso de Xcódigoque roda exclusivamente no macOS. Quando você cria para sistemas Apple na Nuvem AWS, é bem provável que você tenha configurado seu pipeline de integração contínua e implantação contínua (CI/CD) para rodar em Instâncias do Amazon Elastic Cloud Compute (Amazon EC2) Mac.

Desde que lançamos o Amazon EC2 Mac em 2020eu passei uma quantidade significativa de tempo com nossos clientes em vários setores e regiões geográficas, ajudando-os a configurar e otimizar seus pipelines no macOS. Na forma mais simples, o pipeline de um cliente pode se parecer com o diagrama a seguir.

Pipeline de construção do iOS no EC2 Mac

O pipeline começa quando há um novo commit ou pull request no repositório de código-fonte. O agente de repositório instalado na máquina aciona vários scripts para configurar o ambiente, construir e testar o aplicativo e, eventualmente, implantá-lo em Conectar App Retailer.

O Amazon EC2 Mac simplifica drasticamente o gerenciamento e a automação de máquinas macOS. Como eu gosto de descrever, uma instância EC2 Mac tem todas as coisas que eu amo do Amazon EC2 (Loja de blocos elásticos da Amazon (Amazon EBS) volumes, snapshots, nuvens privadas virtuais (VPCs), grupos de segurança e muito mais) aplicados a Mac minis executando macOS na nuvem.

No entanto, os clientes ficam com dois desafios. O primeiro é preparar a Amazon Machine Picture (AMI) com todas as ferramentas necessárias para a construção. Um ambiente de construção mínimo requer Xcode, mas é muito comum instalar Through Rápida (e Rubi), bem como outras ferramentas e bibliotecas de construct ou desenvolvimento. A maioria das organizações requer múltiplos ambientes de construct para múltiplas combinações de versões do macOS e do Xcode.

O segundo desafio é dimensionar sua frota de builds de acordo com o número e a duração dos builds. Grandes organizações normalmente têm centenas ou milhares de builds por dia, exigindo dezenas de máquinas de construct. Escalar para dentro e para fora dessa frota ajuda a economizar custos. As instâncias do EC2 Mac são reservadas para seu uso dedicado. Uma instância é alocada para um host dedicado. Escalando uma frota de hosts dedicados requer uma configuração específica.

Para enfrentar esses desafios e simplificar a configuração e o gerenciamento de suas máquinas de compilação macOS, hoje apresentamos o CodeBuild para macOS.

O CodeBuild para macOS é baseado no recentemente introduzido frota de capacidade reservadaque contém instâncias alimentadas pelo Amazon EC2 que são mantidas pelo CodeBuild. Com frotas de capacidade reservada, você configura um conjunto de instâncias dedicadas para seu ambiente de construct. Essas máquinas permanecem ociosas, prontas para processar builds ou testes imediatamente, o que reduz a duração dos builds. Com frotas de capacidade reservada, suas máquinas estão sempre em execução e continuarão a incorrer em custos enquanto forem provisionadas.

O CodeBuild fornece uma imagem de disco padrão (AMI) para executar suas compilações. Ele contém versões pré-instaladas do Xcode, Fastlane, Ruby, Python, Node.js e outras ferramentas populares para um ambiente de desenvolvimento e compilação. O completo lista de ferramentas instaladas está disponível na documentação. Com o tempo, forneceremos imagens de disco adicionais com versões atualizadas dessas ferramentas. Você também pode trazer sua própria imagem de disco personalizada, se desejar.

Além disso, o CodeBuild facilita a configuração do dimensionamento automático. Você nos diz quanta capacidade deseja, e nós gerenciamos tudo a partir daí.

Vamos ver o CodeBuild para macOS em ação
Para mostrar como funciona, criei um pipeline de CI/CD para meu projeto de estimação: começando com AWS Amplificar no iOS. Este tutorial e seu código-fonte acompanhante explicam como criar um aplicativo iOS simples com um backend baseado em nuvem. O aplicativo usa uma API GraphQL (Sincronização de aplicativo da AWS), um banco de dados NoSQL (Amazon DynamoDB), um armazenamento baseado em arquivo (Serviço de armazenamento simples da Amazon (Amazon S3)) e autenticação do usuário (Amazon Cognito). AWS Amplify para Swift é a peça que une todos esses serviços.

O o tutorial e o código fonte do aplicativo estão disponíveis em um repositório Git. Inclui scripts para automatizar a construção, teste e implantação do aplicativo.

Configurar um novo pipeline de CI/CD com o CodeBuild para macOS envolve as seguintes etapas de alto nível:

  1. Crie o projeto de construção.
  2. Crie uma frota dedicada de máquinas.
  3. Configure um ou mais gatilhos de compilação.
  4. Adicione um arquivo de definição de pipeline (buildspec.yaml) para o projeto.

Para começar, abro o Console de gerenciamento da AWSselecione CodeBuild e selecione Criar projeto.

código de construção mac - 1

Eu entro em um Nome do projeto e configurar a conexão com o Fonte repositório de código. Eu uso o GitHub neste exemplo. O CodeBuild também suporta GitLab e BitBucket. A documentação tem uma lista atualizada de repositórios de código-fonte suportados.

código de construção mac - 2

Para o Modelo de provisionamentoeu seleciono Capacidade reservada. Este é o único modelo em que instâncias do Amazon EC2 Mac estão disponíveis. Ainda não tenho uma frota definida, então decido criar uma na hora enquanto crio o projeto de construct. Eu seleciono Criar frota.

código de construção mac - 3

No Calcular configuração de frota página, eu entro em uma Calcular nome da frota e selecione Mac OS como Sistema operacional. Sob Calcularseleciono a quantidade de memória e a quantidade de vCPUs necessárias para meu projeto de construção e o número de instâncias que desejo em Capacidade.

Para este exemplo, estou feliz em usar o Imagem gerenciada. Inclui o Xcode 15.4 e o tempo de execução do simulador para iOS 17.5, entre outros pacotes. Você pode ler a lista de pacotes pré-instalados nesta imagem na documentação.

Quando terminar, eu seleciono Criar frota para retornar à página de criação do projeto CodeBuild.

CodeBuild - criar frota

Como próximo passo, digo ao CodeBuild para criar uma nova função de serviço para definir as permissões que desejo para meu ambiente de construção. No contexto deste projeto, devo incluir permissões para extrair uma configuração do Amplify e acessar Gerenciador de segredos da AWS. Não estou compartilhando instruções passo a passo para fazer isso, mas o código do projeto de exemplo contém a lista das permissões que adicionei.

código de construção mac - 4

Posso escolher entre fornecer meu conjunto de comandos de construção na definição do projeto ou em um buildspec.yaml arquivo incluído no meu projeto. Eu seleciono o último.

código de construção mac - 5

Isso é opcional, mas eu quero carregar o artefato de construção para um bucket S3 onde eu possa arquivar cada construção. No Artefato 1 – Primário seção, portanto, seleciono Amazon S3 como Tipoe eu entro em um Nome do balde e artefato Nome. O nome do arquivo a ser carregado é especificado em buildspec.yaml arquivo.

código de construção mac - 6

Na página abaixo, configuro o gatilho do projeto para adicionar um GitHub WebHook. Isso configurará o CodeBuild para iniciar a compilação toda vez que um commit ou pull request for enviado ao meu projeto no GitHub.

codebuild - webhook

Por fim, seleciono a laranja Criar projeto botão na parte inferior da página para criar este projeto.

Testando minhas compilações
Meu projeto já inclui scripts de construção para preparar a construção, construir o projeto, executar os testes e implantá-lo em TestFlight da Apple.

codebuild - scripts de projeto

Eu adiciono um buildspec.yaml arquivo na raiz do meu projeto para orquestrar esses scripts existentes.

model: 0.2

phases:

  set up:
    instructions:
      - code/ci_actions/00_install_rosetta.sh
  pre_build:
    instructions:
      - code/ci_actions/01_keychain.sh
      - code/ci_actions/02_amplify.sh
  construct:
    instructions:
      - code/ci_actions/03_build.sh
      - code/ci_actions/04_local_tests.sh
  post_build:
    instructions:
      - code/ci_actions/06_deploy_testflight.sh
      - code/ci_actions/07_cleanup.sh
artifacts:
   identify: $(date +%Y-%m-%d)-getting-started.ipa
   information:
    - 'getting began.ipa'
  base-directory: 'code/build-release'

Eu adiciono esse arquivo ao meu repositório Git e o envio para o GitHub com o seguinte comando: git commit -am "add buildpsec" buildpec.yaml

No console, posso observar que a compilação foi iniciada.

codebuild - histórico de construção

Quando seleciono a compilação, posso ver os arquivos de log ou selecionar Detalhes da fase para receber um standing de alto nível de cada fase da construção.

codebuild - detalhes da fase

Quando a compilação é bem-sucedida, posso ver o arquivo IPA do aplicativo iOS carregado no meu bucket S3.

aws s3 ls

O último script de construct que o CodeBuild executa carrega o binário para o App Retailer Join. Posso observar novos builds na seção TestFlight do App Retailer Join.

Conectar App Store

Coisas a saber
Leva 8 a ten minutos para preparar uma instância do Amazon EC2 Mac e aceitar a primeira compilação. Isso não é específico do CodeBuild. As compilações que você envia durante o tempo de preparação da máquina são enfileiradas e serão executadas em ordem assim que a máquina estiver disponível.

O CodeBuild para macOS funciona com frotas reservadas. Ao contrário das frotas sob demanda, onde você paga por minuto de construção, as frotas reservadas são cobradas pelo tempo em que as máquinas de construção são reservadas para seu uso exclusivo, mesmo quando nenhuma construção está em execução. A reserva de capacidade segue o período mínimo de alocação de 24 horas do Amazon EC2 Mac, conforme exigido pelo Contrato de licença de software program para macOS (artigo 3.A.ii).

Uma frota de máquinas pode ser compartilhada entre projetos do CodeBuild na sua conta da AWS. As máquinas na frota são reservadas para seu uso exclusivo. Somente o CodeBuild pode acessar as máquinas.

O CodeBuild limpa o diretório de trabalho entre as compilações, mas as máquinas são reutilizadas para outras compilações. Ele permite que você use o Mecanismo de cache native do CodeBuild para restaurar rapidamente os arquivos selecionados após uma construção. Se você construir projetos diferentes na mesma frota, certifique-se de redefinir qualquer estado world, como o chaveiro macOSe construir artefatos, como os caches de pacotes SwiftPM e Xcodeantes de iniciar uma nova construção.

Ao trabalhar com imagens de compilação personalizadas, certifique-se de que elas sejam criadas para uma arquitetura Mac-Arm de 64 bits. Você também deve instalar e iniciar o Agente do AWS Methods Supervisor (Agente SSM). O CodeBuild usa o Agente SSM para instalar seu próprio agente e gerenciar a máquina. Finalmente, certifique-se de que a AMI esteja disponível para a organização CodeBuild ARN.

O CodeBuild para macOS está disponível nos seguintes Regiões da AWS: Leste dos EUA (Ohio, N. Virginia), Oeste dos EUA (Oregon), Ásia-Pacífico (Sydney) e Europa (Frankfurt). Essas são as mesmas regiões que oferecem instâncias do Amazon EC2 Mac M2.

Comece hoje mesmo e crie seu primeiro projeto CodeBuild no macOS.

— seb



Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *