CICDパイプラインでFastlanを使用して圧縮ビルドファイルのサイズを記録しようとしています。コマンドラインでこれを試した場合:
du -h fileName.ipa | awk '{print $1}'
良い結果。ただし、次のようにスクリプトに入れようとすると、次のようになります。
sh '''
# Add filesize to release message
var fileName=`cat '"#{IPA_FILE_NAME_FILE}"'`
fileSizeInfo=(du -h '"#{IPA_FILE_PATH}"'$fileName | awk '{print $1}')
echo "$buildInfo"
sed -i -e "s|FILESIZE_INFO|'"$fileSizeInfo"'|g" '"#{RELEASE_MESSAGE_HTML_FILE_NAME}"'
'''
次の構文エラーが発生します。
[17:50:24]: 262: var fileName=`cat '"#{IPA_FILE_NAME_FILE}"'`
[17:50:24]: => 263: fileSizeInfo=(du -h '"#{IPA_FILE_PATH}"'$fileName | awk '{print $1}')
[17:50:24]: 264: echo "$buildInfo"
[17:50:24]: 265: sed -i -e "s|FILESIZE_INFO|'"$fileSizeInfo"'|g" '"#{RELEASE_MESSAGE_HTML_FILE_NAME}"'
[!] Syntax error in your Fastfile on line 263: Fastfile:263: syntax error, unexpected '{', expecting `end'
..._FILE_PATH}"'$fileName | awk '{print $1}')
... ^
Fastfile:285: syntax error, unexpected `end', expecting end-of-input
end
^~~
私はシェルスクリプトが初めてなので、助けてくれてありがとう。間違った場所から引用した可能性があります。役に立つなら、FastlanはRuby構文を使用するので、そこにRuby文字列補間があります。
編集する:
詳細については、クイックファイルから呼び出されるフルパスは次のとおりです。
# Send message MS Teams Channel
lane:sendTeamsMessage do |options|
=begin
MS Teams messages are sent using webhooks and it got limited support to HTML and Markdown.
This implementation uses HTML formatted message.
Webhook will not accept new lines or double quotes because it can break the JSON struture.
The message file preparation is done in multiple steps.
1. Add .ipa file size info to release message HTML
2. Replace all double quotes with single quotes
3. Copy the Teams message payload template and update it with the message content
4. Replace 'MESSAGE_INFO' string with the HTML formatted content file
5. Send the message to Teams channel
=end
sh '''
# Add filesize to release message
var fileName=`cat '"#{IPA_FILE_NAME_FILE}"'`
var fullFilePath='"#{IPA_FILE_PATH}"'$fileName
echo fullFilePath
fileSizeInfo=(du -h $fullFilePath | awk '{print $1}')
echo "$buildInfo"
sed -i -e "s|FILESIZE_INFO|'"$fileSizeInfo"'|g" '"#{RELEASE_MESSAGE_HTML_FILE_NAME}"'
'''
sh '''
# Copy the release message html file
cp -fr '"#{RELEASE_MESSAGE_HTML_FILE_NAME}"' '"#{TEAMS_MESSAGE_FILE_NAME}"'
'''
# Replace all double quotes with single quotes to make it JSON friendly
sh("sed","-i","-e","s|\"|\'|g","#{TEAMS_MESSAGE_FILE_NAME}")
sh'''
cp -fr '"#{TEAMS_PAYLOAD_TEMPLATE_FILE_NAME}"' '"#{TEAMS_PAYLOAD_FILE_NAME}"'
message=`cat '"#{TEAMS_MESSAGE_FILE_NAME}"'`
sed -i -e "s|MESSAGE_INFO|'"$message"'|g" '"#{TEAMS_PAYLOAD_FILE_NAME}"'
'''
# Send the message to Teams channel
sh '''
echo '"#{options[:webhook]}"'
curl -H "Content-Type: application/json" -d @'"#{TEAMS_PAYLOAD_FILE_NAME}"' '"#{options[:webhook]}"'
'''
end
ファイルパス/名前を独自の変数に移動しようとしましたが、まだ同じ問題があります。
ベストアンサー1
bash
コマンド出力をキャプチャするイディオムは次のとおりです。
du -h fileName.ipa | awk '{print $1}'
出力を変数に保存するには:
fileSizeInfo=$(du -h fileName.ipa | awk '{print $1}')
$
これは、コードに欠けている点を除いて、スクリプトのBash部分の行と非常によく似ています(
。これが混乱した出力の主な原因であるようです。