Bitrise é uma plataforma em nuvem que proporciona o serviço de Integração contínua e Entrega contínua, com ênfase em desenvolvimento mobile (iOS, Android, Xamarin, React Native, etc).
Principais características
- Interface simples e intuitiva;
- Plano free para desenvolvedores de projetos Open Source (Developer Plan).
- Utilização de Step’s criados pela comunidade;
- Documentação objetiva;
- Integração com ferramentas de qualidade de código (SonarQube, Detekt, Lint, etc);
Workflow:
Um workflow é definido pelo conjunto de Steps que serão executados em ordem Top-Down. Ao criar um Workflow o arquivo bitrise.yml é gerado e nele irá conter todas as informações que serão executadas pela build. Após a execução de uma build, serão gerados os logs contendo os resultados. É possível alterar as configurações editando o arquivo bitrise.yml ou utilizando a interface de edição (Workflow Editor UI).
Exemplo de Workflow gerado pelo Bitrise (no primeiro build):
— | |
format_version: '6' | |
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git | |
project_type: android | |
trigger_map: | |
– push_branch: "*" | |
workflow: primary | |
– pull_request_source_branch: "*" | |
workflow: primary | |
workflows: | |
deploy: | |
description: | | |
## To run this workflow | |
If you want to run this workflow manually: | |
1. Open the app's build list page | |
2. Click on **[Start/Schedule a Build]** button | |
3. Select **deploy** in **Workflow** dropdown input | |
4. Click **[Start Build]** button | |
Or if you need this workflow to be started by a GIT event: | |
1. Click on **Triggers** tab | |
2. Setup your desired event (push/tag/pull) and select **deploy** workflow | |
3. Click on **[Done]** and then **[Save]** buttons | |
The next change in your repository that matches any of your trigger map event will start **deploy** workflow. | |
steps: | |
– activate-ssh-key@4.0.3: | |
run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}' | |
– git-clone@4.0.11: {} | |
– cache-pull@2.0.1: {} | |
– script@1.1.5: | |
title: Do anything with Script step | |
– install-missing-android-tools@2.2.0: | |
inputs: | |
– gradlew_path: "$PROJECT_LOCATION/gradlew" | |
– change-android-versioncode-and-versionname@1.1.1: | |
inputs: | |
– build_gradle_path: "$PROJECT_LOCATION/$MODULE/build.gradle" | |
– android-lint@0.9.4: | |
inputs: | |
– project_location: "$PROJECT_LOCATION" | |
– module: "$MODULE" | |
– variant: "$TEST_VARIANT" | |
– android-unit-test@0.9.3: | |
inputs: | |
– project_location: "$PROJECT_LOCATION" | |
– module: "$MODULE" | |
– variant: "$TEST_VARIANT" | |
– android-build@0.9.5: | |
inputs: | |
– project_location: "$PROJECT_LOCATION" | |
– module: "$MODULE" | |
– variant: "$BUILD_VARIANT" | |
– sign-apk@1.2.3: | |
run_if: '{{getenv "BITRISEIO_ANDROID_KEYSTORE_URL" | ne ""}}' | |
– deploy-to-bitrise-io@1.3.15: {} | |
– cache-push@2.0.5: {} | |
primary: | |
steps: | |
– activate-ssh-key@4.0.3: | |
run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}' | |
– git-clone@4.0.11: {} | |
– cache-pull@2.0.1: {} | |
– script@1.1.5: | |
title: Do anything with Script step | |
– install-missing-android-tools@2.2.0: | |
inputs: | |
– gradlew_path: "$PROJECT_LOCATION/gradlew" | |
– android-lint@0.9.4: | |
inputs: | |
– project_location: "$PROJECT_LOCATION" | |
– module: "$MODULE" | |
– variant: "$TEST_VARIANT" | |
– android-unit-test@0.9.3: | |
inputs: | |
– project_location: "$PROJECT_LOCATION" | |
– module: "$MODULE" | |
– variant: "$TEST_VARIANT" | |
– deploy-to-bitrise-io@1.3.15: {} | |
– cache-push@2.0.5: {} | |
app: | |
envs: | |
– opts: | |
is_expand: false | |
PROJECT_LOCATION: "." | |
– opts: | |
is_expand: false | |
MODULE: app | |
– opts: | |
is_expand: false | |
BUILD_VARIANT: Debug | |
– opts: | |
is_expand: false | |
TEST_VARIANT: Debug |
Step:
São representados por blocos de código que serão executados de acordo com uma order pré definida em determinado workflow. Eles são desenvolvidos pela comunidade e podem ser escrito em várias linguagem como: bash, Go, Ruby, Swift, etc. Vale lembrar que qualquer pessoa poderá criar um Step e divulgar na comunidade.
Trigger:
São os gatilhos disparados a partir de uma chamada do Webhook do projeto, essas chamadas podem ser de: push, pull request e tag.
Eles são compostos por:
- Type (Push, Pull Request e Tag);
- Source Branch;
- Target Branch;
- Workflow.
Build:
São processos definidos pelos Workflows, que são construído através do encadeamento de Steps e executados por um Trigger.
Após a build ser finalizada, podemos configurar um step para disponibilizar e/ou armazenar os artefatos gerados.
Configurando o projeto
1. Devemos adicionar um novo app no dashboard do Bitrise. Para isso é necessário acessar o link https://app.bitrise.io/apps/add

2. Definir qual conta será vinculada e o nível de privacidade do projeto;

3. Definir em qual plataforma está armazenado o repositório;

4. Definir a branch principal do projeto;

5. Neste passo o Bitrise irá validar seu projeto e a branch escolhida;

6. Após a validação, devemos definir qual será o root path do projeto, seu módulo e a variant de build;

7. Por fim, podemos adicionar um Webhook ao projeto.
Um Webhook provê mecanismos para os servidores notificarem os clients sobre mudanças nos dados, nele é aplicado o paradigma reativo. No caso do Bitrise, iremos utilizar um Webhook que ficará responsável por observar as mudanças em uma determinada branch e a partir de uma mudança ele irá disparar o Trigger, dando início ao processo de Build.

8. Após a configuração, o Bitrise irá executar automaticamente o seu primeiro Build. Ele seguirá os passos definidos pelo Workflow primário (gerado automaticamente, com validações de Lint e testes unitários).
