O uso avançado do pipeline YAML está aqui! Reduza significativamente o código duplicado e organize multitarefas com flexibilidade

Autor: Mu Yan

Você encontra os seguintes problemas ao configurar o pipeline YAML?

  • Quando cenários de tarefas semelhantes são executados em lotes em um único pipeline, vários trabalhos com lógica semelhante precisam ser definidos em YAML. Quanto mais trabalhos houver, mais longa será a configuração YAML do pipeline, mais repetido será o código em YAML e maior será a capacidade de reutilização do código. é baixo e a legibilidade é ruim;
  • Os administradores gerenciam vários pipelines de maneira unificada. A arquitetura de tecnologia de múltiplas aplicações é semelhante ao processo de P&D. Quando apenas alguns parâmetros de construção e implantação são inconsistentes, cada pipeline precisa modificar os parâmetros diferenciados de forma independente, resultando em altos custos de configuração. cada pipeline é configurado de forma independente, gerenciamento e controle unificados não podem ser alcançados, baixa manutenção;
  • O pipeline YAML é um arquivo estático e a lógica de execução da tarefa é corrigida quando o pipeline é salvo. No entanto, o processo de execução do pipeline de alguns cenários de P&D precisa ser esclarecido em tempo de execução e não pode ser configurado antecipadamente. O pipeline YAML comum não pode satisfazer esse cenário.

A esse respeito, o YAML do pipeline Yunxiao Flow introduz a sintaxe do modelo, que suporta o uso de linguagens de modelo para renderizar dinamicamente o YAML do pipeline, que pode atender aos cenários de configuração em lote de vários trabalhos com lógica igual ou semelhante, atender à geração dinâmica cenários de vários trabalhos sob demanda e ajudam a reduzir a duplicação do código YAML do pipeline e orquestram multitarefa com flexibilidade.

O que é sintaxe de modelo

Template é uma linguagem de template usada para definir e renderizar texto. Ele pode ser combinado com variáveis, instruções condicionais, estruturas de loop, etc., para que os arquivos YAML possam gerar diversas saídas de configuração com base no contexto ou em fontes de dados externas. em tempo de execução. .

O Cloud Effect Pipeline apresenta o mecanismo de modelo e template=trueespecifica o modo de modelo por meio da primeira linha de comentários YAML no pipeline. Ele oferece suporte ao uso de linguagem de modelo definida {{ }}e segue go templatea sintaxe nativa; variablespipeline de renderização. Os cenários aplicáveis ​​típicos são os seguintes.

Cenários de uso principal da sintaxe do modelo

Cenário 1: Cenário de teste de compatibilidade de versão multi-sistema operacional e multi-SDK

Em alguns cenários de teste de compatibilidade, se você precisar testar seu código em n sistemas operacionais diferentes e em m versões diferentes do SDK, será necessário definir n * m trabalhos em seu pipeline. A lógica de execução de cada trabalho é na verdade a mesma. Neste cenário, quando há muitos cenários que necessitam de testes de compatibilidade, o YAML do pipeline ficará muito longo, com muito código repetido, dificultando a manutenção e quando a lógica de execução do Job for modificada, precisará ser modificada; n*m vezes.

Após a introdução da sintaxe do modelo, os cenários de compatibilidade podem ser extraídos em variáveis, e a sintaxe de intervalo pode ser usada para percorrer os cenários e gerar vários trabalhos em lotes, reduzindo bastante a quantidade de código YAML quando a lógica de execução do trabalho é modificada; apenas uma modificação é necessária.

Por exemplo, no código a seguir, percorremos 2 sistemas operacionais ["linux", "windows"] e 3 versões do JDK ["10", "11", "17"], usando o loop de intervalo do modelo, é muito Convenientemente, são gerados 6 trabalhos com a mesma lógica.

# template=true
variables:
  - key: osList
    type: Object
    value: ["linux", "windows"]
  - key: jdkVersionList
    type: Object
    value: ["10", "11", "17"]

stages:
  build_stage:
    name: 兼容性测试
    jobs:                             # 双层循环,生成 2*3 个Job
      {{ range $os := .osList}}
        {{ range $jdk := $.jdkVersionList}}
        {{ $os }}_JDK{{ $jdk }}_job:
                   name: 测试-{{ $os }}-JDK{{ $jdk }}
                   my_step:
                     name: 执行命令
                     step: Command
                     with:
                       run: |
                         echo 'test on {{ $os }}-JDK{{ $jdk }}"
        {{ end }}
        {{ end }}

O efeito de execução do pipeline é o seguinte:

Cenário 2: Crie e implante dinamicamente vários aplicativos sob demanda

No cenário de lançamento conjunto de vários aplicativos em um sistema, uma modificação dos requisitos de negócios envolverá apenas alguns aplicativos no sistema, e cada lançamento apenas acionará a construção e a implantação de alguns aplicativos. Nesse caso, o uso da configuração de arquivo YAML estático não pode atender à geração dinâmica de cenários de trabalho de construção e implantação de aplicativos.

Depois que a sintaxe do modelo é introduzida, o aplicativo pode ser extraído em variáveis ​​e a sintaxe do intervalo pode ser usada para percorrer a configuração. De acordo com a entrada da lista de aplicativos durante o tempo de execução do pipeline, várias tarefas de construção e implantação de aplicativos podem ser geradas dinamicamente. demanda.

Conforme mostrado no exemplo a seguir, configuramos várias fontes de código de aplicativo, várias tarefas de construção de aplicativos e várias tarefas de implantação de aplicativos de acordo com o aplicativo. Vários aplicativos podem ser determinados dinamicamente para serem implantados com base na variável de ambiente de entrada de tempo de execução appnames.

