Integração Contínua / Entrega Contínua (CI/CD) é uma metodologia de desenvolvimento de software. Estou pegando o termo e aplicando a dados, não software, especificamente dados que mudam incessantemente ao longo do tempo e que você precisa integrar em seus sistemas de registro, bem, continuamente!
Sempre disposto a mergulhar de cabeça, meu exemplo é pegar um feed das posições dos veículos de transporte público (acessado via uma REST API) que atualiza a cada 30 segundos e enviar os dados para um serviço de feição hospedado em um portal ArcGIS Enterprise e também para uma tabela espacialmente habilitada no Snowflake. Usarei uma ferramenta web para o processamento, pois alta disponibilidade é obviamente recomendada.
Aqui estão as posições de ônibus, trem e balsa há alguns momentos (início da manhã de sábado no horário local) em Auckland, NZ.
Posições de ônibus, trem e balsa em Auckland
Provavelmente estou trabalhando no extremo da frequência contínua de integração em massa de dados, espero que a grande maioria das integrações seja realizada em intervalos de horas ou dias, mas pelo menos você saberá o que pode ser alcançado.
Tenha paciência enquanto me divirto com meu cenário de integração 😉.
Digamos que eu trabalho na Fako (um nome fictício), que resolveu o problema do primeiro quilômetro/último quilômetro do comércio eletrônico. A Fako identificou que redes de transporte são muito eficientes para reunir pessoas e bens de varejo, comprando ou vendendo, quando os passageiros são compradores e vendedores. Em parceria com operadores de transporte removemos algumas fileiras de assentos em cada veículo, ambos os lados do corredor, e substituímos por grades de armários inteligentes para armazenamento aos quais as compras pela internet podem ser 'entregues' por nossos estivadores em nossos depósitos co-localizados com terminais de transporte. Os compradores fazem pedidos em qualquer site para entrega em um dia e rota específicos, os vendedores vendem em nosso site e transferimos itens para rotas em qualquer lugar da rede. Somos transitários. O aplicativo móvel da Fako permite que os clientes usem seu telefone para destrancar o armário onde seu item está a qualquer momento durante a viagem. Alguns armários são refrigerados, temos nossa própria linha de kits de refeição. Um recurso muito popular do nosso aplicativo móvel permite que passageiros façam lances em leilões por itens abandonados. A Fako paga aos operadores de transporte o equivalente a uma tarifa por passageiro por item, aumentando muito sua efetiva lotação. A Fako não precisa comprar uma frota de veículos de entrega e os operadores estão obtendo receita aumentada. Os negócios estão prosperando!
Os sistemas back-end da Fako rodam no Snowflake. Para fazer tudo funcionar, a Fako precisa manter o status da rede continuamente como objetos espacialmente habilitados no Snowflake. Vamos ver como!
Primeiro o jeito chato, para o qual acabei me desqualificando escolhendo uma frequência que tarefas agendadas do Windows não suportam, seria copiar um workspace Spatial ETL source fmw para meu servidor Data Interoperability e configurar uma tarefa agendada baseada na linha de comando documentada em um arquivo log de uma execução manual como usuário arcgis:
Linha de comando para executar este workspace:
"C:\Program Files\ESRI\Data Interoperability\Data Interoperability AO11\fme.exe" C:\Users\arcgis\Desktop\ContinuousIntegration\VehiclePositions2Snowflake.fmw
Você deve considerar cuidadosamente esta opção para sua situação, ela é robusta e simples.
Agora o jeito não chato. Como disse, me empurrei nessa direção trabalhando com dados que atualizam em massa com alta frequência. Eu crio uma ferramenta web que realiza a integração e então se chama novamente após esperar os dados fonte atualizarem.
Uau, uma ferramenta web que se chama sozinha, sem webhook e sem agendamento? É incrivelmente simples (possivelmente também só loucura).
Fiz duas ferramentas Spatial ETL, uma real e outra dummy que não faz nada, mas tem o mesmo nome e parâmetros (nenhum neste caso).

Compartilhei um item do histórico da versão dummy do VehiclePositions2Snowflake como ferramenta web e gravei a URL submitJob. É importante que a ferramenta web seja assíncrona para que quando for chamada não bloqueie o workspace esperando uma resposta:
https://dev99999.esri.com/server/rest/services/VehiclePositions2Snowflake/GPServer/VehiclePositions2Snowflake/submitJob
Depois edite a ferramenta ETL real, na etapa HTTP final, para chamar a URL submitJob. Execute a ferramenta e a partir do seu item do histórico sobrescreva a ferramenta web dummy.
Vou deixar você explorar a ferramenta por conta própria mas basicamente o fluxo superior busca os dados dos veículos e sincroniza com o portal e Snowflake e o fluxo inferior espera isso e 30 segundos se passarem antes de fazer a chamada HTTP.
A Ferramenta ETL Auto Integrante
Então basta executar a ferramenta web manualmente uma vez e você está pronto para começar, ela vai repetir infinitamente. Estou aqui atualizando meu mapa Pro (sem cache na camada do serviço de feição) vendo a frota de transporte se mover.
No Snowflake meus dados também estão atualizando:
Console Snowflake
Voltando aos detalhes chatos, não esqueça que ao publicar ferramentas Spatial ETL como ferramentas web Data Interoperability deve estar instalado e licenciado em cada servidor hospedeiro das ferramentas e ao usar conexões web ou credenciais de banco como estou fazendo aqui, vá ao diálogo Ferramentas>Opções FME e exporte as credenciais necessárias (clique direito para abrir o menu) para arquivos XML, coloque-os no seu servidor e importe-os no ambiente Workbench como proprietário do serviço arcgis. Se executar manualmente um workspace no servidor talvez precise alterar também o ambiente Python. Por fim, embora o download do blog tenha um arquivo FMW a ferramenta publicada no seu servidor deve ter uma fonte embutida.
Agora isso foi divertido!