Pesquisar

Limpar filtro
Artigo
Eduard Lebedyuk · Nov. 22, 2021

Entrega contínua de sua solução InterSystems usando GitLab – Parte I: Git

Todo mundo tem um ambiente de teste. Algumas pessoas têm a sorte de ter um ambiente totalmente separado para executar a produção. -- Desconhecido . Nesta série de artigos, gostaria de apresentar e discutir várias abordagens possíveis para o desenvolvimento de software com as tecnologias InterSystems e GitLab. Vou cobrir tópicos como: * Git Básico * Fluxo Git (processo de desenvolvimento) * Instalação do GitLab * Fluxo de Trabalho do GitLab * GitLab CI/CD * CI/CD com contêineres Esta primeira parte trata do pilar do desenvolvimento de software moderno - sistema de controle de versão Git e vários fluxos Git. ## Git Básico Embora o tópico principal que iremos discutir seja o desenvolvimento de software em geral e como o GitLab pode nos capacitar nesse esforço, o Git, ou melhor, os vários [conceitos de alto nível](https://en.wikipedia.org/wiki/Git#Characteristics) subjacentes no design do Git, são importantes para o melhor entendimento de conceitos posteriores. Dito isso, o **Git** é um sistema de controle de versão, baseado nessas ideias (existem [muitas outras](en.wikipedia.org/wiki/Git#Characteristics), essas são as mais importantes): * **Desenvolvimento não linear** significa que enquanto nosso software é lançado consequentemente da versão 1 para a 2 para a 3, sob a mesa a mudança da versão 1 para a 2 é feita em paralelo - vários desenvolvedores desenvolvem uma série de recursos/correções de bugs simultaneamente. * **Desenvolvimento distribuído** significa que o desenvolvedor é independente de um servidor central ou de outros desenvolvedores e pode desenvolver facilmente em seu próprio ambiente. * **Fusão** - as duas ideias anteriores nos levam à situação em que muitas versões diferentes da verdade existem simultaneamente e precisamos uni-las de volta em um estado completo. Agora, não estou dizendo que Git inventou esses conceitos. Não. Em vez disso, o Git os tornou fáceis e populares e isso, juntamente com várias inovações relacionadas, ou seja,  infraestrutura como código/conteinerização mudou o desenvolvimento de software. ### Termos básicos do Git **Repositório** é um projeto que armazena dados e metainformações sobre os dados. * O repositório "físico" é um diretório em um disco. * O repositório armazena arquivos e diretórios. * O repositório também armazena um histórico completo de alterações para cada arquivo. O repositório pode ser armazenado: * Localmente, em seu próprio computador * Remotamente em um servidor remoto Mas não há nenhuma diferença particular entre repositórios locais e remotos do ponto de vista do git. **Commit** é um estado fixo do repositório. Obviamente, se cada commit armazenasse o estado completo do repositório, nosso repositório cresceria muito rapidamente. É por isso que um commit armazena um **diff** que é uma diferença entre o commit atual e seu **commit pai**. Commits diferentes podem ter um número diferente de pais: * 0 - o primeiro commit no repositório não tem pais. * 1 - conforme o habitual - nosso commit mudou algo no repositório como era durante o commit pai * 2 - quando temos dois estados diferentes do repositório, podemos uni-los em um novo estado. E esse estado e esse commit teriam 2 pais. * >2 - pode acontecer quando unimos mais de 2 estados diferentes do repositório em um novo estado. Não seria particularmente relevante para nossa discussão, mas existe. Agora, para um pai, cada commit diferente é chamado de **commit filho**. Cada commit pai pode ter qualquer número de commits filhos. **Branch** é uma referência (ou ponteiro) para um commit.  Veja como funciona: ![](/sites/default/files/inline/images/risunok1_0.png) Nesta imagem, podemos ver o repositório com dois commits (círculos cinza), o segundo é o head do branch master. Depois de adicionar mais commits, nosso repositório começa a ficar assim: ![](/sites/default/files/inline/images/risunok2.png) Esse é o caso mais simples. Um desenvolvedor trabalha em uma mudança de cada vez. No entanto, normalmente, existem muitos desenvolvedores trabalhando simultaneamente em diferentes recursos e precisamos de uma **árvore de commit** para mostrar o que está acontecendo em nosso repositório. ### Árvore de commit Vamos começar do mesmo ponto de partida. Aqui está o repositório com dois commits: ![](/sites/default/files/inline/images/risunok1_1.png) Mas agora, dois desenvolvedores estão trabalhando ao mesmo tempo e para não interferir um no outro, eles trabalham em branches separados: ![](/sites/default/files/inline/images/risunok3.png) Depois de um tempo, eles precisam unir as alterações feitas e para isso eles criam uma **solicitação de mesclagem (merge)** (também chamada de **pull request**) - que é exatamente o que parece - é uma solicitação para unir dois estados diferentes do repositório (no nosso caso, queremos mesclar o develop branch no master branch) em um novo estado. Depois de ser devidamente revisado e aprovado, nosso repositório fica assim: ![](/sites/default/files/inline/images/risunok4.png) E o desenvolvimento continua: ![](/sites/default/files/inline/images/risunok5.png) ### Resumo - Git Básico Conceitos principais: * **Git** é um sistema de controle de versão distribuído não linear. * **Repositório** armazena dados e metainformações sobre os dados. * **Commit** é um estado fixo do repositório. * **Branch** é uma referência para um commit.  * **Solicitação de mesclagem** (também chamada de **pull request**) - é uma solicitação para unir dois estados diferentes do repositório em um novo estado. Se você quiser ler mais sobre o Git, existem [livros disponíveis](https://git-scm.com/book/en/v2). ## Fluxos Git Agora que o leitor está familiarizado com os termos e conceitos básicos do Git, vamos falar sobre como a parte do desenvolvimento do ciclo de vida do software pode ser gerenciada usando o Git.  Existem várias práticas (chamadas  de fluxos) que descrevem o processo de desenvolvimento usando Git, mas vamos falar sobre duas delas: * Fluxo do GitHub * Fluxo do GitLab ### Fluxo do GitHub O fluxo do GitHub é tão fácil quanto parece. Aqui está: 1. Crie um branch (ramificação) do repositório. 2. Commit suas alterações para seu novo branch 3. Envie um pull request do seu branch com as alterações propostas para iniciar uma discussão. 4. Commit mais alterações em seu branch conforme necessário. Seu pull request será atualizado automaticamente. 5. Mescle o pull request assim que o branch estiver pronto para ser mesclado. E existem várias regras que devemos seguir: * master branch é sempre implantável (e funcionando!) * Não há desenvolvimento indo diretamente para o master branch * O desenvolvimento está acontecendo nos branches de recursos * master == ambiente\** de produção\* * Você precisa implantar na produção o mais rápido possível * * Não confunda com "Produções Ensemble", aqui "Produção" significa SISTEMA EM PRODUÇÃO. ** Ambiente é um local configurado onde seu código é executado - pode ser um servidor, uma VM, até mesmo um contêiner. Veja como funciona: ![](/sites/default/files/inline/images/risunok6.png) Você pode ler mais sobre o fluxo do GitHub [aqui](https://help.github.com/articles/github-flow/). Também há um [guia ilustrado](https://guides.github.com/introduction/flow/). O fluxo do GitHub é bom para pequenos projetos e para testes se você está começando com os fluxos do Git. No entanto, o GitHub o usa, portanto, também pode ser viável em projetos grandes. ### Fluxo do GitLab Se você não estiver pronto para implantar na produção imediatamente, o fluxo do GitLab oferece um fluxo do GitHub + ambientes. É assim que funciona - você desenvolve em branches de recursos, como acima, mescla (merge) no master, como acima, mas aqui está uma diferença: o master é igual apenas no ambiente de teste. Além disso, você tem "Branches de ambiente" que estão vinculados a vários outros ambientes que você possa ter. Normalmente, existem três ambientes (você pode criar mais se precisar): * Ambiente de teste == master branch * Ambiente de pré-produção == preprod branch * Ambiente de produção == prod branch O código que chega em um dos branches do ambiente deve ser movido para o ambiente correspondente imediatamente, isso pode ser feito: * Automaticamente (cobriremos isso nas partes 2 e 3) * Parcialmente automático (igual ao automaticamente, exceto que um botão que autoriza a implantação deve ser pressionado) * Manualmente Todo o processo é assim: 1. O recurso é desenvolvido no branch de recursos. 2. O branch de recurso é revisado e mesclado no master branch. 3. Depois de um tempo (vários recursos mesclados), o master é mesclado com o preprod 4. Depois de um tempo (teste do usuário, etc.), o preprod é mesclado com o prod   5. Enquanto estávamos mesclando e testando, vários novos recursos foram desenvolvidos e mesclados no master, então vá para parte 3. Veja como funciona: ![](/sites/default/files/inline/images/risunok7.png) Você pode ler mais sobre o fluxo do GitLab [aqui](https://docs.gitlab.com/ce/workflow/gitlab_flow.html). ## Conclusão * Git ****é um sistema de controle de versão distribuído não linear. * O fluxo Git pode ser usado como uma diretriz para o ciclo de desenvolvimento de software; existem vários que você pode escolher. ## Links * [Livro Git](git-scm.com/book/en/v2) * [Fluxo do GitHub](help.github.com/articles/github-flow/) * [Fluxo do GitLab](docs.gitlab.com/ce/workflow/gitlab_flow.html) * [Fluxo Driessen](http://nvie.com/posts/a-successful-git-branching-model/) (fluxo mais abrangente, para comparação) * [Código para este artigo](https://github.com/eduard93/GitGraph-samples) ## Questões para discussão * Você usa um fluxo git? Qual? * Quantos ambientes você tem para um projeto padrão? ## O que vem a seguir Na próxima parte, iremos: * Instalar o GitLab. * Falar sobre alguns ajustes recomendados. * Discutir o fluxo de trabalho do GitLab (não deve ser confundido com o fluxo do GitLab). Fique ligado.
Anúncio
Jeff Fried · Mar. 29, 2021

