Automatizando verificações de pacotes R entre plataformas com o GitHub Actions e o Docker de maneira portátil

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[Esteartigofoipublicadopelaprimeiravezem[Thisarticlewasfirstpublishedon Rblog de Jozef, e gentilmente contribuiu para os R-blogueiros]. (Você pode relatar um problema sobre o conteúdo desta página aqui)


Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.

Automatizar a execução, teste e implantação do código R é uma ferramenta poderosa para garantir a reprodutibilidade, a qualidade e a robustez geral do código que estamos construindo. Um recurso relativamente recente no GitHub – ações do GitHub – nos permite fazer isso sem o uso de ferramentas adicionais, como Travis ou Jenkins, para nossos repositórios armazenados no GitHub.

Nesta postagem, examinaremos o uso das ações do GitHub e do Docker para testar nossos pacotes R nas plataformas de maneira portátil e mostrar como essa configuração funciona para o pacote de idiomas do servidor CRAN.

Devido à experiência descrita acima, ao configurar pipelines de CI para pacotes R, considero benéfico e eficiente escolher uma rota de portabilidade. Ao configurar o GitLab CI há alguns anos, a abordagem foi:

  • crie uma imagem do Docker na qual os comandos relacionados ao R serão executados
  • escreva um script shell simples que o envolva

Este processo é descrito em detalhes nas duas postagens:

Talvez a maior vantagem dessa abordagem seja que podemos simplesmente pegar esse shell script e colocá-lo em uma ferramenta diferente e, assumindo que a nova ferramenta seja compatível com o Docker.

Tudo funcionará perfeitamente, exceto alguns detalhes que ainda permanecem baseados em ferramentas, como trabalhar com variáveis ​​de ambiente e segredos de autenticação.

Ao criar o languageserversetup No pacote, era muito importante testar cada alteração em várias plataformas automaticamente e, como optei por hospedar o código-fonte aberto no GitHub, em vez do GitLab, desta vez, o GitHub Actions parecia uma escolha natural para uma configuração de CI / CD.

A ação atual do GitHub para verificações do tipo CRAN é a seguinte:

name: check_cran
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/[email protected]
    - name: Check for CRAN
      env:
        DOCKER_LOGIN_TOKEN: ${{ secrets.DOCKER_LOGIN_TOKEN }}
        LANGSERVERSETUP_RUN_DEPLOY: false
      run: sh ci/docker_stage.sh ci/check_rhub.R "cran"

Como podemos ver, além do esqueleto que você recebe de graça, a única linha que faz algum trabalho é a última. Diz ao executor do GitHub Actions para executar o shell script docker_stage.sh com 2 argumentos:

sh ci/docker_stage.sh ci/check_rhub.R "cran"

Essa configuração é muito portátil. Você poderia pegá-lo quase literalmente e usá-lo no Jenkins, no GitLab CI e provavelmente na maioria das outras ferramentas de CI / CD.

O script de shell que envolve o Docker

O que é docker_stage.sh script usado para? No nosso caso, é três vezes:

  1. Execute verificações semelhantes a CRAN automaticamente
  2. Executar implantações em contêiner
  3. Executar e relatar cobertura de teste

O que eles têm em comum é que todos acontecem em um contêiner do Docker e são descritos com um script R que pode ser executado via Rscript. Isso significa que esse script de shell é apenas um auxiliar que irá:

  • Puxe a imagem necessária do Docker
  • Crie um contêiner a partir dessa imagem
  • Copie o código retirado pelo corredor (Ações do GitHub) no contêiner
  • Execute o script R fornecido como o primeiro argumento da linha de comandos (ci/check_rhub.R acima) e outros argumentos, se necessário
  • Pare e remova o recipiente quando terminar

Os scripts R executados no contêiner Docker

Agora, os scripts R que são executados no contêiner podem executar quase todas as ações necessárias, desde a verificação do pacote, a execução de testes de unidade até a execução de seus modelos de ciência de dados.

Um exemplo totalmente automatizado usando essa abordagem exata é como o livro sparkfromr.com é implantado. Os repositórios são de código aberto, você pode ler mais neste post.

A única condição importante é que o contêiner do Docker possa executar esse script com êxito. No mundo R, isso implica principalmente ter R, todos os pacotes R e suas dependências do sistema instaladas. Isso é incrivelmente fácil com o Rocker Project, que fornece imagens R básicas com versão, mas também imagens com o RStudio. Para os fãs de arrumação, eles ainda têm uma imagem com toda a arrumação pronta para uso.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

No entanto, isso é muito facilmente testável, pois a configuração usando sh ci/docker_stage.sh ci/check_rhub.R "cran" não será executado apenas pelas ferramentas de CI / CD, mas também na sua máquina de desenvolvimento.
Observe que no Windows, pode ser necessário ativar o Windows Subsystem para Linux para que isso seja totalmente verdadeiro.

Configurar o processo dessa maneira pode levar você a um processo de desenvolvimento em contêiner, no qual você desenvolve o projeto em um contêiner. Nesse caso, o fato de que tudo funciona é apenas uma consequência automática do processo de desenvolvimento e a conteinerização não tem custos indiretos, porque podemos usar a mesma imagem para fins de IC / CD.

Leia Também  Codificadores automáticos para detecção de anomalias em manutenção preditiva

O GitHub ações yaml, variáveis ​​de ambiente e segredos

Dos poucos elementos da instalação que não são totalmente portáteis, destacam-se as variáveis ​​e os segredos de ambiente. Para ações do GitHub, podemos fazer isso com o env: cláusula, por exemplo:

      env:
        DOCKER_LOGIN_TOKEN: ${{ secrets.DOCKER_LOGIN_TOKEN }}
        LANGSERVERSETUP_RUN_DEPLOY: false

O acima irá definir o LANGSERVERSETUP_RUN_DEPLOY variável de ambiente para false e o exporá o segredo criptografado chamado DOCKER_LOGIN_TOKEN para uma variável de ambiente com o mesmo nome. Os segredos podem ser criados através do menu Configurações -> Segredos do seu repositório no GitHub.

Agora, com todas as informações acima, vamos dar uma olhada rápida em uma configuração que permitirá verificar seu pacote R em várias plataformas usando o R Hub. Nós precisamos:

  1. Um script R que executará e avaliará a verificação via Hub R – Para a configuração do servidor de idiomas do pacote, é o seguinte: ci / check_rhub.R. Observe que esse script tem anos e, possivelmente, é desnecessariamente longo e complicado.
  2. Um script de shell que executará o script R, como ci / docker_stage.sh
  3. Um contêiner de janela de encaixe no qual o script R pode ser executado. Abordamos isso detalhadamente em Preparando uma imagem de janela de encaixe privada para uso com o R-hub
  4. Um arquivo .yaml no diretório .github/workflows diretório do seu repositório, por exemplo, .github / workflows / check_cran.yml

E é isso. Agora teremos nosso pacote verificado sempre que enviarmos um commit ao nosso repositório:

Log de ações do GitHub para verificação de pacotes via R Hub

Log de ações do GitHub para verificação de pacotes via R Hub

Outros usos – Relatório de cobertura de teste e implantações baseadas em script

Como o repositório languageserversetup está completamente aberto, você também pode ver as outras ações do GitHub configuradas para esse repositório. Observe que todas as ações do GitHub usam o mesmo docker_stage.sh script, a única coisa que muda são os scripts R por finalidade:

  • Relatórios de cobertura de teste com covr e codecov.io
    • Script R executando o cálculo de cobertura com covr e publicando-o no codecov.io
    • Definição de ação do GitHub
  • Implementações de scripts baseadas no Debian
Leia Também  A traição de modelos | R-bloggers

Um exemplo de implementação de teste de pacote com o pacote de idiomaserversetup do CRAN:

Um exemplo de implementação de publicação de publicação de bookdown com sparkfromr.com



Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha o seu sabor: o email, Twitter, RSS ou facebook …



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br