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