Por que utilizar ?
- Com os benefícios que a utilização que o CI/CD nos trazem nos permite automatizar processos que consumiriam tempo de um profissional para realizá-los, assim tendo maior foco nos requisitos do projeto, qualidade e segurança do código.
Introdução as tecnologias
Fastlane
- Fastlane é uma ferramenta para automatizar processo de desenvolvimento e lançamento dos apps.
Github Actions
- Github Actions é uma ferramenta para executar seus processos de desenvolvimento, sendo totalmente personalizável.
React Native
- É um framework baseado no React, é utilizado para construções de aplicativos híbridos (iOS/Android).
Pré-requisitos
- Fastlane CLI
- XCODE (apenas se quiser fazer para iOS)
- Seus aplicativos PRECISAM estar assinados para darmos o deploy.
Entendendo a estrutura.
- Crie a pasta
fastlane
na raiz do seu projeto.
O arquivo
Fastfile
é o responsável pelas execuções do CI/CD.-
O arquivo
Appfile
contém as informações do seu aplicativo iOS. -
O arquivo
Matchfile
contém as informações para executar a funçãomatch
. O arquivo
Pluginfile
é o arquivo que contém os plugins que você deseja utilizar.
Construção do Fastfile
Entendendo os funções
- Usaremos uma lista de funções fornecidas pelo próprio Fastlane, vamos explicar cada uma delas.
before_all
- Essa função executará antes de todas as
lanes
que teremos.
before_all do
# Insira seu código.
end
is_ci
- Essa função verifica se quem está rodando é um usuário ou uma máquina (Github Actions, Travis, Jenkins)
if is_ci
puts "I'm a computer"
else
say "Hi Human!"
end
create_keychain
- Essa função é necessária para criar uma keychain, para guardarmos as informações dos certificados temporariamente.
create_keychain(
name: ENV["CI_KEYCHAIN_NAME"],
password: ENV["CI_KEYCHAIN_PASSWORD"],
default_keychain: is_ci,
unlock: true,
timeout: 3600,
lock_when_sleeps: false
)
match
- Permite você sincronizar seus certificados e perfil com seu time. Nesse exemplo criei um repositório privado para guardar os certificados.
match(
git_basic_authorization: Base64.strict_encode64(GIT_ACCESS),
git_url: GIT_URL,
app_identifier: APP_IDENTIFIER",
type: "development",
keychain_name: keychain_name,
keychain_password: keychain_password,
readonly: true
)
Obs: se vc tiver vários perfis de aplicação DEBUG
, STAGING
, PROD
..., é necessário fazer o match para cada uma de acordo com seu type:adhoc, development, appstore
.
testflight
- Função para lançar seu app para o Apple Testflight.
testflight(
skip_submission: true,
skip_waiting_for_build_processing: true
)
gym
- Realiza o Build do seu applicativo assinado
ipa
ouapp
file.
gym(
scheme: PROJECT_NAME,
export_method: "app-store",
workspace: XCODE_WORKSPACE,
silent: true,
include_bitcode: true
)
gradle
- Realiza as ações do
gradle
.
gradle(
project_dir: "android/",
task: "assemble",
flavor: "Production",
build_type: "Release"
)
upload_to_play_store
-
Esse aqui é meio díficil de explicar.Realiza o upload da sua aplicação para a Play Store.
upload_to_play_store(track: 'production', json_key: 'path...')
GitHub Access Token
- Será preciso gerar um Personal Token da sua conta do
github
com o intuito de conseguirmos acessar o projeto dos certificados noGitHub Actions
, para isso acesse o seu GitHub > Developer settings > Personal access tokens > Generate new token > Dê um nome > Marque a opçãoREPO
> Salve o token > Copie-o.
- Agora iremos adicionar o seu
Personal Token
nosSECRETS
do seu projeto doGitHub
.
Finalmente o Fastfile...
- Seu Fastfile ficará parecido com esse abaixo, porém com suas varíaveis e podendo haver mudanças de acordo com a sua necessidade.
Workflows do Github Actions
- Cria uma pasta na raiz do seu projeto com o nome
.github
e dentro dela crie uma pastaworkflows
é lá que iremos colocar nossos workflows (jura ??????)
- Agora iremos fazer nossos workflows do Github Actions, no total tenho 5 workflows.
- Lembrando que
MATCH_PASSWORD
é a senha dos repositório do certificado eFASTLANE_PASSWORD
é a senha de acesso para a Apple.
Executa testes e Linter no projeto
Android QA
Android Produção
iOS QA
iOS Produção
Espero que essa publicação consiga te ajudar!
Top comments (0)