Use o mecanismo CI para controlar a árvore de dependência do jar

1. Situação atual e problemas

Você ainda se lembra de seus esforços para solucionar conflitos de jar?

Para controlar efetivamente a introdução e as alterações de jars desconhecidos causados ​​pelas atualizações do pacote jar, geralmente usamos a árvore de dependências para visualizar as dependências e solucionar problemas. Normalmente, os problemas ocorrem e, em seguida, analisamos e solucionamos passivamente. é enorme, e o sistema está desatualizado. Problema, não se arrepende de remédio.

2. Analise os motivos

As dependências do pacote Jar são mutantes e invisíveis.Problemas causados ​​por conflitos de jar ocorrem frequentemente, e o P&D não pode prestar atenção às suas alterações todas as vezes.

3. Tome uma atitude

Adote um pensamento "ágil", dê pequenos passos e monitore regularmente as mudanças nas dependências do pacote jar todos os dias, para que os riscos possam ser antecipados e os problemas desconhecidos possam ser revelados proativamente.

A tecnologia resolve problemas, os recursos de CI/CD reduzem os custos de P&D, execução automática às 23:00 todos os dias, Todo o P&D presta atenção à mudança de documentos jar todos os dias ~

—— Usamos a árvore de dependências como um arquivo para controle de versão do git e, ao mesmo tempo, a mantemos no CI para controlar automaticamente as alterações nas dependências do jar, para que as alterações nas dependências possam ser descobertas imediatamente. O pipeline aciona regularmente a verificação da árvore de dependência todos os dias para garantir que ela esteja atualizada todos os dias. Quando qualquer alteração é encontrada, as alterações do documento são iniciadas imediatamente. Quando a P&D presta atenção ao mr, você pode verificar quem mudou o que no dia anterior e gerencie efetivamente o pacote jar.

4. Passos práticos

4.1 Criar Makefile

Diretório raiz: doc/dependency-tree.txt arquivo vazio

Makefile

dependency-tree:
	@mvn clean -U package -Dmaven.test.skip=true dependency:tree -Dverbose -DoutputFile=target/dependency-tree.txt --settings settings.xml
	@grep -v 'omitted for' wms-outbound-web/target/dependency-tree.txt | grep -vw "tests" | grep -vw "test" | sed -e 's/TEST-SNAPSHOT/SNAPSHOT/g' > doc/dependency-tree.txt
	@git add doc/dependency-tree.txt
	@git commit -m "fix: [CI make dependency-tree]依赖树变更"
	@git push origin HEAD:master

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings
        xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
        xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <localRepository>./maven/repository</localRepository>
    <profiles>
        <profile>
            <id>Repository</id>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>local private nexus</name>
                    <url>***</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <id>central</id>
                    <name>libs-releases</name>
                    <url>***</url>
                </repository>
                <repository>
                    <snapshots>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                    <id>snapshots</id>
                    <name>libs-snapshots</name>
                    <url>***</url>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>***</activeProfile>
    </activeProfiles>
</settings>

4.2 Modifique o arquivo gitignore

  • gitignore adicionar conteúdo
/maven

4.3 configurar bambu

Selecione uma configuração de pipeline acionada por tempo (pipeline mestre)

Adicione um átomo entre o átomo "Download Code" e o átomo "Maven Build": "Custom Script" (deve estar nesta ordem)

Bloco de código shell:

cd ${globalParams.system.APP_IDENTIFIER}
make
  • Seleção de controle de processo: falha ao continuar (motivo: o código de modificação do CI requer a revisão do sr, portanto, o mecanismo de revisão fará com que o push falhe, sem problemas)

4.4 configurar a codificação

Adicione a permissão mestre da conta xn_testdev_ci e adicione-a à permissão da lista de filiais de proteção ao mesmo tempo

5. Perceba o efeito

5.1 tronco de bambu

Após a execução, você pode ver o sucesso do log, basta pressionar para iniciar uma revisão

5.2 codificação de registros de RM

Você pode visualizar o mr iniciado pela conta bamboo "Test Development_Continuous Integration", basta revisá-lo (apenas alterar o arquivo da árvore de dependências)

6. Melhoria de desempenho

De 2021/10/19 até agora, esta prática encontrou 42 mudanças de dependência, 7 das quais encontraram problemas de código (P&D foi processado em tempo real, caso contrário, cada mudança de dependência desconhecida corresponderá a >1 custo de P&D)

Simulação de quantificação de eficiência: 2021/10/19 ~ presente

Antes da melhora (/pessoa-dia) Após a melhoria da eficiência (/pessoa-dia)
O problema de conflito do pacote jar ocorre pela primeira vez 2 (foi descoberto hoje que o frasco problemático foi introduzido por meio ano, e o custo da investigação de mão de obra é enorme) 0,1 (Anomalias foram encontradas e processadas com antecedência, o custo inicial é extremamente baixo e esse conflito é evitado)
O problema de conflito do pacote jar ocorre pela segunda vez 2.5 (Amanhã, será verificado que a árvore de dependências mvn precisa ser verificada uma a uma, e será verificado que o jar foi introduzido antes e o custo é maior) 0.5 (conflitos ocorrem imediatamente, analise o git history do doc para localizar e introduzir alterações diretamente)
O problema de conflito do pacote jar ocorreu pela terceira vez 3 (Depois de muitos dias, descobriu-se que o momento da introdução do jarro problemático não podia mais ser rastreado e a relação de dependência era caótica, então só poderia ser pesquisada e desenvolvida para perguntar e relembrar) 0.5 (o mesmo que acima, o posicionamento do histórico doc git introduz alterações)
O problema de conflito do pacote jar ocorre mais de n vezes, o cálculo do custo total >2*n <0,5*n

7. Breve resumo

[conflito de pacote jar] é um problema para todo repositório de código e todo pesquisador!

  • Se "pudermos evitar problemas e prevenir riscos", então "os custos de manutenção serão inevitavelmente reduzidos e o desempenho diário será melhorado" na fase posterior.
  • Usando o mecanismo CI/CD, a árvore de dependência do pacote jar é gerenciada e controlada no git como um arquivo doc, e um instantâneo é registrado para cada alteração, e a iteração é desmontada e iterada de acordo com a ideia "ágil" (o ciclo é 23:00 todos os dias) para verificar automaticamente as dependências, o mais cedo Descubra e lide com isso primeiro, não seja mais passivo, tome a iniciativa de atacar!

Autor: Zhou Yiru da JD Logistics

Fonte: Reimpresso de Yuanqishuo Tech pela comunidade de desenvolvedores JD Cloud, indique a fonte

Acho que você gosta

Origin blog.csdn.net/jdcdev_/article/details/132318469
Recomendado
Clasificación