Jenkinsを使用してReactネイティブアプリにContinuos Integrationを実装することは可能ですか?私はこれを行うためのガイドが見つかりませんでした。他にも解決策がある場合は、どのような解決策がありますか?また、iOSプロジェクトではMac OSマシンが必須ですか?JenkinsとReact Native(iOS + Android)プロジェクトのContinuosインテグレーション
答えて
はい、完全に可能です。 XCodeやIDEの代わりに、コマンドラインからすべてのアクションを実行するだけです。 iOSの場合は、react-native bundle
JSバンドルの作成コマンドを参照し、ネイティブコードのコンパイルにはxcodebuild
とxcrun
を使用してください。あなたはグラデルassembleRelease
タスクを持っているので、Androidでは少し簡単です。その前にすべての依存関係を取得するにはnpm install
を実行する必要がありますが、これはおおよそのものです。
iOSの開発に関しては、残念ながらその周りにはOS Xマシンが必要です。
あなたはリンクを提供してもらえますか –
残念ながら、React Nativeウェブページのトピックに関する文書はないので、特定の場所を指すのは難しいです。私は個人的には[fastlane](https://fastlane.tools/)を使い、かなり標準的な設定に従います。 – martinarroyo
martinarroyo私が従うか、またはスクリプトの例がある他のドキュメントはありますか? – Jan
最初に、AndroidとiOSの両方で動作するコマンドラインビルドを取得することです。 XcodeやAndroid Studioのログをピークにして、いくつかのコマンドをコピーすることができます。
build.shスクリプトを、Jenkinsジョブから呼び出すことができるiosおよびAndroidの各フォルダに配置して、それぞれのターゲットを作成します。両方を呼び出すプロジェクトルートにbuild.shを置くことができます。
藤堂:私はジェンキンスジョブにeslint Airbnbを実行し、レポートを生成する方法を見つけ出すしたいですか?ここで
は、Xcodeの9で動作します私のiOS build.shスクリプトです:
#!/bin/sh
############################################
# File: build.sh
# -----------------------
# Author: [email protected]
#
# Command line build:
# 1) clean
# 2) build
# 3) archive
# 4) export IPA
#
# http://shashikantjagtap.net/xcodebuild-deploy-ios-app-command-line/
# https://help.apple.com/itc/apploader/e3#/apdATD1E53-D1E1A1303-D1E53A1126
#
isInPath=$(which xcodebuild)
if [ ! -x "${isInPath}" ] ; then
echo "*** Error xcodebuild not found in path"
exit 1
fi
isInPath=$(which xcrun)
if [ ! -x "${isInPath}" ] ; then
echo "*** Error xcrun not found in path"
exit 1
fi
echo "### Start: Cleaning ###############################################################"
rm -rf build
xcodebuild -project MyApp.xcodeproj -scheme MyApp -destination generic/platform=iOS clean
echo "### Done: Cleaning ###############################################################"
# Analyze
# xcodebuild -project MyApp.xcodeproj -scheme MyApp -sdk iphoneos clean analyze
echo "### Start: Building ###############################################################"
# xcodebuild -project MyApp.xcodeproj -target MyApp -showBuildSettings
# xcodebuild -project MyApp.xcodeproj -scheme MyApp -destination generic/platform=iOS build
# Run pod install once before building workspace
pod install
# Now using a Podfile so have to build workspace not build project
xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -destination generic/platform=iOS build
echo "### Done: Building ###############################################################"
CFBundleShortVersionString=`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" ./MyApp/Info.plist`
CFBundleVersion=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" ./MyApp/Info.plist`
echo "CFBundleShortVersionString: ${CFBundleShortVersionString}"
echo "CFBundleVersion: ${CFBundleVersion}"
ipaFileName=MyApp.ipa
renameIpaFileName="field-scout-${CFBundleShortVersionString}.${CFBundleVersion}.ipa"
echo "### Start: Archiving ###############################################################"
# xcodebuild -project MyApp.xcodeproj -scheme MyApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/MyApp.xcarchive
# Now using a Podfile so have to build workspace not build project
xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/MyApp.xcarchive
echo "### Done: Archiving ###############################################################"
echo "### Start: Exporting ###############################################################"
xcodebuild -exportArchive -archivePath $PWD/build/MyApp.xcarchive -exportOptionsPlist MyApp/ExportOptions.plist -exportPath $PWD/build
ls -al build
echo "### Done: Exporting ###############################################################"
appArchiveFile=build/${ipaFileName}
if [ ! -f "${appArchiveFile}" ]; then
echo "*** Error file not found: ${appArchiveFile}"
exit 1
fi
# Extract and verify archive contents
echo "### Unzip: ${ipaFileName} ###############################################################"
(cd build; unzip -q ${ipaFileName})
(cd build/Payload; xcrun codesign -dv MyApp.app/)
outputFile=build/Payload/MyApp.app
if [ ! -d "${outputFile}" ]; then
echo "*** Error file not found: ${outputFile}"
exit 1
fi
rm -rf ./build/Payload
rm -rf ./build/Symbols
# altool is used to verify iOS IPA files
altool_path=/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/Current/Support
isInPath=$(which altool)
if [ ! -x "${isInPath}" ] ; then
echo "*** Error altool not found in path"
echo "Expected altool path:\n ${altool_path}"
exit 1
fi
# altool validate will trigger a user dialog first time it is run.
# On a jenkins slave you will need to execute manually in a console once, to allow keychain access.
# $ altool --validate-app -f file -u username [-p password] [--output-format xml]
# $ altool --upload-app -f file -u username [-p password] [--output-format xml]
altool --validate-app -f build/${ipaFileName} -u [email protected] -p @keychain:"Application Loader: [email protected]"
altool --validate-app -f build/${ipaFileName} -u [email protected] -p @keychain:"Application Loader: [email protected]" --output-format xml > build/validate.xml
altoolValidate=$?
if [ ${altoolValidate} -ne 0 ]; then
echo "*** Error IPA failed to validate: build/${ipaFileName}"
echo "See: build/validate.xml"
exit 1
fi
echo "Rename build/${ipaFileName} to build/${renameIpaFileName}"
mv ./build/${ipaFileName} ./build/${renameIpaFileName}
echo ##############################
echo Done
echo ##############################
echo Ready to upload archive to iTunes:
echo " ${appArchiveFile}"
echo
uploadExample="$(echo altool --upload-app -f build/${renameIpaFileName} -u [email protected] -p @keychain:"Application Loader: [email protected]")"
echo "Upload Example:\n ${uploadExample}"
echo
テストのために私たちは私たちのJenkinsfileでこれを持っている: 'builderNode { // TODO:レコードの結果 段階( "テスト"){ SH「ドッキングウィンドウの実行--rm -i '$ {imageName}'糸検査 " } }' – Cole
- 1. React Native Android/IOSのベストプッシュサービスオプション?
- 2. iOS - Jenkins/Fastlaneとの継続的インテグレーション
- 3. React Native [iOS]データベースオプション
- 4. React Native iOS
- 5. Cloudant continuos replication Android
- 6. React Native、Androidのライフサイクルとナビゲーション
- 7. React Native Android Webview
- 8. React Native - initialProperties Android
- 9. React native for android
- 10. React Nativeサポート(iOSとAndroid)のどのバージョンですか?
- 11. React Native Androidのグリッドビュー
- 12. React Native Realmプロジェクトの構造
- 13. Jenkins - コマンドラインビルドiOSプロジェクト
- 14. React NativeはiOSやAndroidプロジェクトを再初期化するだけです
- 15. iOS Jenkins、Hockeyとの継続的インテグレーションとバージョンアップ
- 16. React-native Android dexDebug FAILED
- 17. React Native ScrollviewアナログAndroid
- 18. Android React Native build fail
- 19. Google Maps in React-Native(iOS)
- 20. iOS iPad simulator with React Native
- 21. react-nativeからcreate-react-native-appにプロジェクトをアップグレードしますか?
- 22. Docker Jenkinsインテグレーション
- 23. React-Nativeアプリケーション用プラットフォーム固有のios/android typescriptファイルの相対インポート
- 24. Err import react-native-audio + react-native-sound?
- 25. React Native iOSでカスタムフォントファミリを追加
- 26. ReactとReact Native with Express
- 27. react-native run-ios child_process.js:506 throw err
- 28. JenkinsのAndroidプロジェクトbuild
- 29. React-Native TabNavigatorとModular
- 30. React-native-fbsdkビルドエラー
ねえ、運がこれを考え出しますか?現在、同じことをやろうとしています。 – justColbs