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.

En este ejemplo se presupone que ha creado un nuevo conector mediante el procedimiento descrito en Cree un nuevo conector utilizando el servicio Ingest. En este ejemplo creamos una nueva canalización, cuyo descriptor está en el archivo pipes/new/auth.xfield.json.
{
    "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.
  1. Copie el archivo Ingest-pipeline.sra en un directorio de trabajo del entorno de producción.
  2. Extraiga el archivo Ingest-pipeline.sra.
  3. Copie los archivos de /new en
    profile/apps/search-ingest.ear/search-ingest.war/WEB-INF/classes/deployments/commerce
  4. Copie los archivos de /updates en
    /profile/apps/search-ingest.ear/search-ingest.war/WEB-INF/classes/deployments/customization
  5. Compile el contenedor personalizado.
  6. Después de compilar el contenedor, envíelo al Registro e impleméntelo.