Novo deploy para a Wiki.
Nesse projeto existem as seguintes coisas:
- Um arquivo Dockerfile para gerar uma imagem customizada da Mediawiki.
- Um arquivo .gitlab-ci.yml para configurar uma carga de trabalho de Integração Contínua.
- Pacotes releases de plugins utilizados pelo Tribunal para o Mediawiki.
- Arquivos template de configuração de deploy, service e ingress para configuração do software no Kubernetes.
A construção da imagem customizada da Mediawiki tem como partida a versão mais recente da Mediawiki na época da atualização da Wiki (v1.40, de Outubro de 2023).
A receita Dockerfile utiliza um script para construir localmente (na imagem) software para realização de tarefas LDAP.
Além disso, o mesmo arquivo Dockerfile instala manualmente na imagem um número de dependências requeridas pelo uso do Tribunal. São elas:
- mediawiki-extensions-LDAPAuthentication2-2.0.0.tar.gz
- mediawiki-extensions-LDAPProvider-2.0.0.tar.gz
- MobileFrontend-REL1_40-6d77c0b.tar.gz
- PluggableAuth-REL1_40-764e1ec.tar.gz
- Foreground-REL1_40-cd870ce.tar.gz
- Vector-REL1_40-31f26e6.tar.gz
Existe incompatibilidade entre a versão de alguns desses pacotes e a versão mais recente da Mediawiki verificado na data 23-05-2024.
O arquivo que configura a pipeline CI no Gitlab é o .gitlab-ci.yml. Os jobs são:
- build: constrói a imagem customizada da Mediawiki a partir do Dockerfile nesse repositório e copia a imagem para o repositório de imagens Docker do Tribunal.
- deploy_homolog: invoca helm para construir o artefato desejado, que é o yaml para configuração do software no Kubernetes. Também instala a aplicação no Kubernetes.
- stop_homolog: invoca helm para desinstalar a aplicação do Kubernetes. Esse job é manual.
- deploy_prod: invoca helm para construir o artefato desejado, que é o yaml para configuração do software no Kubernetes. Também instala a aplicação no Kubernetes. Esse job é manual.
- stop_prod: invoca helm para desinstalar a aplicação do Kubernetes. Manual.
O projeto Mediawiki armazena binários, como imagens, vídeos, etc., utilizados pelas páginas da wiki em um sistema de arquivos e o caminho para esses artefatos é armazenado em uma tabela no banco de dados da aplicação.
O armazenamento dos binários fica em um disco virtual representado por um PV (Persisten Volume) no Kubernetes. O arquivo template de deploy especifica um PVC (Persistent Volume Claim) para utilizar o NFS. Esse arquivo está no caminho ./chart/wiki/templates/wiki-deploy.yaml.
O caminho e credenciais para acesso ao banco de dados são especificados em variáveis de ambiente no Gitlab e resgatados pela aplicação através da função ‘getenv()’ no arquivo ‘LocalSettings.php’, que é copiado para imagem customizada na ocasião de sua criação. Esse arquivo configura a aplicação.
Após cada atualização do Mediawiki é necessário verificar se o esquema de banco de dados precisa de alguma atualização. Essa atualização pode ser feita pela interface Web ou através da execução do script php que fica no caminho /var/www/html/maintenance/update.php. Instruções para como realizar a atualização está na documentação da Mediawiki.
- Construir o PV para a nova versão da Wiki. Aqui deve-se garantir que somente o conteúdo de imagens/, do antigo NFS, i.e., os diretórios e arquivos dentro de imagens/ e somente eles sejam copiados para o PV, porque o arquivo de deploy monta o diretório ‘/var/www/html/images’ no PV.
- As variáveis em .gitlab-ci.yaml devem ser verificadas e deve-se confirmar que as variáveis de ambiente configuradas no Gitlab estejam corretas.
- Pode-se utilizar o Dockerfile neste repositório para construir uma imagem local
para executar o script de atualização do esquema de banco de dados.
# Constrói a imagem. docker build --progress=plain -t wiki-img . # Faz login no container. docker run -e DB_SERVER="db_server" -e DB_NAME="db_name" -e DB_USER="db_user" -e DB_PASSWORD="db_password" --rm -it wiki-img bash # Executa o script de atualização. php maintenance/run.php update
- Após qualquer modificação eventual de configuração, fazer commit, criar tag e subir para o repositório remoto. O deploy de produção é ativado manualmente.