Um número significativo de comentários e solicitações de https://github.com/helm/helm/issues/3555 deveriam ter a capacidade de definir .Chart.AppVersion
no momento da instalação e atualização sem ter que baixar e reempacotar o gráfico. Esses comentários e solicitações não foram abordados antes do fechamento do tópico por ser muito antigo
Caso de uso de exemplo, várias implantações de uma organização usam o mesmo gráfico, apenas com diferentes contêineres e substituições de nome.
Para maior clareza, #3555 foi fechado pelo OP (ref https://github.com/helm/helm/issues/3555#issuecomment-633187773) com o seguinte comentário:
"Parece que muitas pessoas aqui estão pedindo uma maneira de substituir o campo 'appVersion'. A intenção/solicitação original neste problema é permitir —app-version como um substituto para —version, para que um usuário possa executar ' helm fetch —app-version=v0.15.0' e o Helm descobriria qual versão do gráfico mais recente especificou v0.15.0 como uma appVersion e buscaria isso.
Em nosso projeto/gráfico (cert-manager), queremos deixar o mais claro possível para os usuários finais qual versão eles estão instalando, portanto, permitir que eles instalem por versão do aplicativo em vez da versão do gráfico seria uma experiência de instalação muito mais natural.
Dito isso, esse problema foi aberto há 2 anos e, desde então, optamos por manter esses dois números de versão em sincronia/bloqueio. Depois de alguns anos fazendo isso, tem sido surpreendentemente fácil e indolor, embora os usuários às vezes precisem esperar algumas semanas por um novo lançamento oficial se houver alterações feitas em nossos manifestos de implantação.
Dada a idade desse problema, seu comprimento, a enorme variedade de portas de recursos ligeiramente diferentes e as mudanças no projeto Helm desde então (Helm 3, gráficos OCI etc.), não acho que esse problema esteja em bom estado para ser encaminhado como uma solicitação de recurso em sua forma atual. Vou encerrar este problema, mas qualquer outra pessoa que tenha uma solicitação de recurso semelhante é melhor abrir um novo problema e vincular a quaisquer outros comentários relevantes neste problema para fornecer evidências. Espero que isso funcione melhor para o processo de triagem da equipe do Helm, para que suas solicitações possam obter a visibilidade de que precisam!
Eu também acho que esse tipo de funcionalidade poderia ser, e provavelmente é melhor, implementado como uma ferramenta externa ou wrapper ao redor
Helm, especialmente ao levar em conta as mudanças da OCI, que acho que tornariam isso mais complicado de implementar."
é feio, mas funciona, adoraria uma bandeira embutida no leme embora
sed -i "s/^version:.*$/version: $(git describe)/" chart/Chart.yaml
sed -i "s/^appVersion:.*$/appVersion: $(git describe)/" chart/Chart.yaml
helm upgrade app ./chart
gostaria que fosse mais assim....
helm upgrade --version "$(git describe)" --app-version "$(git describe)" app ./chart
@loa Sua sugestão não segue o seguinte do título (e é o ponto principal disso"
sem editar
Chart.yaml
@timothyclarke Eu só queria esclarecer o caso de uso.
Atualmente sem a capacidade de alterar appVersion
na atualização, o resultado de helm history
é:
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Jun 8 11:39:51 2020 superseded spring-1.0.0 1.0.0 Install complete
2 Mon Jun 8 12:19:21 2020 superseded spring-1.0.0 1.0.0 Upgrade complete
3 Mon Jun 8 12:20:51 2020 deployed spring-1.0.0 1.0.0 Upgrade complete
Idealmente em execução
helm upgrade --wait --app-version "$MY_AWESOME_VERSION" app ./chart
Isso resultaria em um helm history
mais amigável, como o abaixo. Isso mostra que o gráfico não mudou, mas o aplicativo teve novos lançamentos.
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Jun 8 11:39:51 2020 superseded spring-1.0.0 1.0.1 Install complete
2 Mon Jun 8 12:19:21 2020 superseded spring-1.0.0 1.0.2 Upgrade complete
3 Mon Jun 8 12:20:51 2020 deployed spring-1.0.0 1.0.3 Upgrade complete
Este caso de uso se encaixa com o processo de leme?
Idealmente, a versão do aplicativo fornecida via linha de comando também estaria disponível nos modelos ( $.AppVersion
)?
Isso permitiria que ele fosse adicionado aos metadados da configuração do kubernetes.
Isso seria super útil. Observação sobre o tópico "versão do aplicativo", ou seja, o que é um aplicativo e como você define a versão quando há mais de uma imagem docker no "aplicativo", etc., como automatizar a atualização no CI/CD. Eu ignoro esses problemas definindo 2 versões:
Como o leme não tem um conceito de versão de instalação, uso a versão do app para guardar o md5.
Isso faz com que ele interprete o que está instalado:
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Jun 8 11:39:51 2020 superseded spring-1.0.0 3efe0e3... Install complete
2 Mon Jun 8 12:19:21 2020 superseded spring-1.0.0 ie21b02... Upgrade complete
3 Mon Jun 8 12:20:51 2020 superseded spring-1.0.0 3efe0e3... Upgrade complete
4 Mon Jun 8 12:20:51 2020 deployed spring-1.1.0 123abcd... Upgrade complete
Agora é bastante óbvio que as revisões 1 e 3 são exatamente a mesma instalação: mesma fonte de gráfico e mesma árvore final de valores.
Se alguém estiver interessado em experimentar isso, https://github.com/schollii/sandals/blob/master/helm.py fornece algumas funções úteis para isso. Atualmente, recebo o hash por meio de uma execução a seco para obter os valores mesclados e tenho que copiar o gráfico para uma pasta temporária para editar a versão do aplicativo em Chart.yaml (ou usar a solução alternativa de empacotamento, pois suporta --app-version ). Então --app-version
para instalar seria incrível. Eu também gostaria de implementar algo como --app-version-is-md5
que tornaria um teste desnecessário, mas isso estará em outra edição (#8453).
Eu uso isso antes de cada instalação quando não estou usando uma tag git yq w -i k8s/$CI_PROJECT_NAME/Chart.yaml appVersion "$CI_COMMIT_SHORT_SHA"
Quando eu uso uma tag eu atualizo a revisão no processo ci eu uso isso antes de cada instalação yq w -i k8s/$CI_PROJECT_NAME/Chart.yaml appVersion "$CI_COMMIT_TAG"
Em seguida, confirme o Chart.yaml
atualizado para o controle de versão.
Usando o gitlab ci
Eu sei que muitas pessoas gostam de definir a versão do aplicativo antes de publicar um gráfico. Mas realmente não queremos publicar um gráfico, especialmente quando ainda estamos testando as alterações que acabamos de fazer. instalar ou atualizar para um ambiente de desenvolvimento é o principal caso de uso para esse recurso.
@woodcockjosh , não tenho certeza de que esse problema esteja na versão do gráfico, mas mais na versão do aplicativo legível por humanos (appVersion) que foi implantada usando o gráfico.
Eu diria que o principal caso de uso do recurso é mais dar aos designers de gráficos, administradores de servidores e desenvolvedores a capacidade de:
Ao cobrir os dois casos de uso acima, IMO, permitiria que o leme ficasse sem opinião sobre como a implementação e o uso dos gráficos do leme são feitos.
a versão de instalação: valor único baseado na combinação de todos os valores usados na instalação, ou seja, após mesclar todos os arquivos de valores (incluindo os secretos descriptografados) e os valores padrão do conjunto e do gráfico. Eu determino isso por meio de um MD5 ou SHA256 com base no conjunto final de valores.
@schollii Eu gosto da ideia de uma versão de instância, mas como criador e implementador de gráficos de leme onde trabalho, ainda gostaria de uma versão de aplicativo legível por humanos que seja separada da versão de instância. A razão para eles serem separados é
a versão de instalação não seria única se apenas o código do aplicativo fosse alterado e não o gráfico e/ou valores aplicados ao gráfico.
@rcampbel sim claro que queremos ver a versão do aplicativo que está instalado. O que estou dizendo é que as circunstâncias em que você deseja ter uma versão diferente para appVersion daquela que está em Chart.yaml
é se esse gráfico pertence a você e você está implantando uma versão de nível de desenvolvimento de a aplicação. Se não fosse a versão de nível de desenvolvimento, você poderia apenas manter o número da versão do aplicativo dentro de Chart.yaml
e fazer com que os usuários finais do gráfico usem essa versão do aplicativo como a versão padrão do aplicativo.
Se estou desenvolvendo novos microsserviços, por exemplo, não quero empacotar e carregar um novo gráfico de leme em um repositório de leme sempre que quiser testar uma versão implantada do meu aplicativo. Mas eu também gostaria de ver a versão ou o id de confirmação que é implantado para cada versão, e é por isso que queremos substituir o appVersion para versões de desenvolvimento, mas provavelmente não para versões de produção.
O que estou dizendo, porém, é que as circunstâncias em que você gostaria de ter uma versão diferente para appVersion daquela que está no Chart.yaml é se esse gráfico pertencer a você e você estiver implantando uma versão de nível de desenvolvimento do aplicativo. Se não fosse a versão de nível de desenvolvimento, você poderia apenas manter o número da versão do aplicativo dentro do Chart.yaml e fazer com que os usuários finais do gráfico usem essa versão do aplicativo como a versão padrão do aplicativo.
É exatamente por isso que o leme não deve opinar sobre como a implementação e o uso dos gráficos do leme são feitos.
O Helm não deve se preocupar com a estratégia de implantação local e além, isto é, para o fluxo de trabalho da equipe/projeto descobrir. Mas isso está fugindo do recurso que está sendo solicitado, permita que .Chart.AppVersion
seja definido no momento da instalação/atualização sem atualizar Chart.yaml
Não quero empacotar e fazer upload de um novo gráfico de leme para um repositório de leme sempre que quiser testar uma versão implantada do meu aplicativo
Pelo que posso dizer, o leme já não tem opinião sobre isso, pois tem os meios para fazer exatamente isso ao chamar helm upgrade
O argumento do gráfico pode ser: uma referência de gráfico('exemplo/mariadb'), um caminho para um diretório de gráfico, um gráfico empacotado ou uma URL totalmente qualificada. ~ https://helm.sh/docs/helm/helm_upgrade/
@woodcockjosh Existem muitos casos de uso e, como @rcampbel afirma, o leme deve permanecer sem opinião sobre isso e permitir que as pessoas trabalhem à sua maneira.
Se eu seguir a lógica "deveria ser publicado no gráfico" (ao extremo), por que o leme tem o sinalizador --set
ou --values
, -f
e, por isso, um arquivo values.yaml
? Tudo fornecido pelos sinalizadores são substituições de tempo de implantação que deveriam estar no gráfico publicado. Eu sei que é ruim colocar segredos em um gráfico, mas se esse fosse o único motivo, o argumento deveria ser --secrets
vez de --values
.
Na minha situação, implantamos vários aplicativos que usam o mesmo gráfico. Esses aplicativos são promovidos por meio de ambientes usando um método CI/CD. Os aplicativos usam o sinalizador --values
para fornecer configuração específica do aplicativo e do ambiente (geralmente detalhes de entrada e fonte de dados). Se eu estivesse publicando um novo gráfico para cada versão de aplicativo para cada ambiente, estaria criando centenas a milhares de versões de gráfico por semana. Na maioria dos casos, as únicas diferenças seriam a versão do aplicativo. Eu sou então forçado a aumentar a versão do gráfico. Para mim, os requisitos introduzidos por todo este parágrafo, embora lógicos com uma coisa desencadeando outra, são loucos.
Como o .Chart.appVersion
não está funcionando para nós, revertemos para um .Chart.appVersion
estático e estamos usando .Values.image.tag
(este não é um convite para reabrir esse debate)
Eu tinha certeza que appVersion
era o caminho a seguir em relação à versão do aplicativo depois de ler a documentação, até ler todos esses casos de uso válidos.
Para usuários de um pacote de gráficos é mais fácil aumentar image.tag
, isso implica em modificar apenas os valores, o gráfico pode ficar em outro lugar. Mas usando image.tag
você não obtém informações sobre a versão do pacote ao fazer helm history <release>
Eu notei também que helm package <chart>
irá gerar um arquivo tar com o Chart.version
. Se você quiser apenas distribuir uma nova versão do seu aplicativo e for usado appVersion
, espera-se que você também aumente version
, caso contrário, você substituirá o arquivo anterior. Se appVersion
e version
forem diferentes, é mais difícil calcular o aumento semver correto com ferramentas automáticas para version
(suponha que appVersion
seja aumentado com base nas mensagens de confirmação ). Como vocês lidam com isso?
Só precisamos de algo que seja uma versão real do aplicativo que possamos ver ao listar os gráficos implantados.
Quando tenho um gráfico de leme criado para implantar meu microsserviço padrão, gostaria de escolher durante a implantação qual versão do aplicativo esse microsserviço tem durante a implantação. Atualmente, todos os meus serviços têm appVersion 1.0.0 para sempre e não estou usando helm para verificar qual versão do aplicativo eu tenho - porque tornar isso possível com os métodos atuais (reempacotar o gráfico) tornará minha vida um inferno.
Apenas, por favor, deixe-nos decidir como usaremos este parâmetro. Se isso não for possível devido a alguns motivos técnicos, informe-nos o motivo.
Eu prefiro não usar "sed" como mencionado em 8194
Até que isso seja resolvido (ou não) Aqui está como eu resolvi isso no meu CI/CD (GitLab):
Empacote o gráfico com a versão do aplicativo e implante-o.
Eu sei que a versão do Chart não deve ser a mesma que a appVersion, mas no nosso caso é uma solução alternativa.
Além disso, não há necessidade de fazer upload para um repositório de leme, mas é possível usar os artefatos de CI resultantes (chart.tgz)
Portanto, se a embalagem primeiro não for um problema e você precisar de uma solução alternativa para hoje , poderá usar algo assim.
deploy:
image: alpine/helm:3.2.4
stage: deploy
environment:
name: ${ENV}
script:
- helm package --app-version=${CI_COMMIT_TAG} --version=${CI_COMMIT_TAG} ${NAMESPACE}
- |
helm upgrade -i --wait ${CI_PROJECT_NAME} ./${NAMESPACE}-${CI_COMMIT_TAG}.tgz \
--set image.repository="${CI_REGISTRY_IMAGE}" \
--set image.tag="${CI_COMMIT_TAG}"
- helm history ${CI_PROJECT_NAME} -n ${NAMESPACE}
tags:
- kubernetes
only:
- tags
Na saída agora tenho as versões disponíveis.
$ helm history ${CI_PROJECT_NAME} -n ${NAMESPACE}
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
45 Sun Aug 9 15:40:42 2020 superseded prd-0.1.0 1.16.0 Upgrade complete
46 Mon Aug 10 11:38:56 2020 superseded prd-v0.2.25 v0.2.25 Upgrade complete
47 Mon Aug 10 11:55:41 2020 deployed prd-v0.2.26 v0.2.26 Upgrade complete
Job succeeded
@haimari
Obrigado pelo snippet, para quem procura, há outro exemplo anterior neste passo https://github.com/helm/helm/issues/8194#issuecomment -635879040 que atinge o mesmo resultado.
Esta questão em mãos, no entanto, é que reempacotar o gráfico é indesejável e os mantenedores do leme estão forçando essa opinião e maneira de trabalhar. Este pedido é que o leme seja menos opinativo e permita que o leme seja usado de uma maneira que melhor se adapte a outras partes da comunidade.
Esta edição e https://github.com/helm/helm/issues/3555 explorou as diferenças entre .Chart.version
e .Chart.appVersion
, especificamente como a maioria dos gráficos públicos vincula appVersion
a a tag de contêiner que forçou a alteração da versão do gráfico simplesmente porque uma nova versão de um aplicativo foi lançada. Embora isso possa ser uma boa suposição para a maior parte dos gráficos públicos, a suposição não é válida para um número significativo de gráficos privados. Daí este pedido aos mantenedores do leme para que parem de forçar essa abordagem na comunidade.
ps Seu trecho de código implica uma versão do gráfico por versão / por ambiente que substituiria a necessidade de definir image.repository
e image.tag
. Eu esperaria um passo após o reempacotamento para publicar o gráfico em um repositório de leme no caso de você precisar reimplantar, consulte https://github.com/helm/helm/issues/8194#issuecomment -658715462 acima, que explora esse coelho buraco
@haimari
Obrigado pelo trecho, para quem procura, há outro exemplo anterior neste passo # 8194 (comentário) que atinge o mesmo resultado.Esta questão em mãos, no entanto, é que reempacotar o gráfico é indesejável e os mantenedores do leme estão forçando essa opinião e maneira de trabalhar. Este pedido é que o leme seja menos opinativo e permita que o leme seja usado de uma maneira que melhor se adapte a outras partes da comunidade.
Esta edição e a nº 3555 exploraram as diferenças entre.Chart.version
e.Chart.appVersion
, especificamente como a maioria dos gráficos públicos vinculaappVersion
à tag de contêiner que forçou a versão do gráfico a mudar simplesmente porque há uma nova versão de um aplicativo é lançado. Embora isso possa ser uma boa suposição para a maior parte dos gráficos públicos, a suposição não é válida para um número significativo de gráficos privados. Daí este pedido aos mantenedores do leme para que parem de forçar essa abordagem na comunidade.ps Seu trecho de código implica uma versão do gráfico por versão / por ambiente que substituiria a necessidade de definir
image.repository
eimage.tag
. Eu esperaria um passo após o reempacotamento para publicar o gráfico em um repositório de leme no caso de você precisar reimplantar, veja # 8194 (comentário) acima, que explora a toca do coelho
@timothyclarke Obrigado pela informação.
Os image.repository
e image.tag
são definidos exatamente da mesma maneira no pipeline,
então mesmo sem a linha de embalagem, essa é a maneira de usar o leme do gitlab.
a variável CI_COMMIT_TAG contém a tag de versão atual do pipeline executado.
Assim, sempre podemos reverter para a versão anterior diretamente do pipeline de CI com um clique.
Minha empresa tem nosso gráfico de leme desacoplado das tags de contêiner. Não há absolutamente nenhuma necessidade de reempacotar o gráfico para cada compilação de contêiner.
A ausência da opção de definir appVersion (e, portanto, sempre defini-lo com o mesmo valor) durante a instalação é uma grande deficiência em nosso processo de implantação. É realmente irritante que nossos usuários não possam ver as versões do aplicativo fazendo "lista de leme"
Ter a capacidade de usar algo como "instalação do helm ... --app-version v1.2.3" agregaria muito valor ao uso do Helm em nosso caso.
Minha proposta seria descontinuar appVersion
e listar chart version
e container tag
ao fazer helm list
ou helm history <name>
.
O Helm não deve tentar fornecer a versão real do aplicativo dentro do container, ele deve fornecer o que tem em mãos, a tag e a versão do gráfico, aqui alguns exemplos:
| GRÁFICO | ETIQUETA DE RECIPIENTE |
| ----- | ----- |
| 0.1.0 | 0.3.0 |
| 0.1.0 | 0.4.0 |
No exemplo acima podemos inferir que o gráfico está sendo reutilizado para diferentes tags
| GRÁFICO | ETIQUETA DE RECIPIENTE |
| ----- | ----- |
| 0.3.0 | 0.3.0 |
| 0.4.0 | 0.4.0 |
No exemplo acima, poderíamos inferir que o gráfico compartilha a mesma versão que a tag.
A principal desvantagem do appVersion
parece ser que ele requer que o pacote seja republicado, mesmo que o gráfico não tenha mudado, mas o código dentro do container sim. Enquanto isso, a tag do container pode ser fornecida por meio de values.yaml
e não precisa ser republicada.
O mais simples eu acho que seria listar a tag do container ao fazer helm list
ou helm history
, mas seria estranho ter um appVersion
por aí. Isso, pelo menos, daria algumas informações extras, e as pessoas poderiam ignorar appVersion
.
Outra solução, em vez de descontinuar appVersion
, poderia ser movido para o values.yaml
, desta forma seria desanexado do gráfico, evitando várias republicações.
Pensamentos?
@Woile e se seu aplicativo tiver mais de 1 contêiner?
@Woile e se seu aplicativo tiver mais de 1 contêiner?
Você está certo, considerando esse caso de uso também (desculpe, eu estava pensando sobre meus casos de uso), acho que mover appVersion
para o values.yaml
melhoraria a situação.
helm list
e helm history
podem permanecer os mesmosChart
e appVersion
em sincronia.o que estou perdendo?
Minha preferência seria permitir controlar appVersion explicitamente. Pode ser igual a tags de contêiner(es), ou pode precisar ser definido com um valor diferente (por exemplo, meu script de instalação procura um determinado repositório/espaço de nomes/tag de contêiner e, em seguida, aplica um regex para transformá-los em um amigável formato para exibir a versão do aplicativo)
@woodcockjosh @Woile
Meus $ 0,02. O conceito de appVersion
é bom do ponto de vista helm ls
. A implementação é o problema que eu gostaria de ver corrigido. Ter várias tags / versões em appVersion
deve ser bom, por exemplo, appVersion: nginx-1.16.0-php-7.5
Observo que o leme 3.2.4 tem {{ .Values.image.tag | default .Chart.AppVersion }}
então permite esse tipo de desconexão
A capacidade de selecionar appVersion durante a instalação/atualização seria a abordagem mais preferida. Não faz sentido aumentar a versão do gráfico toda vez que appVersion muda, pois o gráfico em si não é alterado. A progressão linear do controle de versão também nem sempre é aplicável - especialmente para aplicativos de vários contêineres implantados em diferentes ambientes com diferentes combinações de versões de contêiner. A sugestão de usar o mesmo appVersion e chartVersion também é ruim porque isso força appVersion a ser semVer compatível. semVer não é o santo graal do versionamento e o appVersion deve ser livre para usar qualquer esquema de versionamento que seja mais apropriado para o aplicativo.
@bacongobbler Este comentário significa que o leme planeja implementar esse sinalizador?
Acho que a introdução de app-version (na opção de linha de comando) e appVersion (em Chart.yaml) fornece efetivamente uma boa maneira de ver a versão de um aplicativo implantado com uma instância de gráfico. Mas isso também gera muitas questões e práticas diferentes que precisam ser esclarecidas.
Minha conclusão
Minha escolha atual
Pergunta / Ideia
Eu não sei por que a versão do aplicativo foi introduzida (talvez para cobrir o mau uso do gráfico compartilhado).
Acho que pode ser uma boa ideia removê-lo e introduzir a capacidade de definir a tag de imagem na fase do pacote sem usar soluções alternativas como sed ou yq.
Talvez um post muito longo, mas eu preciso de alguns feedbacks
@grazius
Meu entendimento do seu post é que os sinalizadores --set
, -f
e --values
são ruins e nunca devem ser usados. Todas as implantações são imutáveis e devem ser renderizadas em um gráfico, mesmo que esse gráfico seja pouco mais que values.yaml
e o gráfico guarda-chuva como uma dependência. Este gráfico deve ser renderizado no tempo de compilação (aplicativo) e publicado em um repositório de gráficos
Na situação acima, onde você está armazenando segredos ou informações confidenciais semelhantes? Em todos os lugares em que trabalhei, eles foram alimentados por meio de um arquivo --values
Para algum contexto, minhas implantações têm efetivamente 3 elementos que são versionados de forma independente
Se eu mudar um desses, não devo ser forçado a reconstruir nenhum dos outros. Normalmente estou usando vários ambientes para que os aplicativos possam ser testados antes de serem _live_. Como tal implantação gostaria de chart-v1.0
application_build-50
config_non-prod-v1.3
com os arquivos de configuração env armazenados gpg criptografados.
Minha plataforma de CI está gerenciando a compilação, implantação e promoção do aplicativo à medida que a compilação flui da origem até o teste e a produção. Se precisarmos reimplantar uma versão histórica do aplicativo, reexecutaremos esses trabalhos.
Pergunta: Por que devemos ser forçados a usar um repositório de gráficos para armazenar o estado que minha plataforma de CI processa imediatamente? Nunca devemos instalar nada disso manualmente
@timothyclarke apenas certifique-se de usar o plugin de segredos para que você possa usar arquivos de valores criptografados
@timothyclarke Olá, obrigado por este primeiro feedback ;)
Um gráfico fornece valores padrão.yaml (imutáveis para cada versão do gráfico) que podem ser usados (ou substituídos) pelos consumidores do gráfico.
Para o Chart.yaml também é uma parte imutável do gráfico ... e o app-version
está incluído.
No seu caso, o que é exibido na lista de leme para a versão do aplicativo? 50?
Se sim, como você colocou a versão do aplicativo no gráfico app-version em seu pipeline?
@grazius
Um gráfico fornece valores padrão.yaml (imutáveis para cada versão do gráfico) que podem ser usados (ou substituídos) pelos consumidores do gráfico.
Para o Chart.yaml, também é uma parte imutável do gráfico ... e a versão do aplicativo está incluída.
Talvez eu esteja entendendo mal o que você está dizendo aqui, mas isso levanta a questão de por que ter uma versão de aplicativo se ela é imutável para cada versão do gráfico? Então, para cada mudança de versão do aplicativo, também teria que haver um aumento na versão do gráfico, mesmo que nenhuma outra alteração fosse feita no gráfico? Em caso afirmativo, por que ter a versão do gráfico ou a versão do aplicativo?
Acho que isso também vai contra o que está sendo solicitado, "Fornecer um meio de configurar .Chart.AppVersion durante a instalação ou atualização sem editar Chart.yaml" Acredito que o que @timothyclarke disse anteriormente neste bate-papo resume as coisas muito bem: https:/ /github.com/helm/helm/issues/8194#issuecomment -671331311
Acho que outra coisa importante a ter em mente é que nem todos têm controle sobre o gráfico que está sendo usado, mas podem ter a capacidade de passar a imagem que está sendo usada e outros valores para o gráfico no momento da implantação. Nesse caso, como você sugeriria atualizar a versão do aplicativo implantada?
A mesma questão aqui!
Considerando o uso do sinalizador --description
como uma solução alternativa para fornecer alguma maneira de mostrar a versão do aplicativo no helm list
🤔
A versão do aplicativo é realmente necessária quando você cria um gráfico guarda-chuva. Para o gráfico de componentes, o interesse de fazer evoluir a versão do gráfico e a versão do aplicativo separadamente é muito baixo, eu acho.
Talvez o principal problema seja que o tipo no Chart.yaml não é preciso o suficiente? Não há como diferenciar um guarda-chuva, um gráfico compartilhado ou de aplicativos
@grazius Essa é uma resposta bastante opinativa.
Embora possa ser aplicável a muitos projetos de código aberto, não é tão aplicável a tantas compilações de código fechado. Por favor, reveja este tópico incluindo todas as várias declarações e casos de uso feitos, pois esta solicitação não é uma solicitação para remover .Chart.AppVersion
da especificação de um gráfico. Não é nem mesmo uma solicitação para mascarar APP VERSION
da saída de helm ls
.
Este segmento é um pedido para tornar Chart.AppVersion
configurável no momento em que um gráfico é usado (sem ter que reconstruir ou alterar o gráfico) para que o campo APP VERSION
de helm ls
não é enganoso.
Atualmente, eu argumentaria que APP VERSION
é um campo supérfluo em helm ls
e não deve ser visível para comandos de tempo de execução devido ao quão próximo .Chart.AppVersion
está vinculado a .Chart.Version
. helm inspect chart --version <.Chart.Version> <.Chart.Name>
fornece a mesma informação.
Eu também estenderia isso para o uso de .Chart.AppVersion
para ser usado como a tag do contêiner, pois todas são coisas ligeiramente diferentes que podem ser versionadas independentemente por razões válidas, mas atualmente são encaixadas em uma única coisa.
Tentei manter minhas opiniões sobre essa vinculação fora desta solicitação, pois os projetos podem ter razões inteiramente válidas para tal vinculação. Ao não forçar o mesmo processo a todos que usam o leme, tornamos o leme uma ferramenta melhor e mais inclusiva.
Eu não acho que essas mudanças solicitadas diminuam o leme ou forcem seu uso para outros.
@bacongobbler Você pode comentar sobre isso? É um recurso altamente solicitado
É um recurso altamente solicitado
Olá, @jasondamour - obrigado pelo seu interesse! Duas boas opções: criar um plugin helm e escrever um HIP .
Oi, talvez a melhor solução seja fornecer um argumento release-app-version para o comando install/upgrade que, se presente, substitui a exibição da versão do aplicativo quando fazemos uma lista de leme.?
Comentários muito úteis
Atualmente sem a capacidade de alterar
appVersion
na atualização, o resultado dehelm history
é:Idealmente em execução
Isso resultaria em um
helm history
mais amigável, como o abaixo. Isso mostra que o gráfico não mudou, mas o aplicativo teve novos lançamentos.Este caso de uso se encaixa com o processo de leme?