Versões de Manutenção já se encontram disponíveis para Caché, Ensemble e InterSystems IRIS

Três novos conjuntos de versões de manutenção foram disponibilizados: Caché 2018.1.5, Ensemble 2018.1.5 e HSAP 2018.1.5 InterSystems IRIS 2019.1.2, IRIS for Health 2019.1.2 e HealthShare Health Connect 2019.1.2 InterSystems IRIS 2020.1.1, IRIS for Health 2020.1.1 e HealthShare Health Connect 2020.1.1 Os kits para instalação e os contêineres podem ser baixados na página de Distribuição de Softwares do WRC. Estas versões de manutenção contemplam várias atualizações distribuídas em um grande variedade de áreas. Para maiores informações a respeito das correções contidas nestes lançamentos, verifique a documentação para a versão em questão, onde podem ser encontrados as Notas do Lançamento, a Lista de Verificação da Atualização e uma Lista de Alterações do Lançamento, bem como a Referência de Classes e um conjunto completo de guias, referências, tutoriais e artigos. Toda a documentação está acessível através do site docs.intersystems.com. Suporte para novas plataformas também foi adicionado a estes lançamentos. Em particular, foi adicionado suporte ao Ubuntu 20.04 LTS para todos os lançamentos, suporte para o IBM AIX 7.1 e ao 7.2 para Sistema p-64 foi adicionado para a versão 2019.1.2 (e já estava disponível para 2020.1), e suporte para Linux ARM64 foi adicionado à versão 2020.1.1. Para maiores detalhes verifique o documento Plataformas Suportadas de cada lançamento. Os números que identificam os lançamentos podem ser encontrados na tabela abaixo: Versão Produto Número Identificador do Lançamento 2018.1.5 Caché e Ensemble 2018.1.5.659.0 2018.1.5 Avaliação Caché 2018.1.5.659.0su 2018.1.5 HealthShare Health Connect (HSAP) 2018.1.5HS.9056.0 2019.1.2 InterSystems IRIS 2019.1.2.718.0 2019.1.2 IRIS for Health 2019.1.2.718.0 2019.1.2 HealthShare Health Connect 2019.1.2.718.0 2020.1.1 InterSystems IRIS 2020.1.1.408.0 2020.1.1 IRIS for Health 2020.1.1.408.0 2020.1.1 HealthShare Health Connect 2020.1.1.408.0 2020.1.1 InterSystems IRIS Community 2020.1.1.408.0 2020.1.1 IRIS for Health Community 2020.1.1.408.0 2020.1.1 IRIS Studio 2020.1.1.408.0
Anúncio
Angelo Bruno Braga · Dez. 29, 2021

Concurso de Criação de Artigo Técnico InterSystems - Edição de Natal: Queremos ouvir sua opinião !!!!

Olá membros da Comunidade de Desenvolvedores, Como podemos tornar nosso concurso de artigos técnicos ainda melhor? Queremos ouvir a opinião de todos vocês: tanto dos participantes quanto dos que não conseguiram participar . Respondam por favor algumas questões e nos ajude a melhorar nosso concurso de artigos técnicos! 👉 Pesquisa de 1-min: Pesquisa do Concurso de Criação de Artigo Técnico InterSystems - Edição de Natal Ou se preferir, deixe sua opinião nos comentários desta postagem!
Anúncio
Rochael Ribeiro · Dez. 14, 2021

Prévia do InterSystems IRIS e do IRIS for Health 2021.2 foi disponibilizada

As versões de Prévia estão agora disponíveis para a versão 2021.2 do IntterSystems IRIS, IRIS for Health e IRIS Studio. Por se tratar de uma versão prévia, estamos ansiosos para aprender mais a partir de suas experiências com esta nova versão antes da disponibilização da versão Geral (General Availability) que acontecerá no próximo mês. Por favor nos dê seu feedback através da Comunidade de Desenvolvedores para que possamos construir um produto melhor juntos. InterSystems IRIS Data Platform 2021.2 torna ainda mais fácil desenvolver, implantar e gerenciar aplicações e processos de negócio que conectam dados e aplicações isoladas. A plataforma possui várias novas funcionalidades, incluindo: Melhorias para desenvolvedores de aplicações e interfaces, incluindo: Python Incorporado Produções de Interoperabilidade em Python Atualizações no Pacote de Extensão ObjectScript para o Visual Studio Code Novos Business Services e Operations foram adicionados para permitir que usuários definam e executem queries SQL com o mínimo de código customizado. Melhorias para Analytics, incluindo: Novo comando SQL LOAD que carrega eficientemente arquivos CSV e dados via JDBC para tabelas Melhorias no Adaptive Analytics Melhorias para Nuvem e tarefas Operacionais, incluindo: Novos Conectores Cloud tornam ainda mais fácil o acesso e utilização de serviços na nuvem a partir das aplicações construídas na plataforma de dados InterSystems IRIS Melhorias no IKO que aprimoram o gerenciamento dos recursos do Kubernetes Melhorias para Administradores de Sistemas e de Bases de Dados, incluindo: Rebalanceamento Online de Shards para automatizar a distribuição de dados através dos nós sem que haja a necessidade de interrupção das operações O Adaptive SQL utiliza amostragem de blocos ágil e automação para coletar estatísticas avançadas de tabelas e utiliza informações de tempo de execução para melhor planejamento de consultas As necessidades de armazenamento do InterSystems IRIS foram reduzidas com as novas configurações de compressão de streams e journal Suporte a TLS 1.3 e OpenSSL 1.1.1, utilizando bibliotecas do sistema Novo utilitário ^TRACE reporta estatísticas detalhadas de processos como as leituras e hits no cache. Maiores detalhes sobre todas estas funcionalidades podem ser encontradas na documentação do produto: InterSystems IRIS 2021.2 documentação e notas do lançamento InterSystems IRIS for Health 2021.2 documentação e notas do lançamento HealthShare Health Connect 2021.2 documentação e notas do lançamento InterSystems IRIS 2021.2 é um lançamento de Entrega Contínua (CD), que agora é disponibilizada com pacotes de instalação clássicos para todas as plataformas suportadas bem como imagens de contêineres em OCI (Open Container Initiative) também conhecidos por formato Docker contêiner. As imagens de contêineres são disponibilizadas para os mecanismos de tempo de execução compatíveis com o OCI para Linux x86-64 e Linux ARM64, como detalhado no Documento de Plataformas Suportadas. Os pacotes de instalação completos para estão disponíveis no site de download de produto no WRC. A utilização da opção "Custom" de instalação permite que os usuários escolham as opções que eles precisam, como o InterSystems Studio e o IntegratedML para ajustar a instalação a sua necessidade. As imagens de contêineres para a Enterprise Edition, a Community Edition e todos os componentes correspondentes estão disponíveis através do InterSystems Container Registry utilizando os seguintes comandos: docker pull containers.intersystems.com/intersystems/iris:2021.2.0.617.0 docker pull containers.intersystems.com/intersystems/iris-ml:2021.2.0.617.0 docker pull containers.intersystems.com/intersystems/irishealth:2021.2.0.617.0 docker pull containers.intersystems.com/intersystems/irishealth-ml:2021.2.0.617.0 Para uma lista completa das imagens disponíveis favor verificar a documentação ICR. De forma alternativa, as versões tarball de todas as imagens de contêiner são disponibilizadas através do site de download de prévias do WRC. O número de referência deste lençamento é 2021.2.0.617.0.
Anúncio
Angelo Bruno Braga · Mar. 7, 2022

