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
ifo pipeline foi acionado por umpushpara a ramificaçãomain. Veja a documentação derulesdo 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
imagena qual o trabalho serÔ executado. Veja a documentação deimagedo 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 runpara executar seus benchmarks da ramificaçãomain. Veja o subcomando CLIbencher runpara uma visão geral completa. (ex:bencher run) - Defina a opção
--projectpara o slug do Projeto. Veja a documentação de--projectpara mais detalhes. (ex:--project project-abc4567-wxyz123456789) - Defina a opção
--tokenpara a variÔvel de ambiente mascaradaBENCHER_API_TOKEN. Veja a documentação de--tokenpara mais detalhes. (ex:--token "$BENCHER_API_TOKEN") - Defina a opção
--branchpara o nome da Ramificação. Veja a documentação de--branchpara uma visão geral completa. (ex:--branch main) - Defina a opção
--testbedpara o nome do Testbed. Isso provavelmente deve coincidir com a mÔquina selecionada emimage. Veja a documentação de--testbedpara mais detalhes. (ex:--testbed debian:bullseye) - Defina o Limite para a Ramificação
main, Testbeddebian:bullseyee Medidalatency:- Defina a opção
--threshold-measurepara a Medidalatencyincorporada que é gerada porbencher mock. Veja a documentação de--threshold-measurepara mais detalhes. (ex:--threshold-measure latency) - Defina a opção
--threshold-testpara um teste t de Student (t_test). Veja a documentação de--threshold-testpara uma visão geral completa. (ex:--threshold-test t_test) - Defina a opção
--threshold-max-sample-sizepara o tamanho mÔximo da amostra de64. Veja a documentação de--threshold-max-sample-sizepara mais detalhes. (ex:--threshold-max-sample-size 64) - Defina a opção
--threshold-upper-boundarypara o Limite Superior de0.99. Veja a documentação de--threshold-upper-boundarypara mais detalhes. (ex:--threshold-upper-boundary 0.99) - Defina a flag
--thresholds-resetpara que apenas o Limite especificado esteja ativo. Veja a documentação de--thresholds-resetpara uma visão geral completa. (ex:--thresholds-reset)
- Defina a opção
- Defina a flag
--errpara falhar o comando se um Alerta for gerado. Veja a documentação de--errpara uma visão geral completa. (ex:--err) - Defina a opção
--adapterpara 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
ifo pipeline foi acionado por ummerge_request_event. Veja a documentação derulesdo 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
imagena qual o trabalho serÔ executado. Veja a documentação deimagedo 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 runpara executar seus benchmarks do branch da solicitação de mesclagem. Veja o subcomando CLIbencher runpara uma visão completa. (ex:bencher run) - Defina a opção
--projectpara o slug do Projeto. Veja a documentação de--projectpara mais detalhes. (ex:--project project-abc4567-wxyz123456789) - Defina a opção
--tokenpara a variÔvel de ambiente mascaradaBENCHER_API_TOKEN. Veja a documentação de--tokenpara mais detalhes. (ex:--token "$BENCHER_API_TOKEN") - Defina a opção
--branchpara o nome do branch SM usando uma variĆ”vel prĆ©-definida do GitLab CI/CD. Veja a documentação de--branchpara 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-pointpara o ponto de inĆcio do Branch SM usando uma variĆ”vel prĆ©-definida do GitLab CI/CD. Veja a documentação de--start-pointpara uma visĆ£o completa. (ex:--start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") - Defina a opção
--start-point-hashpara o hashgitdo ponto de inĆcio do Branch SM usando uma variĆ”vel prĆ©-definida do GitLab CI/CD. Veja a documentação de--start-point-hashpara uma visĆ£o completa. (ex:--start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA") - Defina o flag
--start-point-clone-thresholdspara clonar os Limiares do ponto de inĆcio. Veja a documentação de--start-point-clone-thresholdspara uma visĆ£o completa. (ex:--start-point-clone-thresholds) - Defina o flag
--start-point-resetpara 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-resetpara uma visĆ£o completa. (ex:--start-point-reset)
- Defina a opção
- Defina a opção
--testbedpara o nome do Testbed. Isso provavelmente deverÔ corresponder à mÔquina selecionada emimage. Veja a documentação de--testbedpara mais detalhes. (ex:--testbed debian:bullseye) - Defina o flag
--errpara falhar o comando se um Alerta for gerado. Veja a documentação de--errpara uma visão completa. (ex:--err) - Defina a opção
--adapterpara 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
ifo pipeline foi acionado por ummerge_request_event. Consulte a documentação derulesdo 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
imagena qual o trabalho serÔ executado. Consulte a documentação deimagedo 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 archivedo CLI para arquivar a ramificação do MR se o estado do MR forclosed. (ex:bencher archive) - Defina a opção
--projectpara o slug do Projeto. Consulte a documentação de--projectpara mais detalhes. (ex:--project project-abc4567-wxyz123456789) - Defina a opção
--tokenpara a variÔvel de ambiente mascaradaBENCHER_API_TOKEN. Consulte a documentação de--tokenpara mais detalhes. (ex:--token "$BENCHER_API_TOKEN") - Defina a opção
--branchpara 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! š