Tenho um Jenkinsfile que analisa um servidor local de artefatos em busca de novas versões do arquivo pai e das dependências. Quando confirmo que há uma nova versão, quero substituir a versão antiga por uma nova.
então dado um pom.xml contendo esta dependência:
<dependency>
<groupId>abcde</groupId>
<artifactId>xyz</artifactId>
<version>1.2.4</version>
</dependency>
... e suponha que haja uma versão mais recente 1.3.5 do abcde.xyz...
Gostaria de atualizar isso com o seguinte comando sed:
sed -i '/<dependency>/,/<\/dependency>/{
/<groupId>abcde<\/groupId>/{
/<artifactId>xyz<\/artifactId>/{
s/<version>1.2.4<\/version>/<version>1.3.5<\/version>/
}
}
}' pom.xml
Se eu criar um pom.xml contendo o xml acima ou somente o xml acima e executar essa instrução, o arquivo será modificado, mas nada mudará. A remoção do -i
sinalizador basicamente despeja o arquivo 1:1 na saída padrão - o que estou perdendo?
saída esperada:
<dependency>
<groupId>abcde</groupId>
<artifactId>xyz</artifactId>
<version>1.3.5</version>
</dependency>
(No jenkinsfile ele é parametrizado e escapado como abaixo, mas como a instrução básica não está funcionando, concentre-se nisso.)
sh """
sed -i '/<dependency>/,/<\\/dependency>/{
/<groupId>${groupId}<\\/groupId>/{
/<artifactId>${artifactId}<\\/artifactId>/{
s/<version>${version}<\\/version>/<version>${targetVersion}<\\/version>/
}
}
}' pom.xml
"""