steps - jenkins pipeline tutorial español
Plantilla de tubería Jenkins (1)
Un enfoque que nos funciona bien es colocar partes de la tubería (las que todos los proyectos tienen en común) o incluso toda la tubería en una biblioteca compartida de Jenkins .
Ejemplo
El siguiente script ( template.groovy
) se define como variable global en una biblioteca compartida de Jenkins. El método crea una nueva canalización declarativa (también funciona para la sintaxis de la línea de comandos). Todas las propiedades específicas del proyecto se proporcionan a través del mapa templateParams
.
/**
* Defines a pipeline template (as a sample with one job parameter
* that should be common for all pipelines)
*/
def createMyStandardDeclarativePipeline(Map templateParams) {
pipeline {
agent any
parameters {
string(name: ''myInput'', description: ''Some pipeline parameters'')
}
stages {
stage(''Stage one'') {
steps {
script {
echo "Parameter from template creation: " + templateParams.someParam
}
}
}
stage(''Stage two'') {
steps {
script {
echo "Job input parameter: " + params.myInput
}
}
}
}
}
}
Al usar esta variable global, la siguiente línea crea una canalización desde nuestra plantilla:
template.createMyStandardDeclarativePipeline(someParam: ''myParam'')
Conclusión
Este concepto facilita la definición de plantillas de tuberías y su reutilización en varios proyectos.
Aplicado en el ejemplo dado en la pregunta, puede crear una canalización de entrega para un proyecto con un simple trazador de líneas:
template.createStandardDeliveryPipeline(serviceName: ''myService'',
testEnv: ''192.168.99.104'',
productionEnv: ''192.168.99.105'')
Actualización (30-09-2017): Declarar un bloque de canalización en una biblioteca compartida ahora es oficialmente compatible con Declarative Pipelines versión 1.2. Ver: https://jenkins.io/doc/book/pipeline/shared-libraries/#defining-declarative-pipelines
Actualización (06-10-2017): ahora se puede encontrar un ejemplo extendido aquí: https://jenkins.io/blog/2017/10/02/pipeline-templates-with-shared-libraries/
Tenemos varios proyectos de Java. Cada proyecto tiene su propia cartera de entrega.
Todas las tuberías tienen los siguientes pasos en común (simplificados):
- Desarrollar proyecto
- Proyecto de lanzamiento
- Implementar para probar el entorno
- Implementar en el entorno de producción
Las canalizaciones del proyecto solo difieren en las propiedades específicas del proyecto, como los nombres de los servicios o las direcciones IP del entorno de prueba y producción.
Las preguntas son: ¿cómo podríamos evitar la repetición que todos los proyectos tienen en común? ¿Jenkins "Pipeline as code" proporciona algo así como las plantillas de tuberías?
Podría imaginar que una plantilla ahorraría muchos códigos / pasos redundantes en nuestros proyectos. Por lo tanto, sería mucho más fácil configurar un nuevo proyecto, mantener la tubería, mantener la tubería sincronizada ...