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.

.gitlab-ci.yml
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 save-walter-white-1234abcd \
--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
  1. Crie um arquivo GitLab CI/CD. (ex: .gitlab-ci.yml)
  2. Crie um trabalho GitLab CI/CD. (ex: benchmark_target_branch)
  3. Execute if o pipeline foi acionado por um push para a ramificaĆ§Ć£o main. Veja a documentaĆ§Ć£o de rules 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: ...)
  4. Defina a image na qual o trabalho serĆ” executado. Veja a documentaĆ§Ć£o de image do GitLab CI/CD para uma visĆ£o geral completa. (ex: image: debian:bullseye)
  5. Instale o Bencher CLI usando o script de conveniĆŖncia. (ex: before_script: ...)
  6. Use o subcomando CLI bencher run para executar seus benchmarks da ramificaĆ§Ć£o main. Veja o subcomando CLI bencher run para uma visĆ£o geral completa. (ex: bencher run)
  7. Defina a opĆ§Ć£o --project para o slug do Projeto. Veja a documentaĆ§Ć£o de --project para mais detalhes. (ex: --project save-walter-white-1234abcd)
  8. Defina a opĆ§Ć£o --token para a variĆ”vel de ambiente mascarada BENCHER_API_TOKEN. Veja a documentaĆ§Ć£o de --token para mais detalhes. (ex: --token "$BENCHER_API_TOKEN")
  9. 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)
  10. Defina a opĆ§Ć£o --testbed para o nome do Testbed. Isso provavelmente deve coincidir com a mĆ”quina selecionada em image. Veja a documentaĆ§Ć£o de --testbed para mais detalhes. (ex: --testbed debian:bullseye)
  11. Defina o Limite para a RamificaĆ§Ć£o main, Testbed debian:bullseye e Medida latency:
    1. Defina a opĆ§Ć£o --threshold-measure para a Medida latency incorporada que Ć© gerada por bencher mock. Veja a documentaĆ§Ć£o de --threshold-measure para mais detalhes. (ex: --threshold-measure latency)
    2. 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)
    3. Defina a opĆ§Ć£o --threshold-max-sample-size para o tamanho mĆ”ximo da amostra de 64. Veja a documentaĆ§Ć£o de --threshold-max-sample-size para mais detalhes. (ex: --threshold-max-sample-size 64)
    4. Defina a opĆ§Ć£o --threshold-upper-boundary para o Limite Superior de 0.99. Veja a documentaĆ§Ć£o de --threshold-upper-boundary para mais detalhes. (ex: --threshold-upper-boundary 0.99)
    5. 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)
  12. 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)
  13. Defina a opĆ§Ć£o --adapter para Bencher Metric Format JSON (json) que Ć© gerado por bencher mock. Veja adapters de benchmark harness para uma visĆ£o geral completa. (ex: --adapter json)
  14. 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.

.gitlab-ci.yml
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 save-walter-white-1234abcd \
--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
  1. Atualize o arquivo GitLab CI/CD. (ex: .gitlab-ci.yml)
  2. Crie um trabalho no GitLab CI/CD. (ex: benchmark_mr_branch)
  3. Execute if o pipeline foi acionado por um merge_request_event. Veja a documentaĆ§Ć£o de rules 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: ...)
  4. Defina a image na qual o trabalho serĆ” executado. Veja a documentaĆ§Ć£o de image do GitLab CI/CD para uma visĆ£o completa. (ex: image: debian:bullseye)
  5. Instale o Bencher CLI usando o script de conveniĆŖncia. (ex: before_script: ...)
  6. Utilize o subcomando CLI bencher run para executar seus benchmarks do branch da solicitaĆ§Ć£o de mesclagem. Veja o subcomando CLI bencher run para uma visĆ£o completa. (ex: bencher run)
  7. Defina a opĆ§Ć£o --project para o slug do Projeto. Veja a documentaĆ§Ć£o de --project para mais detalhes. (ex: --project save-walter-white-1234abcd)
  8. Defina a opĆ§Ć£o --token para a variĆ”vel de ambiente mascarada BENCHER_API_TOKEN. Veja a documentaĆ§Ć£o de --token para mais detalhes. (ex: --token "$BENCHER_API_TOKEN")
  9. 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")
  10. Defina o Ponto de InĆ­cio para o Branch SM:
    1. 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")
    2. Defina a opĆ§Ć£o --start-point-hash para o hash git 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")
    3. 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)
    4. 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)
  11. Defina a opĆ§Ć£o --testbed para o nome do Testbed. Isso provavelmente deverĆ” corresponder Ć  mĆ”quina selecionada em image. Veja a documentaĆ§Ć£o de --testbed para mais detalhes. (ex: --testbed debian:bullseye)
  12. 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)
  13. Defina a opĆ§Ć£o --adapter para Bencher Metric Format JSON (json) que Ć© gerado por bencher mock. Veja os adaptadores de harness de benchmark para uma visĆ£o completa. (ex: --adapter json)
  14. 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.

.gitlab-ci.yml
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 save-walter-white-1234abcd \
--token "$BENCHER_API_TOKEN" \
--branch "$CI_COMMIT_REF_NAME"
else
echo 'Merge request is not `closed`. Skipping archival.'
fi
  1. Atualize o arquivo GitLab CI/CD. (ex: .gitlab-ci.yml)
  2. Crie um trabalho GitLab CI/CD. (ex: archive_mr_branch)
  3. Execute if o pipeline foi acionado por um merge_request_event. Consulte a documentaĆ§Ć£o de rules 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: ...)
  4. Defina a image na qual o trabalho serĆ” executado. Consulte a documentaĆ§Ć£o de image do GitLab CI/CD para uma visĆ£o geral completa. (ex: image: debian:bullseye)
  5. Instale o Bencher CLI usando o script de conveniĆŖncia. (ex: before_script: curl ...)
  6. Verifique o estado do MR usando a API do GitLab. (ex: before_script: MR_STATE=$(...))
  7. Use o subcomando bencher archive do CLI para arquivar a ramificaĆ§Ć£o do MR se o estado do MR for closed. (ex: bencher archive)
  8. Defina a opĆ§Ć£o --project para o slug do Projeto. Consulte a documentaĆ§Ć£o de --project para mais detalhes. (ex: --project save-walter-white-1234abcd)
  9. Defina a opĆ§Ć£o --token para a variĆ”vel de ambiente mascarada BENCHER_API_TOKEN. Consulte a documentaĆ§Ć£o de --token para mais detalhes. (ex: --token "$BENCHER_API_TOKEN")
  10. 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! šŸŽ‰


Continue: VisĆ£o Geral do Benchmarking āž”

šŸ¤– Este documento foi gerado automaticamente pelo OpenAI GPT-4. Pode nĆ£o ser preciso e pode conter erros. Se vocĆŖ encontrar algum erro, abra um problema no GitHub.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Sat, October 12, 2024 at 8:22:00 PM UTC