Integração do AppCenter e do GitLab

Olá, bom dia!

Quero compartilhar minha experiência na configuração da integração do GitLab com o AppCenter através do BitBucket.

Essa integração surgiu a partir da necessidade de iniciar automaticamente testes de UI para um projeto multiplataforma em Xamarin. Um tutorial detalhado está disponível abaixo!

* Se houver interesse, farei um artigo separado sobre a automação de testes de UI em um ambiente multiplataforma.

Encontrei apenas um material semelhante artigo. Portanto, meu artigo pode ser útil para alguém.

Tarefa: Configurar a execução automática de testes de UI no AppCenter, considerando que nossa equipe usa o GitLab como sistema de controle de versão.

O problema descobriu-se que o AppCenter não integra-se diretamente com o GitLab. Uma das soluções escolhidas foi usar o BitBucket como um intermediário.

Passos

1. Criar um repositório vazio no BitBucket

Não vejo a necessidade de descrever isso em mais detalhes 🙂

2. Configurar o GitLab

Precisamos que, ao fazer push/merge no repositório, as alterações também sejam enviadas para o BitBucket. Para isso, adicionamos um runner (ou editamos o arquivo .gitlab-ci.yml existente).

Primeiro, adicionamos os comandos na seção before_scripts

 - git config --global user.email "user@email"
 - git config --global user.name "username"

Depois, adicionamos o seguinte comando na etapa necessária:

- git push --mirror https://username:password@bitbucket.org/username/projectname.git

No meu caso, o arquivo ficou assim

before_script:
 - git config --global user.email "user@email"
 - git config --global user.name "username"

stages:
  - mirror
mirror:
  stage: mirror
  script:
    - git push --mirror https://****:*****@bitbucket.org/****/testapp.git

Iniciamos o build, verificamos se as alterações/arquivos foram corretamente enviadas para o BitBucket.
* Como mostrou a prática, a configuração de chaves SSH não é obrigatória. Mas, por via das dúvidas, apresentarei abaixo o algoritmo de configuração da conexão via SSH.

Conexão via SSH

Primeiro, é necessário gerar uma chave SSH. Muitas artigos falam sobre isso. Para exemplo, você pode conferir aqui.
As chaves geradas se parecem mais ou menos com isso:
Integração do AppCenter e do GitLab

Em seguida a chave secreta precisa ser adicionada como uma variável no GitLab. Para isso, vamos em Configurações > CI/CD > Variáveis de Ambiente. Adicionamos TODO o conteúdo do arquivo onde você salvou a chave secreta. Chamaremos a variável de SSH_PRIVATE_KEY.
* este arquivo, ao contrário do arquivo com a chave pública, não terá extensão
Integração do AppCenter e do GitLab

Ótimo, agora precisamos adicionar a chave pública no BitBucket. Para fazer isso, abrimos o repositório e vamos em Configurações > Chaves de Acesso.

Integração do AppCenter e do GitLab

Aqui clicamos em Adicionar Chave e colamos o conteúdo do arquivo com a chave pública (o arquivo com extensão .pub).

O próximo passo será usar as chaves no gitlab-runner. Use estes comandos, mas indique seus dados em vez dos asteriscos.

image: timbru31/node-alpine-git:latest

stages:
  - mirror

before_script:
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  - ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts
  - git config --global user.email "*****@***"
  - git config --global user.name "****"
  - ssh -T git@bitbucket.org

mirror:
  stage: mirror
  script:
    - git push --mirror https://****:****@bitbucket.org/*****/*.git

3. Configurando o AppCenter

Criamos um novo aplicativo no AppCenter.

Integração do AppCenter e do GitLab

Indicamos a linguagem/plataforma

Integração do AppCenter e do GitLab

A seguir, acessamos a seção Build do aplicativo que acabamos de criar. Escolhemos o BitBucket e o repositório criado na etapa 1.

Ótimo, agora precisamos configurar o build. Para isso, encontramos o ícone da engrenagem.

Integração do AppCenter e do GitLab

Basicamente, tudo é intuitivo. Escolhemos o projeto e a configuração. Se necessário, ativamos a execução de testes após o build. Eles serão executados automaticamente.

Basicamente, é isso. Parece simples, mas, evidentemente, nem tudo ocorrerá sem problemas. Portanto, descreverei alguns erros que encontrei durante o trabalho:

'ssh-keygen' não é reconhecido como um comando interno ou externo.

Isso ocorre porque o caminho para o ssh-keygen.exe não foi adicionado às variáveis de ambiente.
Há duas opções: adicione C:Program FilesGitusrbin às Variáveis de Ambiente (será aplicado após reiniciar a máquina) ou execute o console a partir deste diretório.

O AppCenter não se conectou à conta BitBucket correta?

Para resolver o problema, é necessário desvincular a conta BitBucket do AppCenter. Acesse a conta BitBucket incorreta e vá até o perfil do usuário.

Integração do AppCenter e do GitLab

Em seguida, vá para Configurações > Gerenciamento de Acesso > OAuth

Integração do AppCenter e do GitLab

Clique em Revogar para desvincular a conta.

Integração do AppCenter e do GitLab

Depois disso, é necessário fazer login na conta BitBucket correta.
* Se necessário, limpe também o cache do navegador.

Agora, vamos ao AppCenter. Vamos para a seção Build e clicamos em Desconectar conta BitBucket.

Integração do AppCenter e do GitLab

Quando a conta antiga estiver desvinculada, conectamos o AppCenter novamente. Agora, à conta correta.

'eval' não é reconhecido como um comando interno ou externo.

Use em vez do comando

  - eval $(ssh-agent -s)

O comando:

  - ssh-agent

Em alguns casos, será necessário ou especificar o caminho completo para C:Program FilesGitusrbinssh-agent.exe ou adicionar esse caminho às variáveis de sistema na máquina onde o runner está em execução.

O AppCenter Build tenta iniciar o build para o projeto a partir de um repositório BitBucket não atualizado.

No meu caso, o problema surgiu porque eu estava trabalhando com várias contas. Foi resolvido limpando o cache.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster