コマンドに複数行の文字列を使用するgitlab-ci.yml
ファイルを作成しようとしています。ただし、解析されていないようです。 - |
と- >
の両方を試してみましたが、結果は同じです。
stages:
- mystage
Build:
stage: mystage
script:
- |
echo -e "
echo 'hi';
echo 'bye';
"
実行しようとすると、実行するスクリプトとしてecho -e '
のみが表示され、複数行の文字列全体は表示されません。これは私にとって問題を引き起こします。
このようなものを書くための正しい構文は何でしょうか?
TL; DR; Gitlab-CIがコマンドとして発行できる単一行の文字列として読み込まれる複数行のYAMLスカラー(読みやすくするため)を使用する場合。これを行うには、YAMLでプレーンな(引用符なしの)スカラーを使用して、複数の行に展開します。
script:
- echo -e
"echo 'hi';
echo 'bye';"
そのようなスカラーにはYAMLによって課せられるいくつかの制限があることに注意してください。必ず知っておく必要があるのは、後続の各行がecho -e
(インデントされていないコレクションノードに対して2つの位置にインデントされている)より少なくとも1つ多くインデントされていること、およびすべての改行ロード時にスペースに置き換えられます(そのため、改行を配置する場所に少し注意する必要があります)。
投稿には複数の誤解があり、間違った質問をすることにつながります。
複数行のYAML文字列のようなものはありません。 YAMLにはスカラーがあり、これらのスカラーの一部はプログラムによって文字列としてロードできますが、他の一部のスカラーは整数、浮動小数点などとしてロードされます。
文字列をコマンドラインとして解釈できるため、文字列としてロードされるスカラーノードに明らかに興味があります。ただし、 複数行スクリプト はGitlab CIでサポートされていないため(@Jordanが示したように)、複数行のコマンドライン(つまり、改行が埋め込まれている)は必要ありません。
読みやすくするために、YAMLの標準機能を使用して、複数行のスカラーを単一行の文字列としてロードします。
読みやすさを気にしない場合は、次を使用できます。
- echo -e "\n echo 'hi';\n echo 'bye';\n"
また、スカラーは引用符で囲まれていない(つまり、echo
で始まる)ため、バックスラッシュまたは引用符に対してYAMLで特別なことをする必要はありません。
スクリプトの結果は同じです(空行を印刷し、4つのスペースをインデントした行にecho 'hi';
を印刷し、4つのスペースをインデントした行にecho 'bye';
を印刷します。)
読みやすくするために単一行として読み込まれる複数行入力を使用する場合、基本的に2つのオプションがあります。複数行プレーンスカラーを使用するか、YAMLで折り畳まれたスカラーを使用します。
Plainはスカラーが引用符で囲まれていないことを意味し、YAMLの複数行のものと同様に、複数行は後続の行を適切にインデントする必要があることを意味します。この場合、最初の行よりもさらに
script:
- echo -e
"echo 'hi';
echo 'bye';"
改行はスペースに置き換えられるため、実行しないでください。
script:
- echo -e
"echo 'hi';
echo '
bye';"
bye
の前にスペースが表示されます。
そのようなスカラー内にスペースが続くコロンを使用できないなど、いくつかの制限があります(これにより、キーと値のペアのようになります)。
プレーンスカラーの文字をエスケープすることはできないため、プレーンスカラーのバックスラッシュをエスケープする必要はありませんが、もちろん、バックスラッシュを含めることができます。バックスラッシュは、YAMLからロードされた文字列になり、canは、その文字列から実行されるコマンドに意味があります。
折り畳まれたスカラーは、ロード中にすべての(単一の)改行がスペースに置き換えられるという点で、プレーンスカラーに似ています。
script:
- >
echo -e
"echo 'hi';
echo 'bye';"
実際のコマンド情報は、少なくとも折りたたみスカラーインジケーター(>
)と同じくらいインデントする必要があります。
:
のような単純なスカラーに反して、特別な意味はありません。したがって、プレーンスカラーがYAMLエラーをスローして失敗した場合、同様のフォールドスカラーはほとんど失敗しません。
これが問題になると先手を打ってここに来ましたが、次の読みやすさの「複数行」コマンドが機能しています。
Gitlab Runner: Shell Runnerバージョン1.11.0/Gitlab Runner: 8.17.2
myjob:
stage: deploy
script:
# Single line command
- az component update --add sql
# Multi-line command
- az sql server create -n ${variable} -g ${variable} -l ${variable}
--administrator-login ${variable} --administrator-login-password ${variable}
Yaml literal_blockおよびアンカー機能を介して、複数行のスクリプト/コマンドを使用できます。例:
.build: &build |
echo -e "\n$hl???? Building $green$build_path/$build_assets_dir/*.js $nl\n"
echo -e "javascript-obfuscator $build_path/$build_assets_dir/*.js"
[...]
build:master:
stage: build
script:
- *rsync
- *build
[...]
Wp config createコマンドは... .gitlab-ci ...
build:
stage: build
script:
- echo "Building the app"
- |
wp config create --dbname=$vardb --dbhost=$varhost --dbuser=$varusr --dbpass=$varpas --extra-php <<PHP
define( 'WP_DEBUG', false );
define( 'FS_METHOD', 'direct' );
define( 'WP_POST_REVISIONS', 5 );
define( 'AUTOSAVE_INTERVAL', 600 );
PHP
- scp ./wp-config.php continued...
allow_failure: true
Travis CIでの作業
before_install:
- set -e
- |
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<settings xmlns=\"http://maven.Apache.org/SETTINGS/1.0.0\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xsi:schemaLocation=\"http://maven.Apache.org/SETTINGS/1.0.0
http://maven.Apache.org/xsd/settings-1.0.0.xsd\">
<servers>
<server>
<id>github</id>
<username>${GITHUB_USERNAME}</username>
<password>${GITHUB_PASSWORD}</password>
</server>
</servers>
</settings>
" > ${HOME}/.m2/settings.xml
ここでは、2つのenv変数(${GITHUB_USERNAME}
および${GITHUB_PASSWORD}
)も補間されます