Autor: Mu Yan
¿Encuentra los siguientes problemas al configurar la canalización YAML?
- Cuando se ejecutan escenarios de tareas similares en lotes en una sola canalización, es necesario definir varios trabajos con lógica similar en YAML. Cuanto más trabajos haya, más larga será la configuración de YAML de la canalización, más código repetido en YAML y mayor reutilización del código. es bajo y la legibilidad es pobre;
- Los administradores administran múltiples canalizaciones de manera unificada. La arquitectura de tecnología de aplicaciones múltiples es similar al proceso de I + D. Cuando solo unos pocos parámetros de construcción e implementación son inconsistentes, cada canalización necesita modificar los parámetros diferenciados de forma independiente, lo que resulta en altos costos de configuración. cada canalización se configura de forma independiente, no se puede lograr una gestión y control unificados, mala capacidad de mantenimiento;
- La canalización YAML es un archivo estático y la lógica de ejecución de la tarea se corrige cuando se guarda la canalización. Sin embargo, el proceso de ejecución de la canalización de algunos escenarios de I+D debe aclararse en tiempo de ejecución y no se puede configurar de antemano. La canalización ordinaria YAML no puede satisfacer este escenario.
En este sentido, Yunxiao Flow pipeline YAML introduce la sintaxis de plantilla, que admite el uso de lenguajes de plantilla para representar dinámicamente el pipeline YAML, que puede cumplir con los escenarios de configuración por lotes de múltiples trabajos con la misma o similar lógica, cumplir con la generación dinámica. escenarios de múltiples trabajos bajo demanda y ayuda a reducir la duplicación del código YAML de canalización, orquestando de manera flexible la multitarea.
¿Qué es la sintaxis de la plantilla?
La plantilla es un lenguaje de plantilla que se utiliza para definir y representar texto. Se puede combinar con variables, declaraciones condicionales, estructuras de bucle, etc., de modo que los archivos YAML puedan generar diversos resultados de configuración basados en el contexto o fuentes de datos externas. La representación dinámica genera YAML. en tiempo de ejecución. .
Cloud Effect Pipeline presenta el motor de plantilla y template=true
especifica el modo de plantilla a través de la primera línea de comentarios YAML en la canalización. Admite el uso de {{ }}
lenguaje de plantilla definido y sigue go template
la sintaxis nativa. Admite el uso de variables
variables definidas como parámetros para el proceso. tubería de renderizado. Los escenarios típicos aplicables son los siguientes.
Escenarios de uso principales de sintaxis de plantilla
Escenario 1: escenario de prueba de compatibilidad de versiones de múltiples sistemas operativos y múltiples SDK
En algunos escenarios de prueba de compatibilidad, si necesita probar su código en n sistemas operativos diferentes y m versiones de SDK diferentes, entonces necesita definir n * m trabajos en su canalización. La lógica de ejecución de cada trabajo es en realidad la misma. En este escenario, cuando hay muchos escenarios que requieren pruebas de compatibilidad, la canalización YAML será muy larga, con mucho código repetido, lo que dificultará su mantenimiento y cuando se modifique la lógica de ejecución del trabajo, será necesario modificarla; n*m veces.
Después de introducir la sintaxis de la plantilla, los escenarios de compatibilidad se pueden extraer en variables y la sintaxis de rango se puede usar para recorrer los escenarios y generar múltiples trabajos en lotes, lo que reduce en gran medida la cantidad de código YAML cuando se modifica la lógica de ejecución del trabajo. sólo se necesita una modificación.
Por ejemplo, en el siguiente código, recorremos 2 sistemas operativos ["linux", "windows"] y 3 versiones de JDK ["10", "11", "17"], usando el bucle de rango de la plantilla, es muy Convenientemente se generan 6 trabajos con la misma 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 }}
El efecto de funcionamiento de la tubería es el siguiente:
Escenario 2: crear e implementar dinámicamente múltiples aplicaciones bajo demanda
En el escenario del lanzamiento conjunto de múltiples aplicaciones bajo un sistema, una modificación de los requisitos comerciales solo involucrará algunas aplicaciones bajo el sistema, y cada lanzamiento solo desencadena la construcción e implementación de algunas aplicaciones. En este caso, el uso de la configuración de archivos YAML estáticos no puede cumplir con la generación dinámica de escenarios de trabajo de implementación y construcción de aplicaciones.
Después de introducir la sintaxis de la plantilla, la aplicación se puede extraer en variables y la sintaxis de rango se puede usar para recorrer la configuración de acuerdo con la entrada de la lista de aplicaciones durante el tiempo de ejecución de la canalización, se pueden generar dinámicamente múltiples tareas de construcción e implementación de aplicaciones. demanda.
Como se muestra en el siguiente ejemplo, hemos configurado múltiples fuentes de código de aplicación, múltiples tareas de creación de aplicaciones y múltiples tareas de implementación de aplicaciones de acuerdo con la aplicación. Se puede determinar dinámicamente que varias aplicaciones se implementarán en función de los nombres de las variables del entorno de entrada del tiempo de ejecución.
# 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 }}
El efecto de funcionamiento de la tubería es el siguiente:
Cómo usar la sintaxis de plantilla en Yunxiao
1) Ingrese a la página de edición YAML de la canalización y cambie al modo de plantilla comentando #template=true en la primera línea.
2) Después de cambiar al modo de plantilla, se admite la canalización de definición del lenguaje de plantilla {{ }}.
-
Utilice variables de entorno definidas por variables como parámetros de representación: utilice variables de entorno definidas por variables como parámetros de representación de plantilla, admitiendo múltiples tipos de variables de entorno de cadena, número, booleano y objeto. Admite la sobrescritura de variables de entorno con el mismo nombre en tiempo de ejecución.
-
Siga la sintaxis de la plantilla go nativa: el modo de plantilla de canalización de Yunxiao Flow sigue la sintaxis de la plantilla go nativa. Para obtener más detalles, consulte: https://pkg.go.dev/text/template. La sintaxis comúnmente utilizada es la siguiente:
{{/* 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}}
- Además, la sintaxis de la plantilla de canalización de Yunxiao Flow admite las siguientes funciones de extensión para cumplir con escenarios de orquestación más flexibles.
# 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 las variables de entorno cuando se ejecuta la canalización, que se utiliza para representar YAML dinámicamente antes de que se ejecute la canalización.
4) Haga clic en "Modo de vista previa" para admitir el uso de variables de renderizado previo para verificar si la canalización cumple con las expectativas.
5) Después de confirmar que es correcto, guarde y active la ejecución de la canalización. Puede modificar las variables de tiempo de ejecución según sea necesario, representar dinámicamente la canalización YAML en función de las variables del entorno de ejecución y generar trabajos dinámicamente. Si la versión de JDK se modifica a ["17", "21"] y el sistema operativo permanece ["linux", "windows"], se generarán dinámicamente 4 trabajos.
Haga clic aquí para utilizar Cloud Effect Pipeline Flow de forma gratuita u obtener más información.
El equipo de inteligencia artificial de China de Microsoft empacó colectivamente y se fue a los Estados Unidos, involucrando a cientos de personas. ¿Cuántos ingresos puede generar un proyecto desconocido de código abierto? Huawei anunció oficialmente que la posición de Yu Chengdong se ajustó en la estación espejo de código abierto de la Universidad de Ciencia y Tecnología de Huazhong. ¡Los estafadores abrieron oficialmente el acceso a la red externa y utilizaron TeamViewer para transferir 3,98 millones! ¿Qué deberían hacer los proveedores de escritorio remoto? La primera biblioteca de visualización front-end y fundador del conocido proyecto de código abierto de Baidu, ECharts, un ex empleado de una conocida empresa de código abierto que "se fue al mar" dio la noticia: después de ser desafiado por sus subordinados, el técnico El líder se puso furioso y grosero y despidió a la empleada embarazada. OpenAI consideró permitir que la IA genere contenido pornográfico. Microsoft informó a The Rust Foundation que donó 1 millón de dólares estadounidenses. Por favor, dígame cuál es el papel de time.sleep(6) aquí. ?