Jenkins Pipeline: Comment écrire les fichiers UTF-8 avec writeFile?

J'espère que ce n'est pas un bug et que je suis tout à fait quelque chose de mal. J'ai un Jenkins (v2.19.1) Pipeline d'emploi et c'est groovy script, j'ai besoin de rechercher et de remplacer du texte dans un fichier texte existant, sur un Windows nœud.

J'ai utilisé fart.exe et powershell pour faire de la recherche et de remplacement, mais je voudrais vraiment le faire avec le groovy dans Jenkins et éliminer la dépendance sur pet/powershell/etc. et rendre ce code plus réutilisable sur linux et windows nœuds.

Après beaucoup de recherches sur google et essayer différentes approches, le plus proche que j'ai eu était d'utiliser readFile et writeFile. Cependant, je n'ai pas été en mesure d'obtenir writeFile pour créer un fichier UTF-8. Il crée un fichier ANSI même quand je spécifier l'encodage UTF-8 (en supposant que je suis en train de faire correctement).

Voici ce que j'ai jusqu'à présent...

def fileContents = readFile file: "test.txt", encoding: "UTF-8"
fileContents = fileContents.replace("hello", "world")
echo fileContents
writeFile file: "test.txt", text: fileContents, encoding: "UTF-8"

J'ai confirmé avec plusieurs éditeurs de texte que l'test.txt le fichier est en UTF-8 quand j'ai commencer, et ANSI après le writeFile ligne. J'ai essayé toutes les combinaisons de la y compris/pas-y compris la propriété de codage et de "utf-8" vs "UTF-8". Mais dans tous les cas, le fichier est écrit comme ANSI (tel que rapporté par les deux Notepad++ et VS Code). Aussi, un point d'interrogation (HEX 3F) est ajouté en tant que premier caractère du fichier.

La ligne echo n'affiche pas les extra 3F personnage, il semble donc que le problème est dans le writeFile ligne.

Pouvez-vous tester sur un unix nœud ? Je viens de tester votre code sur mon Jenkins, et je n'ai eu aucun problème d'encodage lors de l'exécution du code par rapport à un unix nœud... je devine une sorte de problème avec le Windows nœud, soit sur OS le côté ou sur le plugin de côté lors de l'utilisation de Windows..
Je peux pas en ce moment. Seulement unix nœud que j'ai est maître, mais il s'exécute dans un conteneur Docker que je n'ai pas accès. À un certain moment, nous n'avons unix nœuds disponibles et peuvent essayer alors si je n'ai pas pensé à elle.

OriginalL'auteur Hoss | 2017-02-23