como definir o volume da imagem no gitlab-runner com o executor do docker

1

Ok, pesquisei tudo isso e não consigo encontrar uma resposta definitiva.

Eu quero saber como o executor do docker gitlab-runner define os volumes para a imagem. Eu vejo da segunda URL que postei você pode colocar o diretório no host a ser usado pela imagem, da mesma forma que você faria com a opção -v no docker run, no entanto, é um caminho absoluto que não pode funcionar se executando trabalhos paralelos, pois o diretório será alterado. No entanto, não consigo encontrar se posso usar $ PWD para o diretório de compilação ou se isso funcionará, pois o arquivo config.toml está em um local diferente. A documentação do que eu li não especifica como isso funcionaria, ou se poderia funcionar. Eu estou tentando achar algumas respostas antes de eu queimar horas durante o próximo sprint que tenta conseguir algo trabalhar que pode ou não trabalhar. Então, esperando por algum insight.

Então, minha pergunta é: alguém já se deparou com esse problema antes e, em caso afirmativo, como você o configurou para que o diretório de criação seja o diretório sendo passado para a imagem do docker? Da mesma forma que você faria se fosse executado o docker build com a opção '-v' ou o docker usando 'volume:'.

O motivo pelo qual eu quero executar as imagens dessa maneira e não o executor de shell, que é o que estou fazendo atualmente. É porque se você cancelar uma construção, você tem que entrar e manualmente matar as imagens no servidor do corredor. Como você pode imaginar, isso pode ser chato e demorado se houver várias compilações em andamento.

Eu também gostaria de evitar a criação de uma imagem de docker personalizada, porque eu não quero colocar o repositório git na imagem do docker. Eu só quero fazer imagens docker adicionais, que são reutilizáveis em repositórios de CI / CD, então não quero adicionar isso como um comando em um shell script que será copiado para a imagem e, portanto, tornar a imagem não reutilizável.

Se o acima não for possível, existe uma maneira de "exportar" o diretório como uma variável para a imagem do docker? Eu não acho que existe desde docker tem que passar o volume para a imagem na inicialização.

Eu também não quero ter que construir a imagem do docker toda vez que eu executar um teste no CI / CD, pois isso pode ser demorado e caro. Eu prefiro passar o volume e executar os comandos necessários para fazer o teste.

O comando se estiver executando no script de shell: $ docker run -d -p 80:80 --name meu-apache-php-app -v "$ PWD": / var / www / html php: 7.0-apache

Espero que este seja o fórum certo para esta pergunta, não tenha certeza se isso se enquadra em stackoverflow ou serverfault.

Após uma pesquisa mais aprofundada, parece que o executor realmente executa os comandos git no contêiner docker listado como a imagem e vincula os serviços a ele. No entanto, super confuso porque eles realmente não soletram essa etapa, então eu ainda não sei se está executando os comandos git no diretório de compilação para o host ou o contêiner, se é o contêiner, então eu preciso atualizar o arquivo docker.

Referências

:

link

link

    
por Caperneoignis 20.12.2017 / 14:55

1 resposta

0

A resposta é ... clona no diretório de criação da imagem, criando o diretório e, em seguida, clonando-o, da mesma forma que chama o docker exec. Portanto, quando você está executando comandos que estão sendo executados no contêiner de compilação, essa imagem de contêiner é definida com a chave 'image:'. Portanto, para obter scripts do sistema host no contêiner de construção, você precisará definir o volume do host para o contêiner de construção. Então eu coloquei um diretório extra na minha imagem, chamei de tools_for_ci, então montei um diretório com todos esses scripts para a imagem. Isso funciona muito bem. Surge agora o problema de que a imagem do docker não pode ser alternada entre os serviços. Este é um obstáculo conhecido com o executor docker, sem melhoria no site, todos os problemas que tenho visto são backlog marcado. Então, infelizmente, não parece que uma correção será implementada em breve.

Assim, em resumo, a imagem obtém todos os arquivos necessários do repo em tempo de execução, o que significa que você não precisa definir um volume, a menos que esteja transferindo scripts do host para a imagem. Todos os comandos de script também são executados na imagem.

No entanto, a janela de encaixe na janela de encaixe, quando vinculada ao soquete do docker, parece salvar as imagens para que você não precise fazer o download novamente toda vez. Assim, posso tentar contornar o problema com a comunicação entre a imagem e os serviços.

    
por 27.12.2017 / 13:41