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 . 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.gitNo 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.gitIniciamos 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 .
As chaves geradas se parecem mais ou menos com isso:

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

Ó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.

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/*****/*.git3. Configurando o AppCenter
Criamos um novo aplicativo no AppCenter.

Indicamos a linguagem/plataforma

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.

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.

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

Clique em Revogar para desvincular a conta.

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.

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-agentEm 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