O que você mais curte na tecnologia InterSystems ? Escolha um tópico, prepare seu Português e mãos a obra !!!!!

Olá Desenvolvedores, Estamos preparando com muito carinho nosso primeiro 🏆Concurso de Artigos Técnicos em Português da InterSystems 🏆. Como o concurso será lançado oficialmente na semana que vem, aproveitem esta semana para escolher seu tópico ou, se você é novo na tecnologia InterSystems, aproveite para conhecer um pouco mais sobre a tecnologia neste período para poder participar ! Sem querer dar spoilers .... Além do concurso ser em nossa língua nativa, serão várias novidades tanto em relação às premiações quanto em relação ao funcionamento do concurso. Então preparem-se e, Fiquem ligados nas novidades !!!! Escolha o seu tema!!!!!! Python pode ser uma ótima escolha!!!! No lançamento do concurso vamos dar mais algumas opções de temas para ajudar!!!! Fiquem ligados!!!! Concordo! Um artigo falando do Python embutindo no InterSystems IRIS , seria muito interessante! E ai comunidade, já estão pesquisando sobre os temas? Para ajudar vocês escolherem os temas, sugiro que vocês vejam novidades lançadas na última release 2021.2 do InterSystems IRIS: https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GCRN Uma novidade que gostei muito, além do Python embutido, é o novo adaptador para S3 da Amazon. Boas escolhas! Contagem regressiva para o lançamento !!!! Nossa equipe de especialistas já se encontra ansiosa para ler os artigos que participarão do concurso. Não perca tempo, escolha seu tópico e já anote as ideias para o artigo ! Boa sorte a todos O que acham de algo na linha de "IRIS Smart Factory"? API para conexão ERP e PLC. ótima ideia Jefferson, o concurso inclusive abre as inscrições na segunda-feira, vide o anuncio https://pt.community.intersystems.com/post/1%C2%BA-concurso-de-artigos-t%C3%A9cnicos-em-portugu%C3%AAs-da-intersystems publicado hoje!!!!boa sorte!!!!!
Anúncio
Angelo Bruno Braga · Jun. 16, 2021

Concurso de Programação Acelerador FHIR da InterSystems: O que vocês acharam ? Precisamos da avaliação de vocês!

Olá Comunidade, Nós queremos ouvir vocês ! Nos falem a respeito de nosso último Concurso de Programação Acelerador FHIR da InterSystems! Respondam por favor algumas perguntas para que possamos melhorar nossos concursos. 👉 Pesquisa rápida: Pesquisa do Concurso de Programação Acelerador FHIR da InterSystems Ou se sentir mais a vontade, compartilhe suas impressões nos comentários desta postagem!
Anúncio
Angelo Bruno Braga · Jun. 16, 2021

Webinar (em Inglês): O que tem de novo na plataforma de dados InterSystems IRIS 2021.1

Olá Desenvolvedores, É um enorme prazer convidá-los para o nosso webinar em inglês "O que tem de novo na plataforma de dados InterSystems IRIS 2021.1"! Data: Quinta-feira, 17 de Junho de 2021Horário: 12:00, horário de brasíliaT Neste webinar iremos destacar algumas das novas funcionalidades das plataformas de dados InterSystems IRIS e InterSystems IRIS for Health, na versão 2021.1: Analytics, introduzindo um novo componente add-on, o InterSystems IRIS® Adaptive Analytics, que habilita um modelo virtual de dados comum e permite que usuários de negócio explorem e analisem dados utilizando suas ferramentas de escolha de BI (inclusive o Microsoft Excel!) Desenvolvimento, incluindo maior liberdade de escolha de linguagem tanto para os desenvolvimentos do lado do cliente quanto para as do lado do servidor Implantação e operações, incluindo o InterSystems Kubernetes Operator Interoperabilidade, incluindo o InterSystems API Manager 1.5 FHIR, incluindo o FHIRPath, Perfis FHIR e mais... No final teremos um tempo para perguntas e respostas. Palestrantes:🗣 @Benjamin.DeBoe, Gerente de Produtos, InterSystems🗣 @Joseph.Lichtenberg, Diretor de Marketing para Produto e Indústrias, InterSystems🗣 @Carmen.Logue, Gerente de Produtos, Analytics & Inteligência Artificial, InterSystems ➡️ Registre-se agora!
Anúncio
Angelo Bruno Braga · Out. 20, 2021

Virtual Summit'21: Ganhe, Ganhe, Ganhe com o Ecossistema para Desenvolvedores InterSystems

Olá Desenvolvedores, Planejando participar das sessões temáticas do InterSystems Virtual Summit 2021? Não perca a sessão dedicada à Comunidade de Desenvolvedores InterSystems, Open Exchange & Global Masters! ⚡️ "Ganhe, Ganhe, Ganhe com a sessão sobre o Ecossistema para Desenvolvedores InterSystems" VSummit21 ⚡️ 🎁 Nota: Todos os participantes da sessão ganharão um prêmio especial Palestrantes: 🗣 @Anastasia.Dyubaylo, Community Manager, InterSystems 🗣 @Lena.Evsikova, Product Owner of InterSystems Open Exchange🗣 @Olga.Zavrazhnova2637, Customer Advocacy Manager, InterSystems Aprenda como ter sucesso com a comunidade de desenvolvedores da InterSystems, o hub de gamificação Global Masters e a galeria de aplicativos do Open Exchange. Interesses: Experiência do desenvolvedor, InterSystems IRIS e Comunidades de usuários Nossas Sessões estarão disponíveis sob demanda a partir do dia 27 de Outubro, quarta-feira! Então! Junte-se a nossa sessão para aproveitar a experiência completa do uso da Tecnologia InterSystems e de nosso Ecossistema para Desenvolvedores!
Anúncio
Angelo Bruno Braga · Abr. 28, 2022

Você já conhece os Ganhadores do 1º Concurso de Artigos Técnicos em Português da InterSystems ?

Olá Comunidade, Recentemente anunciamos os Ganhadores do 1º Concurso de Artigos Técnicos em Português da InterSystems ! Estamos agora planejando a oportunidade para que vocês possam conhecer ao vivo nossos ganhadores e a inspiração, a experiência e os desafios que eles encontraram para escrever seus artigos incríveis !!! Nossos Convidados: @Renan Santos , CEO na isNew Tech @Henry Pereira , Analista de Sistemas na BPlus Tecnologia @Yuri Marx , Arquiteto de Software na YM Services O evento irá ocorrer no dia 05 de Maio às 13:00. Reserve já sua agenda !
Artigo
Danusa Calixto · Abr. 4, 2023

Entrega contínua de sua solução InterSystems usando GitLab – Parte XI: Interoperabilidade

