Ejemplo: desplegar un conector para CI/CD
Para desplegar personalizaciones de conector para utilizarlas en una canalización de Integración continua/Entrega continua (CI/CD), empaquete los cambios mediante una estructura de datos estandarizada.
{
"name": "auth.xfields",
"description": "This is the connector used for the custom fields to ingest",
"pipes": [
{
"name": "_Template-DatabasePagingETL",
"properties": [
{
"name": "Database Driver Location(s)",
"value": "${AUTH_JDBC_DRIVER_LOCATION}",
"scope": {
"name": "Database Connection Pool",
"type": "CONTROLLER_SERVICE"
}
},
{
"name": "Database Driver Class Name ",
"value": "${AUTH_JDBC_DRIVER_CLASSNAME}",
"scope": {
"name": "Database Connection Pool",
"type": "CONTROLLER_SERVICE"
}
},
{
"name": "Database Connection URL",
"value": "${AUTH_JDBC_URL}",
"scope": {
"name": "Database Connection Pool",
"type": "CONTROLLER_SERVICE"
}
},
{
"name": "Database User",
"value": "${AUTH_JDBC_USER_NAME}",
"scope": {
"name": "Database Connection Pool",
"type": "CONTROLLER_SERVICE"
}
},
{
"name": "Password",
"value": "${AUTH_JDBC_USER_PASSWORD}",
"scope": {
"name": "Database Connection Pool",
"type": "CONTROLLER_SERVICE"
}
}
]
},
{
"name": "Terminal",
"label": "Terminal"
}
]
}
Nuevos archivos
Después de crear la nueva canalización, realice dos actualizaciones en las propiedades de la canalización. Esto se hace con los archivos pipes/updates/1_auth.xfields y pipes/updates/2_auth.xfields.
- 1_auth.xfields:
{ "name": "auth.xfields", "pipes": [ { "name": "SCROLL SQL", "properties": [ { "name": "properties.ingest.database.sql", "value": " SELECT field1, field2, catgroup_id FROM catgroup ${paging.prefix} ${param.offset} ${paging.link} ${param.pageSize} ${paging.suffix} ", "scope": { "name": "SCROLL SQL.Define custom SQL", "type": "PROCESSOR" } } ] } ] }
- 2_auth.xfields:
{ "name": "auth.xfields", "pipes": [ { "name": "Map Index Fields From Database", "properties": [ { "name": "FIELD1", "value": "custom.x_field1.raw, custom.x_field1.normalized", "scope": { "name": "SCROLL SQL.Transform Document - Map Index Fields From Database", "type": "PROCESSOR" } "name": "FIELD2", "value": "custom.x_field2.raw, custom.x_field2.normalized", "scope": { "name": "SCROLL SQL.Transform Document - Map Index Fields From Database", "type": "PROCESSOR" } } ] } ] }
Los nuevos archivos se guardan en un repositorio de archivos apropiado, como Git. La estructura en este caso es una jerarquía simple que se encuentra bajo las canalizaciones del directorio raíz.
pipes
│
├───new
│ auth.xfields.json
│
└───updates
1_auth.xfields
2_auth.xfields
Para obtener más información sobre estos archivos, consulte Configurar el conector o la canalización en NiFi.
Build
Durante la etapa de compilación, extraiga todos los recursos necesarios del repositorio de archivos y empaquete los archivos en un único archivo mediante el enfoque descrito en Ejemplo de estructura de archivos .sra para la automatización de CI/CD. La estructura del archivo .sra puede duplicar directamente el repositorio de archivos, pero también puede que no; cuando el objetivo de la estructura del repositorio es organizar los archivos para el desarrollo de software, la finalidad de la estructura del archivo es hacer que los recursos necesarios sean lo más portables posible. En este ejemplo se incluye un directorio META-INF que contiene información adicional sobre el contenido del archivo.
Ingest-pipeline.sra
├───META-INF
├───pipes
├───new
│ auth.xfield.json
└───updates
1_auth.xfield.json
2_auth.xfield.json
Una vez recopilados los archivos en el archivo .sra, copie el archivo en el directorio que se incluirá dentro del despliegue. Desde esta ubicación, compilará un nuevo contenedor, desplegará los recursos y, a continuación, insertará el contenedor personalizado en un registro de contenedores.
Compilación de una imagen personalizada
Ahora ya puede compilar una nueva imagen de Ingest con su código personalizado.
- Copie el archivo Ingest-pipeline.sra en un directorio de trabajo del entorno de producción.
- Extraiga el archivo Ingest-pipeline.sra.
- Copie los archivos de /new en
profile/apps/search-ingest.ear/search-ingest.war/WEB-INF/classes/deployments/commerce
- Copie los archivos de /updates en
/profile/apps/search-ingest.ear/search-ingest.war/WEB-INF/classes/deployments/customization
- Compile el contenedor personalizado.
- Después de compilar el contenedor, envíelo al Registro e impleméntelo.