# template=true
variables:
  - key: appnames
    type: Object
    value: ["app1", "app2", "app3"]

sources:
  {{ range $app := .appnames }}
  repo_{{ $app }}:
    type: codeup
    name: 代码源名称-{{ $app }}
    endpoint: https://yunxiao-test.devops.aliyun.com/codeup/07880db8-fd8d-4769-81e5-04093aaf7b2b/c{{ $app }}.git
    branch: master
    certificate:
      type: serviceConnection
      serviceConnection: wwnbrqpihykbiko4
  {{ end }}

defaultWorkspace: repo_app1

stages:
  build_stage:
    name: 构建阶段
    jobs:
      {{ range $app := .appnames }}
      build_job_{{ $app }}:
        name: 构建任务-{{ $app }}
        sourceOption: ['repo_{{ $app }}']
        steps:
          build_{{ $app }}:
            step: Command
            name: 构建-{{ $app }}
            with:
              run: "echo start build {{ $app }}\n"
      {{ end }}
  deploy_stage:
    name: 部署阶段
    jobs:
      {{ range $app := .appnames }}
      deploy_job_{{ $app }}:
        name: 部署任务-{{ $app }}
        needs: build_stage.build_job_{{ $app }}
        steps:
          build_{{ $app }}:
            step: Command
            name: 部署-{{ $app }}
            with:
              run: "echo start deploy {{ $app }}\n"
      {{ end }}

O efeito de execução do pipeline é o seguinte:

Como usar a sintaxe do modelo em Yunxiao

1) Entre na página de edição YAML do pipeline e mude para o modo de modelo comentando #template=true na primeira linha.

2) Depois de mudar para o modo de modelo, o pipeline de definição de linguagem de modelo {{ }} é suportado.

  • Use variáveis ​​de ambiente definidas por variáveis ​​como parâmetros de renderização: Use variáveis ​​de ambiente definidas por variáveis ​​como parâmetros de renderização de modelo, suportando vários tipos de variáveis ​​de ambiente String, Number, Boolean e Object. Suporta a substituição de variáveis ​​de ambiente com o mesmo nome em tempo de execução.

  • Siga a sintaxe do modelo go nativo: O modo de modelo de pipeline do Yunxiao Flow segue a sintaxe do modelo go nativo. Para obter detalhes, consulte: https://pkg.go.dev/text/template. A sintaxe comumente usada é a seguinte:

{{/* a comment */}}  // 注释
{{pipeline}}         // 引用
{{if pipeline}} T1 {{end}}   // 条件判断
{{if pipeline}} T1 {{else}} T0 {{end}}
{{if pipeline}} T1 {{else if pipeline}} T0 {{end}}
{{range pipeline}} T1 {{end}}          // 循环
{{range pipeline}} T1 {{else}} T0 {{end}}
{{break}}
{{continue}}
  • Além disso, a sintaxe do modelo de pipeline Yunxiao Flow oferece suporte às seguintes funções de extensão para atender a cenários de orquestração mais flexíveis.
# add:整数相加函数,参数接收两个及两个以上 Integer
{{ add 1 2 }} // 示例返回:3
{{ add 1 2 2 }} // 示例返回:5

# addf:浮点数相加函数,参数接收两个及两个以上 Number
{{ add 1.2 2.3 }} // 示例返回:3.5
{{ add 1.2 2.3 5 }} // 示例返回:8.5

# replace:字符串替换函数,接收三个参数:源字符串、待替换字符串、替换为字符串
{{ "Hallo World" | replace "a" "e" }}  // 示例返回:Hello World
{{ "I Am Henry VIII" | replace " " "-" }}  // 示例返回:I-Am-Henry-VIII

3) Configure variáveis ​​de ambiente quando o pipeline estiver em execução, que é usado para renderizar YAML dinamicamente antes da execução do pipeline.

4) Clique em "Modo de visualização" para oferecer suporte ao uso de variáveis ​​para pré-renderização para verificar se o pipeline atende às expectativas.

5) Após confirmar que está correto, salve e acione a execução do pipeline. Você pode modificar variáveis ​​de tempo de execução conforme necessário, renderizar dinamicamente o YAML do pipeline com base em variáveis ​​de ambiente de tempo de execução e gerar trabalhos dinamicamente. Se a versão do JDK for modificada para ["17", "21"] e o sistema operacional permanecer ["linux", "windows"], 4 jobs serão gerados dinamicamente.

Clique aqui para usar o Cloud Effect Pipeline Flow gratuitamente ou saiba mais.

A equipe de IA da Microsoft na China fez as malas e foi para os Estados Unidos, envolvendo centenas de pessoas. Quanta receita um projeto de código aberto desconhecido pode trazer? A Huawei anunciou oficialmente que a posição da Universidade de Ciência e Tecnologia de Yu Chengdong foi ajustada. abriu oficialmente o acesso à rede externa Os fraudadores usaram o TeamViewer para transferir 3,98 milhões! O que os fornecedores de desktop remoto devem fazer? A primeira biblioteca de visualização front-end e fundador do conhecido projeto de código aberto ECharts do Baidu - um ex-funcionário de uma conhecida empresa de código aberto que "foi para o mar" deu a notícia: Depois de ser desafiado por seus subordinados, o técnico O líder ficou furioso e rude e demitiu a funcionária grávida. A OpenAI considerou permitir que a IA gerasse conteúdo pornográfico. A Microsoft relatou à The Rust Foundation doou 1 milhão de dólares americanos. ?
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/u/3874284/blog/11141855
Recomendado
Clasificación