Bem-vindo ao capítulo seguinte da [minha série sobre CI/CD](https://pt.community.intersystems.com/post/entrega-contínua-de-sua-solução-intersystems-usando-gitlab-–-índice), onde discuto possíveis abordagens de desenvolvimento de software com tecnologias da InterSystems e GitLab. Hoje, vamos falar sobre interoperabilidade. # Problema Em uma produção de interoperabilidade ativa, há dois fluxos de processo separados: uma produção em funcionamento que processa as mensagens e um fluxo de processo CI/CD que atualiza o código, a configuração da produção e as [configurações padrão do sistema](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ECONFIG_other_default_settings). Claramente, os processos CI/CD afetam a interoperabilidade. No entanto, as perguntas são: - O que acontece exatamente durante uma atualização? - O que precisamos fazer para minimizar ou eliminar o tempo de inatividade da produção durante uma atualização? # Terminologia - Host de Negócio (Business Host - BH) - um elemento configurável da Produção da Interoperabilidade: Serviço de Negócio (Business Service - BS), Processo de Negócio ( Business Process - BP, BPL) ou Operação de Negócio (Business Operation, BO). - Job do Host de Negócio (Business Host Job) - job do InterSystems IRIS que executa o código do Host de Negócio e é gerenciado pela produção de interoperabilidade. - Produção - coleção interconectada de Hosts de Negócio. - Configurações Padrão do Sistema (System Default Settings - SDS) - valores específicos do ambiente de instalação do InterSystems IRIS. - Mensagem Ativa - uma solicitação que está sendo processada por um Job do Host de Negócio. Um Job do Host de Negócio só pode ter uma Mensagem Ativa. O Job do Host de Negócio que não tem uma Mensagem Ativa está inativo. # O que está acontecendo? Vamos começar com o ciclo de vida da produção. ## Início da Produção Primeiro, a Produção pode ser iniciada. Só pode ser executada uma produção por namespace ao mesmo tempo, e em geral (a menos que você saiba o que e porque está fazendo isso), apenas uma produção deve ser executada por namespace. Alternar várias vezes em um namespace entre duas ou mais produções diferentes não é recomendado. Ao iniciar a produção, todos os Hosts de Negócio habilitados definidos nela são inicializados. Se alguns Hosts de Negócio não inicializarem, isso não afeta a inicialização da Produção. Dicas: - Comece a produção no Portal de Gerenciamento de Sistemas ou ao chamar: `##class(Ens.Director).StartProduction("ProductionName")` - Execute código arbitrário na inicialização da Produção (antes que qualquer Job do Host de Negócio seja inicializado) ao implementar um método `OnStart` - A inicialização da Produção é um evento auditável. Você sempre pode ver quem e quando fez o que no Log de Auditoria. ## Atualização da Produção Após a inicialização da Produção, [Ens.Director](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Director) monitora continuamente a produção em execução. Há dois estados de produção: o _estado desejado_, definido na classe da produção e nas Configurações Padrão do Sistema, e o _estado em execução_, os jobs atualmente em execução com configurações aplicadas quando os jobs foram criados. Se os estados desejado e atual forem idênticos, está tudo bem, mas a produção pode (e deve) ser atualizada se houver uma diferença. Geramente, você vê isso como um botão vermelho `Update` na página de Configurações da Produção no Portal de Gerenciamento de Sistemas. A atualização da produção significa uma tentativa de corresponder o estado atual da Produção ao estado visado. A execução de `##class(Ens.Director).UpdateProduction(timeout=10, force=0)` para atualizar a produção faz o seguinte com cada Host de Negócio: 1. Compara as configurações ativas às configurações de produção/SDS/classe 2. Se, e apenas se, (1) apresentar uma discrepância, o Host de Negócio será marcado como desatualizado, exigindo uma atualização. Depois de executar isso para cada Host de Negócio, `UpdateProduction` cria o conjunto de mudanças: - Hosts de Negócio para interromper - Hosts de Negócio para inicializar - Configurações da produção para atualizar E, depois disso, aplica essas mudanças. Dessa forma, "atualizar" as configurações sem mudar nada resulta em nenhum tempo de inatividade da produção. Dicas: - Atualize a produção no Portal de Gerenciamento de Sistemas ou ao chamar: `##class(Ens.Director).UpdateProduction(timeout=10, force=0)` - O tempo limite de atualização padrão do Portal de Gerenciamento de Sistemas é 10 segundos. Se você sabe que o processamento das mensagens leva mais do que isso, chame `Ens.Director:UpdateProduction` com um tempo limite maior. - O tempo limite da atualização é uma configuração da produção, e você pode mudar para um valor maior. Essa configuração se aplica ao Portal de Gerenciamento de Sistemas. ## Atualização do código `UpdateProduction` NÃO ATUALIZA BHs com código desatualizado. Esse é um comportamento voltado para a segurança, mas, se você quiser atualizar todos os BHs em execução automaticamente se o código subjacente mudar, siga estas etapas: Primeiro, carregue e compile desta maneira: ```objectscript do $system.OBJ.LoadDir(dir, "", .err, 1, .load) do $system.OBJ.CompileList(load, "curk", .errCompile, .listCompiled) ``` Agora, `listCompiled` teria todos os itens que foram realmente compilados (use [git diffs](https://github.com/intersystems-ru/GitLab/blob/master/isc/git/Diff.cls) para minimizar o conjunto carregado) devido à flag `u`. Use `listCompiled` para obter um $lb de todas as classes que foram compiladas: ```objectscript set classList = "" set class = $o(listCompiled("")) while class'="" { set classList = classList _ $lb($p(class, ".", 1, *-1)) set class=$o(listCompiled(class)) } ``` Depois disso, calcule uma lista de BHs que precisam de uma reinicialização: ```sql SELECT %DLIST(Name) bhList FROM Ens_Config.Item WHERE 1=1 AND Enabled = 1 AND Production = :production AND ClassName %INLIST :classList ``` Por fim, após obter `bhList`, interrompa e inicie os hosts afetados: ```objectscript for stop = 1, 0 { for i=1:1:$ll(bhList) { set host = $lg(bhList, i) set sc = ##class(Ens.Director).TempStopConfigItem(host, stop, 0) } set sc = ##class(Ens.Director).UpdateProduction() } ``` ## Interrupção da produção As produções podem ser interrompidas, ou seja, uma solicitação pode ser enviada para desativar todos os Jobs do Host de Negócio (com segurança, após lidarem com as mensagens ativas, se houver alguma). Dicas: - Interrompa a produção no Portal de Gerenciamento de Sistemas ou ao chamar: `##class(Ens.Director).StopProduction(timeout=10, force=0)` - O tempo limite de interrupção padrão do Portal de Gerenciamento de Sistemas é 120 segundos. Se você sabe que o processamento das mensagens leva mais do que isso, chame `Ens.Director:StopProduction` com um tempo limite maior. - O tempo limite de interrupção é uma configuração da produção. Você pode alterar isso para um valor maior. Essa configuração se aplica ao Portal de Gerenciamento de Sistemas. - Execute código arbitrário na interrupção da produção ao implementar um método `OnStart` - A interrupção da produção é um evento auditável. Você sempre pode ver quem e quando fez o que no Log de Auditoria. O importante aqui é que a produção seja a soma total dos Hosts de Negócio: - Ao iniciar a produção, todos os Hosts de Negócio habilitados são inicializados. - A interrupção da produção também interrompe todos os Hosts de Negócio em execução. - A atualização da produção significa calcular um subconjunto de Hosts de Negócio que estão desatualizados, para que sejam interrompidos e, imediatamente depois disso, inicializados novamente. Além disso, um Host de Negócio recém-adicionado é inicializado, e um Host de Negócio excluído da produção é interrompido. Isso nos leva ao ciclo de vida dos Hosts de Negócio. ## Inicialização do Host de Negócio Os Hosts de Negócio são compostos de Jobs de Hosts de Negócio idênticos (de acordo com um valor de configuração de tamanho do pool). Ao inicializar um Host de Negócio, todos os Jobs de Hosts de Negócio também são inicializados. Eles são inicializados em paralelo. Jobs de Host de Negócio individuais são inicializados desta maneira: 1. A interoperabilidade define como job um novo processo que se tornaria um Job de Host de Negócio. 2. O novo processo é registrado como um job de interoperabilidade. 3. O código de Host de Negócio e o código do Adapter são carregados na memória do processo. 4. As configurações relacionadas a um Host de Negócio e Adapter são carregadas na memória. A ordem de precedência é: a. Configurações da Produção (substituem as Configurações de Classe e Padrão do Sistema). b. Configurações Padrão do Sistema (substituem as Configurações de Classe). c. Configurações de classe. 5. O job está pronto e começa a aceitar mensagens. Após a conclusão de (4), o Job não pode alterar as configurações ou o código, então quando você importa código novo/igual e configurações padrão do sistema novas/iguais, isso não afeta os jobs de interoperabilidade atualmente em execução. ## Interrupção do Hosts de Negócio Interromper um Job de Host de Negócio significa o seguinte: 1. A interoperabilidade pede que o Job pare de aceitar mensagens/entradas. 2. Se houver uma mensagem ativa, o Job de Host de Negócio tem segundos de tempo limite para processar (ao concluir, finalizando o método `OnMessage` para BO, `OnProcessInput` para BS, `S` para BPL BPs e `On*` para BPs). 3. Se uma mensagem ativa não for processada até o tempo limite e `force=0`, ocorrerá a falha da atualização da produção para esse Host de Negócio (voce verá um botão "Update" vermelho no Portal de Gerenciamento de Sistemas). 4. A interrupção é bem-sucedida se algo nesta lista for verdadeiro: - Nenhuma mensagem ativa - A mensagem ativa foi processada antes de `timeout` - A mensagem ativa não foi processada antes do tempo limite, MAS `force=1` 5. O job é cancelado com interoperabilidade e é interrompido. ## Atualização do Host de Negócio A atualização do Host de Negócio significa a interrupção de todos os Jobs em execução para o Host de Negócio e a inicialização de novos Jobs. ## Regras de negócios, de roteamento e DTLs Todos os Hosts de Negócio são inicializados imediatamente usando as novas versões das Regras de negócios, de roteamento e DTLs assim que ficarem disponíveis. A reinicialização de um Host de Negócio não é necessária nesse caso. # Atualizações offline Às vezes, no entanto, as atualizações da produção exigem tempo de inatividade de Hosts de Negócio individuais. ## Regras dependem de novo código Considere a situação. Você tem uma Regra de Roteamento X atual que encaminha as mensagens para o Processo de Negócio A ou B com base em critérios arbitrários. Em um novo commit, você adiciona, simultaneamente: - Processo de Negócio C - Uma nova versão da Regra de Roteamento X, que encaminha mensagens para A, B ou C. Nesse caso, você não pode só carregar a regra primeiro e depois atualizar a produção. A regra recém-copilada imediatamente começaria a encaminhar as mensagens para o Processo de Negócio C, que o InterSystems IRIS talvez ainda não tenha compilado ou a interoperabilidade ainda não tenha atualizado para usar. Nesse caso, você precisa desativar o Host de Negócio com uma Regra de Roteamento, atualizar o código, atualizar a produção e ativar o Host de Negócio novamente. Observações: - Se você atualizar uma produção usando um [arquivo de implantação de produção](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=EGDV_deploying), todos os BHs afetados são desativados/ativados automaticamente. - Para hosts invocados InProc, a compilação invalida o cache de um host específico mantido pelo autor da chamada. ## Dependências entre Hosts de Negócio As dependências entre Hosts de Negócio são fundamentais. Suponha que você tenha os Processos de Negócio A e B, em que A envia mensagens a B. Em um novo commit, você adiciona, simultaneamente: - Uma nova versão do Processo A, que define uma nova propriedade X em uma solicitação para B - Uma nova versão do Processo B que pode processar uma nova propriedade X Nesse caso, PRECISAMOS atualizar o Processo B primeiro e o A depois. Você pode fazer isso de uma das seguintes maneiras: - Desativar Hosts de Negócio durante a atualização - Divida a atualização em duas partes: primeiro, atualize apenas o Processo B e, depois, em uma atualização separada, comece a enviar mensagens para ele do Processo A. Uma variação mais desafiadora desse tema, em que as novas versões dos Processos A e B são incompatíveis com as versões antigas, exige tempo de inatividade do Host de Negócio. ## Filas Se você sabe que, após a atualização, um Host de Negócio não conseguirá processar mensagens antigas, você precisa garantir que a Fila do Host de Negócio esteja vazia antes da atualização. Para isso, desative todos os Hosts de Negócio que enviam mensagens para o Host de Negócios e espere até que a fila fique vazia. ## Mudança de estado nos Processos de Negócio BPL Primeiro, uma pequena introdução sobre como funcionam os BPs do BPL. Depois de compilar um BP do BPL, duas classes são criadas no pacote com o mesmo nome que o da classe BPL completa: - A classe `Thread1` contém os métodos S1, S2, ... SN, que corresponde às atividades no BPL - A classe `Context` tem todas as variáveis de contexto, além do próximo estado que o BPL executaria (ou seja, `S5`) Além disso, a classe BPL é persistente e armazena as solicitações que estão sendo processadas. O BPL funciona ao executar os métodos `S` em uma classe `Thread` e atualizando de maneira correspondente a tabela da classe BPL, `Context` e `Thread1`, em que uma mensagem "em processamento" é uma linha em uma tabela BPL. Após o processamento da solicitação, o BPL exclui as entradas do BPL, `Context` e `Thread`. Como os BPs do BPL são assíncronos, um job BPL pode processar simultaneamente várias solicitações ao salvar as informações entre chamadas `S` e alternar entre diferentes solicitações. Por exemplo, o BPL processou uma solicitação até chegar a uma atividade `sync`, aguardando uma resposta da BO. Ele salvaria o contexto atual no disco, com a propriedade `%NextState` (na classe `Thread1`) definida para o método `S` de atividade de resposta e trabalharia em outras solicitações até a BO responder. Após a resposta da BO, o BPL carregaria "Context" na memória e executaria o método correspondente a um estado salvo na propriedade `%NextState`. Agora, o que acontece quando atualizamos o BPL? Primeiro, precisamos conferir se pelo menos uma destas condições é atendida: - Durante a atualização, a tabela Context está vazia, o que significa que nenhuma mensagem ativa está em trabalho. - Os Novos Estados são os mesmos que os antigos ou os novos Estados são adicionados após os antigos. Se pelo menos uma condição for atendida, podemos continuar. Não há solicitações de pré-atualização para processar o BPL pós-atualização ou os Estados são adicionados no final, o que significa que as solicitações antigas também podem ir para lá (supondo que as solicitações de pré-atualização sejam compatíveis com as atividades e o processamento do BPL pós-atualização). Mas e se você tiver solicitações ativas em processamento e o BPL mudar a ordem dos estados? O ideal é, se você puder esperar, desativar os autores de chamada do BPL e esperar até que a fila esteja vazia. Valide se a tabela Context também está vazia. Lembre-se de que a Fila mostra apenas as solicitações não processadas e a tabela Context armazena as solicitações em trabalho, então um BPL muito ocupado pode mostrar o tamanho da Fila como zero e isso é normal. Depois disso, desative o BPL, realize a atualização e ative todos os Hosts de Negócio desativados anteriormente. Se isso não for possível (geralmente quando o BPL é muito longo, lembro de atualizar um que demorou cerca de uma semana para processar uma solicitação, ou a janela de atualização é muito curta), use o [versionamento do BPL](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=EBPLR_process). Como alternativa, você pode escrever um script de atualização. No script de atualização, mapeie os próximos estados antigos para os próximos estados novos e execute na tabela `Thread1` para que o BPL atualizado possa processar solicitações antigas. O BPL precisa ser desativado durante a atualização. Dito isso, é uma situação extremamente rara e geralmente desnecessária, mas, se precisar fazer isso, é dessa maneira. # Conclusão A interoperabilidade implementa um algoritmo sofisticado para minimizar o número de ações necessárias para atualizar a produção após a alteração do código subjacente. Chame UpdateProduction com um tempo limite seguro em cada atualização de SDS. Para cada atualização de código, você precisa decidir uma estratégia. Minimizar a quantidade de código compilado usando [git diffs](https://github.com/intersystems-ru/GitLab/blob/master/isc/git/Diff.cls) ajuda no tempo de compilação, mas "atualizar" o código com ele mesmo e compilá-lo novamente ou "atualizar" as configurações com os mesmos valores não aciona ou exige uma atualização da produção. Atualizar e compilar Regras de Negócio, Regras de Roteamento e DTLs os torna imediatamente acessíveis sem a atualização da produção. Por fim, a atualização da produção é uma operação segura e geralmente não requer tempo de inatividade. # Links - [Ens.Director](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Director) - [Criando git diffs](https://github.com/intersystems-ru/GitLab/blob/master/isc/git/Diff.cls) - [Configurações Padrão do Sistema](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ECONFIG_other_default_settings) O autor gostaria de agradecer a @James.MacKeith, @Dmitry.Zasypkin e @Regilo.Souza pela ajuda inestimável com este artigo.
Artigo
Danusa Calixto · Abr. 4, 2023

Entrega contínua de sua solução InterSystems usando GitLab – Parte X: Além do código

Após uma pausa de quase quatro anos, [minha série sobre CI/CD](https://pt.community.intersystems.com/post/entrega-contínua-de-sua-solução-intersystems-usando-gitlab-–-índice) está de volta! Ao longo dos anos, trabalhei com vários clientes da InterSystems, desenvolvendo pipelines de CI/CD para diferentes casos de uso. Espero que as informações apresentadas neste artigo sejam úteis para alguém. Esta [série de artigos](https:/pt.community.intersystems.com/post/entrega-contínua-de-sua-solução-intersystems-usando-gitlab-–-índice) discute várias abordagens possíveis para o desenvolvimento de software com tecnologias da InterSystems e do GitLab. Temos uma variedade interessante de tópicos para abordar: hoje, vamos falar sobre elementos fora do código — ou seja, configurações e dados. # Problema Anteriormente, discutimos promoções de código e, de certa forma, sem estado — sempre passamos de uma instância (presumivelmente) vazia para uma codebase completa. No entanto, às vezes, precisamos fornecer dados ou estado. Há diferentes tipos de dados: - Configuração: usuários, web apps, LUTs, esquemas personalizados, tarefas, parceiros de negócios e muito mais - Configurações: pares de chaves-valor específicas ao ambiente - Dados: com frequência, tabelas de referência precisam ser fornecidas para seu app funcionar Vamos discutir todos esses tipos de dados e como eles podem ser adicionados primeiro ao controle de fonte e posteriormente implantados. # Configuração A configuração do sistema é dividida em muitas classes diferentes, mas o InterSystems IRIS pode exportar a maioria delas para XMLs. Primeiro, um [Pacote de segurança](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&PACKAGE=Security) contém informações sobre: - Web Apps - DocDBs - Domínios - Eventos de auditoria - Servidores KMIP - Configurações LDAP - Recursos - Funções - Privilégios SQL - Configurações SSL - Serviços - Usuários Todas essas classes fornecem métodos Exists, Export e Import, permitindo movê-las entre ambientes. Algumas ressalvas: - Os usuários e as configurações de SSL podem conter informações confidenciais, como senhas. Geralmente, NÃO é recomendado armazená-los no controle de fonte por motivos de segurança. Use os métodos Export/Import para facilitar transferências únicas. - Por padrão, os métodos Export/Import geram os resultados em um arquivo, o que talvez não seja compatível com o controle de fonte. Veja uma [classe de utilitário](https://gist.github.com/eduard93/3a9abdb2eb150a456191bf387c1fc0c3) que pode exportar e importar Tabelas Lookup, Esquemas Personalizados, Parceiros de Negócio, Tarefas, Credenciais e Configuração SSL. Ela exporta um item por arquivo, então você obtém um diretório com LUT, outro diretório com esquemas personalizados e assim por diante. Para configurações SSL, ela também exporta arquivos: certificados e chaves. Também vale a pena notar que, em vez de importar/exportar, você pode usar [%Installer](https://community.intersystems.com/post/deploying-applications-intersystems-cache-installer) ou [Mesclagem CPF](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ACMF) para criar a maioria desses elementos. Ambas as ferramentas também são compatíveis com a criação de namespaces e bancos de dados. A Mesclagem CPF pode ajustar as configurações do sistema, como o tamanho do buffer global. ## Tarefas A classe [%SYS.Task](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYS.Task) armazena tarefas e fornece métodos `ExportTasks` e `ImportTasks`. Você também pode verificar a classe de utilitário acima para importar e exportar tarefas uma a uma. Observe que, ao importar tarefas, você pode obter erros de importação (`ERROR #7432: Start Date and Time must be after the current date and time` - A data e o horário de início precisam ser posteriores à data e ao horário atual) se `StartDate` ou outras propriedades relacionadas à programação estiverem no passado. Como solução, defina `LastSchedule` como `0` para o InterSystems IRIS reprogramar uma tarefa recém-importada para ser executada em um futuro próximo. ## Interoperabilidade As produções de interoperabilidade contêm: - Parceiros de negócio - Configurações Padrão do Sistema - Credenciais - Tabelas Lookup Os dois primeiros estão disponíveis no pacote [Ens.Config](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&PACKAGE=Ens.Config) com métodos `%Export` e `%Import`. Exporte Credenciais e Tabelas Lookup usando a [classe de utilitário](https://gist.github.com/eduard93/3a9abdb2eb150a456191bf387c1fc0c3) acima. Em versões recentes, Tabelas Lookup podem ser exportadas/importadas pela classe [$system.OBJ](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.OBJ). # Configurações [Configurações Padrão de Sistema](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ECONFIG_other_default_settings#ECONFIG_other_default_settings_purpose) - é um mecanismo de interoperabilidade padrão para configurações específicas ao ambiente: > A finalidade das configurações padrão do sistema é simplificar o processo de cópia de uma definição de produção de um ambiente para outro. Em qualquer produção, os valores de algumas configurações são determinados como parte do design de produção. Geralmente, essas configurações são as mesmas em todos os ambientes. Outras configurações, no entanto, precisam ser ajustadas ao ambiente. Essas configurações incluem caminhos de arquivo, números de portas e assim por diante. > > As configurações padrão do sistema precisam especificar apenas os valores do ambiente em que o InterSystems IRIS está instalado. Por outro lado, a definição da produção precisa especificar valores de configurações que devem ser iguais em todos os ambientes. Recomendo usá-los em ambientes de produção. Use [%Export](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25Export) e [%Import](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25Import) para transferir as configurações padrão do sistema. ## Configurações do aplicativo Seu aplicativo provavelmente também usa configurações. Nesse caso, recomendo usar as Configurações Padrão do Sistema. Embora seja um mecanismo de interoperabilidade, as configurações podem ser acessadas via: `%GetSetting(pProductionName, pItemName, pHostClassName, pTargetType, pSettingName, Output pValue)` ([documentos](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25GetSetting)). Você pode escrever um wrapper para definir os padrões com que você não se importa, por exemplo: ```objectscript ClassMethod GetSetting(name, Output value) As %Boolean [Codemode=expression] { ##class(Ens.Config.DefaultSettings).%GetSetting("myAppName", "default", "default", , name, .value) } ``` Se você quiser mais categorias, você também pode expor argumentos `pItemName` e/ou `pHostClassName`. As configurações podem ser definidas inicialmente ao importar, usar o Portal de Gerenciamento de Sistema, criar objetos da classe `Ens.Config.DefaultSettings` ou definir `^Ens.Config.DefaultSettingsD` como global. Meu principal conselho aqui seria manter as configurações em um só lugar (pode ser as Configurações Padrão do Sistema ou uma solução personalizada), e o aplicativo precisa obter as configurações usando apenas a API fornecida. Dessa forma, o próprio aplicativo não conhece o ambiente e o que resta é fornecer um armazenamento centralizado de configurações com valores específicos ao ambiente. Para isso, crie uma pasta de configurações no seu repositório contendo arquivos de configuração com nomes iguais aos das ramificações do ambiente. Em seguida, durante a fase do CI/CD, use a [variável de ambiente](https://docs.gitlab.com/ee/ci/variables/predefined_variables.html) `$CI_COMMIT_BRANCH` para carregar o arquivo correto. ``` DEV.xml TEST.xml PROD.xml ``` Se você tiver vários arquivos de configurações por ambiente, use pastas com nomes de ramificações de ambiente. Para obter o valor da variável de ambiente de dentro do InterSystems IRIS, [use](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.Util#GetEnviron) `$System.Util.GetEnviron("name")`. # Dados Se você quiser disponibilizar dados (tabelas de referência, catálogos, etc.), há várias formas de fazer isso: - Exportação global. Use uma [exportação GOF](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_managing#GGBL_managing_export) binária ou uma nova exportação XML. Com a exportação GOF, lembre-se de que os locais nos sistemas de origem e destino precisam corresponder (ou pelo menos a ordenação global precisa estar disponível no sistema de destino). A [exportação XML](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.OBJ) ocupa mais espaço. Você pode melhorar isso ao exportar o global para um arquivo `xml.gz`, os métodos `$system.OBJ` automaticamente (des)arquivam os arquivos `xml.gz` conforme necessário. A principal desvantagem dessa abordagem é que os dados não são legíveis por humanos, nem mesmo o XML — a maioria é codificado em base64. - CSV. Faça a [exportação CSV](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SQL.StatementResult#%25DisplayFormatted) e importe com [LOAD DATA](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_loaddata). Prefiro o CSV, pois é o formato legível por humanos com armazenamento mais eficiente, que pode ser importado por qualquer coisa. - JSON. Crie uma classe [habilitada para JSON](https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=GJSON_adaptor). - XML. Crie uma classe [habilitada para XML](https://docs.intersystems.com/iris20221/csp/docbook/DocBook.UI.Page.cls?KEY=GXMLPROJ_intro) para projetar objetos no XML. Use se os dados tiverem uma estrutura complexa. O formato que você deve escolher depende do seu caso de uso. Listei aqui os formatos na ordem de eficiência de armazenamento, mas essa não é uma preocupação se você não tiver muitos dados. # Conclusões O estado adiciona complexidade aos seus pipelines de implantação de CI/CD, mas o InterSystems IRIS fornece uma vasta gama de ferramentas para gerenciá-lo. # Links - [Classe de utilitário](https://gist.github.com/eduard93/3a9abdb2eb150a456191bf387c1fc0c3) - [%Installer](https://community.intersystems.com/post/deploying-applications-intersystems-cache-installer) - [Mesclagem CPF](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ACMF) - [$System.OBJ](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25SYSTEM.OBJ) - [Configurações Padrão do Sistema](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=ENSLIB&CLASSNAME=Ens.Config.DefaultSettings#%25GetSetting)
Artigo
Danusa Calixto · Dez. 22, 2022

Entrega contínua de sua solução InterSystems usando GitLab – Parte V: por que contêineres?

Nesta série de artigos, quero apresentar e discutir várias abordagens possíveis para o desenvolvimento de software com tecnologias da InterSystems e do GitLab. Vou cobrir tópicos como: * Git básico * Fluxo Git (processo de desenvolvimento) * Instalação do GitLab * Fluxo de trabalho do GitLab * Entrega contínua * Instalação e configuração do GitLab * CI/CD do GitLab * **Por que contêineres?** * CI/CD do GitLab usando contêineres No [primeiro artigo](https://pt.community.intersystems.com/post/entrega-cont%C3%ADnua-de-sua-solu%C3%A7%C3%A3o-intersystems-usando-gitlab-%E2%80%93-parte-i-git), abordamos os fundamentos do Git, por que um entendimento de alto nível dos conceitos do Git é importante para o desenvolvimento de software moderno e como o Git pode ser usado para desenvolver software. No [segundo artigo](https://pt.community.intersystems.com/post/entrega-cont%C3%ADnua-de-sua-solu%C3%A7%C3%A3o-intersystems-usando-gitlab-%E2%80%93-parte-ii-fluxo-de-trabalho-do), abordamos o fluxo de trabalho do GitLab: um processo inteiro do ciclo de vida do software e a entrega contínua. No [terceiro artigo](https://pt.community.intersystems.com/post/entrega-cont%C3%ADnua-de-sua-solu%C3%A7%C3%A3o-intersystems-usando-gitlab-%E2%80%93-parte-iii-instala%C3%A7%C3%A3o-e), abordamos a instalação e configuração do GitLab e a conexão dos seus ambientes a ele No [quarto artigo](https://pt.community.intersystems.com/post/entrega-cont%C3%ADnua-de-sua-solu%C3%A7%C3%A3o-intersystems-usando-gitlab-%E2%80%93-parte-iv-configura%C3%A7%C3%A3o-da-cd), escrevemos uma configuração de CD. Neste artigo, falaremos sobre os contêineres e como (e por que) podem ser usados. Este artigo presume a familiaridade com os conceitos de docker e contêiner. Confira estes artigos do @Luca.Ravazzolo se quiser ler sobre [contêineres](https://community.intersystems.com/post/container-what-container) e [imagens](https://community.intersystems.com/post/container-what-container-image). ## Vantagens Há muitas vantagens em usar contêineres: * Portabilidade * Eficiência * Isolamento * Leveza * Imutabilidade Vamos falar sobre cada uma em detalhes. ### Portabilidade Um contêiner embrulha um aplicativo com tudo o que ele precisa para ser executado, como arquivos de configuração e dependências. Isso permite que você execute aplicativos de maneira fácil e confiável em diferentes ambientes, como seu desktop local, servidores físicos, servidores virtuais, testes, staging, ambientes de produção e nuvens públicas ou privadas. Outro ponto da portabilidade é que, depois de criar sua imagem do Docker e verificar que ela é executada corretamente, ela pode ser executada em qualquer outro lugar que execute o docker, que atualmente são os servidores Windows, Linux e MacOS. ### Eficiência Você só precisa que o processo do aplicativo seja executado, e não todo o sistema, etc. E os contêineres oferecem exatamente isso: eles executam apenas os processos de que você precisa explicitamente e nada mais. Como os contêineres não exigem um sistema operacional separado, eles consomem menos recursos. Enquanto uma VM costuma ter vários gigabytes de tamanho, um contêiner geralmente tem apenas algumas centenas de megabytes, tornando possível executar muito mais contêineres do que VMs em um único servidor. Como os contêineres têm um nível de uso mais alto em relação ao hardware subjacente, você precisa de menos hardware, resultando em uma redução nos custos dos servidores bare metal, bem como dos centros de processamento de dados. ### Isolamento Os contêineres isolam seu aplicativo de todo o resto e, embora vários contêineres possam ser executados no mesmo servidor, eles podem ser completamente independentes uns dos outros. Qualquer interação entre contêineres deve ser explicitamente declarada como tal. Se um contêiner falhar, ele não afetará os outros e poderá ser reiniciado rapidamente. A segurança também se beneficia desse isolamento. Por exemplo, explorar a vulnerabilidade do servidor web em um servidor bare metal pode dar a um invasor acesso a todo o servidor, mas, no caso dos contêineres, o invasor só teria acesso ao contêiner do servidor web. ### Leveza Como os contêineres não exigem um sistema operacional separado, eles podem ser iniciados, interrompidos ou reinicializados em questão de segundos, o que acelera todos os pipelines de desenvolvimento relacionados e o tempo de produção. Você pode começar a trabalhar antes e não gastar nenhum tempo na configuração.  ### Imutabilidade A infraestrutura imutável é composta por componentes imutáveis que são substituídos a cada implantação, em vez de serem atualizados no local. Esses componentes são inicializados a partir de uma imagem comum que é criada uma vez por implantação e pode ser testada e validada. A imutabilidade reduz a inconsistência e permite a replicação e a movimentação entre diferentes estados do seu aplicativo com facilidade. Mais sobre a [imutabilidade](https://blog.codeship.com/immutable-infrastructure/). ## Novas possibilidades Todas essas vantagens nos permitem gerenciar a infraestrutura e o fluxo de trabalho de maneiras totalmente novas. ### Orquestração Há um problema com ambientes bare metal ou VM, eles ganham _individualidade_, o que traz várias surpresas depois, geralmente desagradáveis. A resposta para isso é a **infraestrutura como código**, o gerenciamento da infraestrutura em um modelo descritivo, usando as mesmas versões que a equipe de DevOps usa para o código-fonte. Com a infraestrutura como código, um comando de implantação sempre coloca o ambiente de destino na mesma configuração, não importa o estado inicial do ambiente. Isso é alcançado ao configurar automaticamente um destino existente ou descartar o destino existente e recriar um novo ambiente. Assim, com a infraestrutura como código, as equipes fazem alterações na descrição do ambiente e na versão do modelo de configuração, que normalmente está em formatos de código bem documentados, como JSON. O pipeline de lançamento executa o modelo para configurar ambientes de destino. Se a equipe precisar fazer alterações, ela editará a fonte, e não o destino. Tudo isso é possível e muito mais fácil de fazer com contêineres. Leva poucos segundos para desativar um contêiner e iniciar outro, enquanto o provisionamento de uma nova VM leva alguns minutos. E nem estou falando em reverter um servidor para um estado limpo. ### Escalonamento Do ponto anterior, você pode ter uma ideia de que a infraestrutura como código é estática por si só. Não é, pois as ferramentas de orquestração também podem fornecer escalonamento horizontal (provisionando mais do mesmo) com base na carga de trabalho atual. Você só deve executar o que é necessário no momento e escalonar seu aplicativo de acordo. Isso também pode reduzir custos. ## Conclusão Os contêineres podem otimizar seu pipeline de desenvolvimento. A eliminação de inconsistências entre ambientes permite testes e depurações mais fáceis. A orquestração permite que você crie aplicativos escalonáveis.  A implantação ou reversão para qualquer ponto do histórico imutável é possível e fácil. As organizações querem trabalhar em um nível mais alto, onde todos os problemas listados acima já estejam resolvidos e onde encontramos agendadores e orquestradores lidando com mais coisas de maneira automatizada. O que vem a seguir No próximo artigo, vamos falar sobre o provisionamento com contêineres e a criação da configuração de CD que usa o contêiner Docker do InterSystems IRIS.
Anúncio
Angelo Bruno Braga · Nov. 16, 2022

Bônus de tecnologia para o concurso InterSystems IRIS para Saúde (da Mulher) 2022

Olá Desenvolvedores! Aqui estão os bônus de tecnologia para o InterSystems Health FHIR Contest 2022 que darão a você pontos extras na votação: Tópico sobre a saúde da mulher Conjunto de dados de saúde da mulher Uso do IRIS For Health FHIR ou FHIR Cloud Server Interoperabilidade de Saúde Uso do Python Nativo Uso de contêiner Docker Implantação em pacote ZPM Demonstração on-line Passagem de qualidade de código Artigo na Comunidade de Desenvolvedores O segundo artigo na Comunidade de Desenvolvedores Vídeo no YouTube Primeira Vez Vejam os detalhes abaixo: Tópico sobre a saúde da mulher - 5 pontos Ganhe 5 pontos de bônus se sua solução estiver ajudando com qualquer tema relativo a problemas de saúde da mulher. Por exemplo, se seu aplicativo puder ajudar pacientes grávidas a descobrir tendências no rastreamento de sintomas de gravidez e/ou criar uma integração para compartilhar sintomas e anotações do diário de gravidez com um aplicativo de parceiro Conjunto de dados de saúde da mulher - 3 pontos Colete 3 pontos de bônus se você enviar um conjunto de dados de Saúde da Mulher para o Open Exchange e usá-lo em sua inscrição. Aqui estão exemplos de conjuntos de dados no Open Exchange: titanic, community posts, health datasets. O conjunto de dados deve ser um aplicativo Open Exchange separado. Uso do IRIS For Health FHIR ou FHIR Cloud Server - 2 pontos Colete 2 pontos de bônus se sua solução usar o servidor FHIR via IRIS for Health ou InterSystems FHIR Server na AWS. Obtenha o modelo IRIS For Health com o servidor FHIR em execução aqui. Você pode ativar sua instância de servidor FHIR. Interoperabilidade de Saúde - 4 pontos Ganhe 4 pontos de bônus se seu aplicativo for solução de interoperabilidade de saúde que usa a interoperabilidade InterSystems para transferir e/ou transformar dados de saúde por meio de mensagens ou usa transformação de dados em formatos de saúde. aqui está um exemplo de solução dfe interoperabilidade de saúde. Python Nativo - 3 pontos Use o Python Nativo em sua aplicação e acumule 3 pontos extras. Você precisará ao menos da versão do InterSystems IRIS 2021.2 para isso. Uso de contêiner Docker - 2 pontos O aplicativo recebe um bônus de 'contêiner Docker' se usar o InterSystems IRIS em execução em um contêiner docker. Aqui está o exemplo mais simples para se iniciar. Implantação em pacote ZPM - 2 pontos Você pode coletar o bônus se criar e publicar o pacote ZPM (ObjectScript Package Manager) para seu aplicativo Full-Stack para que ele possa ser implantado com o comando: zpm "install your-multi-model-solution" em um IRIS com o cliente ZPM instalado. Cliente ZPM. Documentação. Demonstração on-line de seu projeto - 2 pontosGanhe mais 3 pontos de bônus se publicar seu projeto em nuvem como uma demonstração online. Você pode fazer isso sozinho ou pode usar este modelo - Você encontra aqui um Exemplo. Aqui está o vídeo de como utilizá-lo. Passagem de qualidade de código sem bugs - 1 ponto ​​​​​​​Inclua a ação Github de qualidade de código para controle estático de código e mostre 0 bugs para seu código ObjectScript. Artigo na Comunidade de Desenvolvedores​​​​​​​ - 2 pontos Publique um artigo na Comunidade de Desenvolvedores que descreva os recursos do seu projeto. Colete 2 pontos para cada artigo. Traduções para diferentes idiomas também funcionam. O segundo artigo na Comunidade de Desenvolvedores​​​​​​​ - 1 ponto Você pode coletar mais um ponto de bônus para o segundo artigo ou a tradução do artigo. O 3º e próximos não trarão mais pontos, mas a atenção será toda sua. Vídeo no YouTube - 3 pontos Faça o vídeo do Youtube que demonstra seu produto em ação e ganhe 3 pontos de bônus por cada. Exemplos. Primeira Vez - 3 pontos Acumule 3 pontos de bônus se você participar de concursos InterSystems Open Exchange pela primeira vez! A lista de bônus está sujeita a alterações. Fique ligado! Boa sorte com a competição!
Anúncio
Angelo Bruno Braga · Dez. 8, 2022

Vencedores do Concurso InterSystems IRIS for Health: FHIR para a Saúde da Mulher

Ei Comunidade, Estamos muito animados para anunciar os vencedores do Concurso InterSystems IRIS for Health: FHIR para a Saúde da Mulher! Obrigado a todos por participarem de nossa competição de codificação. Sem mais delongas, os vencedores são... Nomeação de especialista 🥇 1º lugar e US$5.000 vão para o app FemTech Reminder de @KATSIARYNA.Shaustruk, @Maria.Gladkova, @Maria.Nesterenko 🥈 2º lugar e US3.000 vão para o app Pregnancy Symptoms Tracker de @José.Pereira, @Henrique.GonçalvesDias, @Henry.HamonPereira 🥉 3º lugar e US$1.500 vão para o app Contest-FHIR de @Lucas.Enard2487 🏅 4º lugar e US$750 vão para o app fhir-healthy-pregnancy de @Edmara.Francisco 🏅 5º lugar e US$500 vão para o app iris-fhir-app de @Oliver.Wilms More winners: 🏅 US$100 vão para o app Dia-Bro-App de @Dzmitry.Rabotkin, Maria Muzychuk, Maxim Eliseykin 🏅 US$100 vão para o app NeuraHeart de @Grzegorz.Koperwas 🏅 US$100 vão para o app FHIR Questionnaires de @Yuri.Gomes 🏅 US$100 vão para o app Beat Savior de @Jan.Skála 🏅 US$100 vão para o app ehh2022-diabro de @Maksym.Shcherban 🏅 US$100 vão para o app Dexcom Board de @Daniel.Šulc, Matěj Žídek, Tomáš Dorda Community Nomination 🥇 1º lugar e US$1.000 vão para o app Pregnancy Symptoms Tracker de @José.Pereira, @Henrique.GonçalvesDias, @Henry.HamonPereira 🥈 2º lugar e US$750 vão para o app FemTech Reminder de @KATSIARYNA.Shaustruk, @Maria.Gladkova, @Maria.Nesterenko 🥉 3º lugar e US$500 vão para o app fhir-healthy-pregnancy de @Edmara.Francisco Os nossos mais sinceros parabéns a todos os participantes e vencedores! Junte-se à diversão da próxima vez 😎
Artigo
Danusa Calixto · Maio 9, 2023

Tutorial de como implantar o InterSystems API Manager (IAM) no AWS EC2

Neste artigo, vou tentar explicar a etapa de implantação do IAM no meu EC2(ubuntu). ## O que é o IAM? IAM é o InterSystems API Manager consulte o link abaixo para saber mais sobre o IAM ![descrição gerada: apimgr description.jpg](https://docs.intersystems.com/components/csp/docbook/images/page_apimgr_description.jpg)   ## Antes de implantar o IAM ### Confira a licença do host da API ![](/sites/default/files/inline/images/images/image(5816).png) ![](/sites/default/files/inline/images/images/image(5818).png) ####   ### Ative o IAM do usuário ![](/sites/default/files/inline/images/images/image(5819).png) ![](/sites/default/files/inline/images/images/image(5820).png)   ## Implante o IAM ### Referência    ### Faça o download da imagem no link a seguir Fiz o download da seguinte versão no meu PC ![](/sites/default/files/inline/images/images/image(5824).png)   ### Upload da imagem no EC2 Usei o comando scp para fazer upload da imagem na minha nuvem ![](/sites/default/files/inline/images/images/image(5827).png) ###   ### Confira se o docker e o docker compose estão instalados Caso contrário, acesse o link a seguir [ https://docs.docker.com/engine/install/ubuntu/](http://https://docs.docker.com/engine/install/ubuntu/)   ### Descompacte o arquivo tar de imagem tar zpxvf IAM-3.0.2.0-4.tar.gz ![](/sites/default/files/inline/images/images/image(5830).png) ###   ### Carregue a imagem no docker sudo docker load -i iam_image.tar ![](/sites/default/files/inline/images/images/image(5831).png)   ### Execute o iam-setup.sh source ./iam-setup.sh   ![](/sites/default/files/inline/images/images/image(5832).png) ![](/sites/default/files/inline/images/images/image(5835).png)   ### Edite o arquivo: docker-compose.yml  Para que seja possível acessar a IU do IAM pelo ambiente fora do EC2, substitua o localhost pelo endereço público do EC2 no parâmetro KONG\_PORTAL\_GUI\_HOST e KONG\_ADMIN\_GUI\_URL vi docker-compose.yml  ![](/sites/default/files/inline/images/images/image(5841).png)   ### Inicie o contêiner sudo docker compose up -d ### ![](/sites/default/files/inline/images/images/image(5836).png) ###   ### Confira a IU do IAM Acesse a IU do IAM pelo link a seguir http://yourEC2publicAddress:8002/overview ![](/sites/default/files/inline/images/images/image(5837).png)