Como usar o Bencher no GitLab CI/CD
Dependendo do seu caso de uso, vocĆŖ pode configurar Benchmarking ContĆnuo no GitLab CI/CD para o seu:
Certifique-se de ter criado um token de API e defini-lo como uma variƔvel mascarada nomeada BENCHER_API_TOKEN
antes de continuar! Navegue para Seu Repositório -> Configurações -> CI/CD -> VariÔveis -> Expandir -> Adicionar variÔvel
. A chave da variƔvel deve ser BENCHER_API_TOKEN
e o valor da variƔvel deve ser o seu token de API. Marque as caixas de Proteger variƔvel
e Mascarar variƔvel
.
Ramificação Alvo
Um pilar do Benchmarking ContĆnuo e EstatĆstico Ć© ter uma linha de base histórica para sua ramificação alvo. Essa linha de base histórica pode entĆ£o ser usada para detectar regressƵes de desempenho em Merge Requests.
benchmark_target_branch: rules: - if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push" when: always image: debian:bullseye before_script: - curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh script: - | bencher run \ --project project-abc4567-wxyz123456789 \ --token "$BENCHER_API_TOKEN" \ --branch main \ --testbed debian:bullseye \ --threshold-measure latency \ --threshold-test t_test \ --threshold-max-sample-size 64 \ --threshold-upper-boundary 0.99 \ --thresholds-reset \ --err \ --adapter json \ bencher mock
- Crie um arquivo GitLab CI/CD.
(ex:
.gitlab-ci.yml
) - Crie um trabalho GitLab CI/CD.
(ex:
benchmark_target_branch
) - Execute
if
o pipeline foi acionado por umpush
para a ramificaçãomain
. Veja a documentação derules
do GitLab CI/CD e a documentação de variÔveis predefinidas do GitLab CI/CD para uma visão geral completa. (ex:rules: if: ...
) - Defina a
image
na qual o trabalho serÔ executado. Veja a documentação deimage
do GitLab CI/CD para uma visão geral completa. (ex:image: debian:bullseye
) - Instale o Bencher CLI usando o script de conveniĆŖncia.
(ex:
before_script: ...
) - Use o subcomando CLI
bencher run
para executar seus benchmarks da ramificaçãomain
. Veja o subcomando CLIbencher run
para uma visão geral completa. (ex:bencher run
) - Defina a opção
--project
para o slug do Projeto. Veja a documentação de--project
para mais detalhes. (ex:--project project-abc4567-wxyz123456789
) - Defina a opção
--token
para a variƔvel de ambiente mascaradaBENCHER_API_TOKEN
. Veja a documentação de--token
para mais detalhes. (ex:--token "$BENCHER_API_TOKEN"
) - Defina a opção
--branch
para o nome da Ramificação. Veja a documentação de--branch
para uma visão geral completa. (ex:--branch main
) - Defina a opção
--testbed
para o nome do Testbed. Isso provavelmente deve coincidir com a mƔquina selecionada emimage
. Veja a documentação de--testbed
para mais detalhes. (ex:--testbed debian:bullseye
) - Defina o Limite para a Ramificação
main
, Testbeddebian:bullseye
e Medidalatency
:- Defina a opção
--threshold-measure
para a Medidalatency
incorporada que Ć© gerada porbencher mock
. Veja a documentação de--threshold-measure
para mais detalhes. (ex:--threshold-measure latency
) - Defina a opção
--threshold-test
para um teste t de Student (t_test
). Veja a documentação de--threshold-test
para uma visão geral completa. (ex:--threshold-test t_test
) - Defina a opção
--threshold-max-sample-size
para o tamanho mƔximo da amostra de64
. Veja a documentação de--threshold-max-sample-size
para mais detalhes. (ex:--threshold-max-sample-size 64
) - Defina a opção
--threshold-upper-boundary
para o Limite Superior de0.99
. Veja a documentação de--threshold-upper-boundary
para mais detalhes. (ex:--threshold-upper-boundary 0.99
) - Defina a flag
--thresholds-reset
para que apenas o Limite especificado esteja ativo. Veja a documentação de--thresholds-reset
para uma visão geral completa. (ex:--thresholds-reset
)
- Defina a opção
- Defina a flag
--err
para falhar o comando se um Alerta for gerado. Veja a documentação de--err
para uma visão geral completa. (ex:--err
) - Defina a opção
--adapter
para Bencher Metric Format JSON (json
) que Ć© gerado porbencher mock
. Veja adapters de benchmark harness para uma visão geral completa. (ex:--adapter json
) - Especifique os argumentos do comando de benchmark.
Veja comando de benchmark para uma visão geral completa.
(ex:
bencher mock
)
SolicitaƧƵes de Mesclagem
Para capturar regressões de desempenho em Solicitações de Mesclagem, você precisarÔ executar seus benchmarks nos SMs. O exemplo abaixo deve ser usado apenas para branches dentro do mesmo repositório.
benchmark_mr_branch: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: always image: debian:bullseye before_script: - curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh script: - | bencher run \ --project project-abc4567-wxyz123456789 \ --token "$BENCHER_API_TOKEN" \ --branch "$CI_COMMIT_REF_NAME" \ --start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" \ --start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA" \ --start-point-clone-thresholds \ --start-point-reset \ --testbed debian:bullseye \ --err \ --adapter json \ bencher mock
- Atualize o arquivo GitLab CI/CD.
(ex:
.gitlab-ci.yml
) - Crie um trabalho no GitLab CI/CD.
(ex:
benchmark_mr_branch
) - Execute
if
o pipeline foi acionado por ummerge_request_event
. Veja a documentação derules
do GitLab CI/CD e a documentação de variÔveis pré-definidas do GitLab CI/CD para uma visão completa. (ex:rules: if: ...
) - Defina a
image
na qual o trabalho serÔ executado. Veja a documentação deimage
do GitLab CI/CD para uma visão completa. (ex:image: debian:bullseye
) - Instale o Bencher CLI usando o script de conveniĆŖncia.
(ex:
before_script: ...
) - Utilize o subcomando CLI
bencher run
para executar seus benchmarks do branch da solicitação de mesclagem. Veja o subcomando CLIbencher run
para uma visão completa. (ex:bencher run
) - Defina a opção
--project
para o slug do Projeto. Veja a documentação de--project
para mais detalhes. (ex:--project project-abc4567-wxyz123456789
) - Defina a opção
--token
para a variƔvel de ambiente mascaradaBENCHER_API_TOKEN
. Veja a documentação de--token
para mais detalhes. (ex:--token "$BENCHER_API_TOKEN"
) - Defina a opção
--branch
para o nome do branch SM usando uma variÔvel pré-definida do GitLab CI/CD. Veja a documentação de--branch
para uma visão completa. (ex:--branch "$CI_COMMIT_REF_NAME"
) - Defina o Ponto de InĆcio para o Branch SM:
- Defina a opção
--start-point
para o ponto de inĆcio do Branch SM usando uma variĆ”vel prĆ©-definida do GitLab CI/CD. Veja a documentação de--start-point
para uma visão completa. (ex:--start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME"
) - Defina a opção
--start-point-hash
para o hashgit
do ponto de inĆcio do Branch SM usando uma variĆ”vel prĆ©-definida do GitLab CI/CD. Veja a documentação de--start-point-hash
para uma visão completa. (ex:--start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA"
) - Defina o flag
--start-point-clone-thresholds
para clonar os Limiares do ponto de inĆcio. Veja a documentação de--start-point-clone-thresholds
para uma visão completa. (ex:--start-point-clone-thresholds
) - Defina o flag
--start-point-reset
para sempre redefinir o Branch SM para o ponto de inĆcio. Isso evitarĆ” a deriva de dados de benchmark. Veja a documentação de--start-point-reset
para uma visão completa. (ex:--start-point-reset
)
- Defina a opção
- Defina a opção
--testbed
para o nome do Testbed. Isso provavelmente deverÔ corresponder à mÔquina selecionada emimage
. Veja a documentação de--testbed
para mais detalhes. (ex:--testbed debian:bullseye
) - Defina o flag
--err
para falhar o comando se um Alerta for gerado. Veja a documentação de--err
para uma visão completa. (ex:--err
) - Defina a opção
--adapter
para Bencher Metric Format JSON (json
) que Ć© gerado porbencher mock
. Veja os adaptadores de harness de benchmark para uma visão completa. (ex:--adapter json
) - Especifique os argumentos do comando de benchmark.
Veja comando de benchmark para uma visão completa.
(ex:
bencher mock
)
Para limpar a ramificação do MR após o MR ser fechado,
vocĆŖ pode criar um trabalho separado que consulta o estado do MR usando a API do GitLab.
Se o estado for closed
, este trabalho irÔ arquivar a ramificação do MR usando o comando bencher archive
.
archive_mr_branch: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: always image: debian:bullseye before_script: - curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh - | MR_STATE=$(curl --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID" | jq -r .state) echo "Merge request state: $MR_STATE" script: - | if [ "$MR_STATE" = "closed" ]; then bencher archive \ --project project-abc4567-wxyz123456789 \ --token "$BENCHER_API_TOKEN" \ --branch "$CI_COMMIT_REF_NAME" else echo 'Merge request is not `closed`. Skipping archival.' fi
- Atualize o arquivo GitLab CI/CD.
(ex:
.gitlab-ci.yml
) - Crie um trabalho GitLab CI/CD.
(ex:
archive_mr_branch
) - Execute
if
o pipeline foi acionado por ummerge_request_event
. Consulte a documentação derules
do GitLab CI/CD e a documentação de variÔveis predefinidas do GitLab CI/CD para uma visão geral completa. (ex:rules: if: ...
) - Defina a
image
na qual o trabalho serÔ executado. Consulte a documentação deimage
do GitLab CI/CD para uma visão geral completa. (ex:image: debian:bullseye
) - Instale o Bencher CLI usando o script de conveniĆŖncia.
(ex:
before_script: curl ...
) - Verifique o estado do MR usando a API do GitLab.
(ex:
before_script: MR_STATE=$(...)
) - Use o subcomando
bencher archive
do CLI para arquivar a ramificação do MR se o estado do MR forclosed
. (ex:bencher archive
) - Defina a opção
--project
para o slug do Projeto. Consulte a documentação de--project
para mais detalhes. (ex:--project project-abc4567-wxyz123456789
) - Defina a opção
--token
para a variƔvel de ambiente mascaradaBENCHER_API_TOKEN
. Consulte a documentação de--token
para mais detalhes. (ex:--token "$BENCHER_API_TOKEN"
) - Defina a opção
--branch
para o nome da ramificação do MR usando uma variÔvel predefinida do GitLab CI/CD. (ex:--branch "$CI_COMMIT_REF_NAME"
)
š° ParabĆ©ns! VocĆŖ aprendeu como usar o Bencher no GitLab CI/CD! š