Quais são as práticas recomendadas para controle de versão de docker tag?

11

Recentemente, conectei nossos servidores de CI para criar imagens do docker com o git commit.

Temos cerca de 8 contêineres diferentes que são construídos, cada um com sua própria linguagem / estrutura. Alguns são node e possuem package.json, outros são serviços python que não contêm informações de versão semântica.

Minha pergunta não é sobre como criar tags, é sobre como criar os valores para a tag.

Como garantir que cada tag tenha um número de versão semântico exclusivo para as imagens específicas? Quem deve ser a autoridade para rastrear / incrementar uma versão de compilação?

Jack Murphy
fonte
Qual é a sua abordagem atual para criar as tags?
030
É ouvido ver o que você está perguntando. Você diz "número da versão semântica", que deve ser atribuída por humanos (nossos AIs ainda não estão avançados o suficiente para decidir a semântica de uma confirmação ainda ...). Mas então você pergunta sobre "incrementar uma versão de compilação". No que você está realmente interessado? Você quer garantir que o material "aumente" (como um número de alteração do SCN / sistema ou o que for)? Ou você está interessado no conteúdo semântico do número da versão (ou seja, se ele possui alterações incompatíveis)?
Ano

Respostas:

6

Direcionaria você ao meu registro de acoplador e controle de origem da janela de encaixe, onde o dmaze respondeu a partir do forums.docker.com oficial . Confirme o hash e o nome ou as tags da filial.

No seu Dockerfile, use um LABEL para registrar a origem da compilação. Isso provavelmente inclui o hash de confirmação do controle de origem distribuído (git, Mercurial), o nome da ramificação, se relevante, quaisquer tags de liberação, se houver, e possivelmente detalhes como o carimbo de data e hora da última confirmação. o histórico do estivador e a inspeção do estivador devem poder mostrá-los.

Ao encaixar suas imagens no docker, empurre-as pelo menos duas vezes, com o hash de confirmação e o nome da ramificação como parte da "versão" (quay.io/mycorp/imagename:123abc7, quay.io/mycorp/imagename:dmaze-test ) Se as tags de liberação estiverem prontamente disponíveis, o sistema de IC também enviará imagens com essas tags.

No momento, estamos usando uma combinação de nome de filial / hash de confirmação. Para nós, isso parece ser suficiente. carimbos de data / hora enquanto são úteis OMI apenas adiciona confusão, pois eles não fornecem nada que o hash de confirmação não fornece.

Eu concordo com 030 em relação a:

quem deve ser a autoridade para rastrear / incrementar uma versão de compilação

100% é responsabilidade do IC para manter essas coisas, com comunicação adequada entre outras equipes.

Scott
fonte
1

Como garantir que cada tag tenha um número de versão semântico exclusivo para as imagens específicas?

Pode-se criar uma tag que consiste em vários elementos, por exemplo, uma combinação de carimbo de data / hora, hash de confirmação do git e versão semântica. O último deve ser definido manualmente, enquanto os dois primeiros podem ser automatizados. Essa tag pode ter a seguinte aparência:

20171015141729-58617f500f7efe236c7ba6a1dfdf37a478b4c878-0.1.4

Essa tag contém a data de construção, a confirmação e a versão semântica. Se uma imagem do Docker for executada em produção e um erro for encontrado, a pessoa saberá a versão do produto, o código que está dentro e quando a imagem foi criada e em que circunstâncias.

Quem deve ser a autoridade para rastrear / incrementar uma versão de compilação?

Na minha opinião, isso deve ser de responsabilidade do IC, pois ele é capaz de automatizar processos e, como a criação de tags pode ser automatizada, essa ferramenta é a ferramenta certa para o trabalho.

030
fonte
1

Suponho que você use uma das ferramentas do DevOps para CI / CD como Jenkins, sugiro a seguinte abordagem,

Se você usa algo como Jenkins-

  • Você pode configurar seu trabalho de forma que possa usar a variável de ambiente Jenkins "BUILD_ID", que recupera o ID de construção do trabalho quando acionado para marcá-lo em sua imagem. Dessa forma, você pode controlar sua versão das imagens do Docker. Por favor, verifique o exemplo abaixo.

ex:- sudo docker build -t <image_name>:<BUILD_ID>

Portanto, se você tiver um mecanismo de tag como para o seu SCM, poderá verificar a tag no respectivo ID de compilação nas compilações baseadas em tarefas ou em config.xml da ID de compilação no JENKINS HOME_FOLDER.

Tezi
fonte