Les éléments suivants empêchent travis de se construire du tout. Lorsque j'essaie de valider le travis.yml
, il se plaint que la ligne juste au-dessus de l'instruction if manque un -
caractère dans la colonne 3, mais l'erreur est liée à l'instruction if ci-dessous.
Dois-je déplacer l'instruction if dans un script?
# Deploy
after_success:
- ./tools/docker-Push-container.sh
- if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh
fi
Vous faites certaines hypothèses sur la syntaxe YAML qui vous posent des problèmes. Si vous "étendez" une ligne de YAML en mettant en retrait les lignes suivantes, comme ceci:
- The quick brown fox
jumped over the
lazy dog.
C'est exactement comme vous l'avez écrit à la place:
- The quick brown fox jumped over the lazy dog.
Cela signifie que votre fragment Shell, que vous avez écrit comme suit:
- if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh
fi
Devient en fait:
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh fi
Et si vous essayez d'exécuter cette ligne dans le shell, vous obtenez:
sh: -c: line 1: syntax error: unexpected end of file
Si vous souhaitez inclure un script Shell sur plusieurs lignes dans votre document YAML, le mieux est probablement d'utiliser l'opérateur de bloc textuel, |
, comme ça:
- |
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh
fi
Ce qui se traduira, comme prévu, par:
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh
fi
Alternativement, vous pouvez simplement utiliser correctement les points-virgules:
- if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh;
fi
Notez le nouveau ;
avant le terminal fi
. Il en résulte:
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh; fi
... qui est une syntaxe Shell parfaitement valide.
J'ai essayé la solution ci-dessus par larsks mais, cela n'a pas fonctionné pour moi et pourrait être parce que dans bash
lorsque vous utilisez &&
et ||
vous devez séparer les conditions.
J'ai eu ce qui suit (selon la solution ci-dessus)
- if [ $TRAVIS_PULL_REQUEST == false && $TRAVIS_BRANCH == "development" ]; then
echo "# Bump version and flyway migrate db";
else
echo "Skip version increment!";
fi
Et j'ai aussi vérifié le .travis.yml
in Travis Lint et il apparaît comme valide mais, selon bash, ce qui précède peut être séparé comme indiqué ci-dessous, également mentionné dans ce SO Question et je suis passé à ce qui suit
- if [ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH == "development" ]; then
echo "# Bump version and flyway migrate db";
else
echo "Skip version increment!";
fi
Et travis build a fonctionné. Cela a du sens car ci-dessus est une manière valide d'utiliser && et || en bash. Juste partager au cas où quelqu'un d'autre rencontrerait un problème similaire.
Aucune des solutions de contournement suggérées n'a fonctionné pour moi, je l'ai utilisé à la place:
- if [[ ( "$TRAVIS_OS_NAME" == "osx" ) && ( "$TOXENV" == "py36" ) ]]; then brew update; fi
La solution de Raf a fonctionné pour moi en séparant les conditions avec []
[ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH == "develop" ];