2016-12-06 17 views
4

Jenkinsを使用してReactネイティブアプリにContinuos Integrationを実装することは可能ですか?私はこれを行うためのガイドが見つかりませんでした。他にも解決策がある場合は、どのような解決策がありますか?また、iOSプロジェクトではMac OSマシンが必須ですか?JenkinsとReact Native(iOS + Android)プロジェクトのContinuosインテグレーション

+0

ねえ、運がこれを考え出しますか?現在、同じことをやろうとしています。 – justColbs

答えて

5

はい、完全に可能です。 XCodeやIDEの代わりに、コマンドラインからすべてのアクションを実行するだけです。 iOSの場合は、react-native bundle JSバンドルの作成コマンドを参照し、ネイティブコードのコンパイルにはxcodebuildxcrunを使用してください。あなたはグラデルassembleReleaseタスクを持っているので、Androidでは少し簡単です。その前にすべての依存関係を取得するにはnpm installを実行する必要がありますが、これはおおよそのものです。

iOSの開発に関しては、残念ながらその周りにはOS Xマシンが必要です。

+0

あなたはリンクを提供してもらえますか –

+0

残念ながら、React Nativeウェブページのトピックに関する文書はないので、特定の場所を指すのは難しいです。私は個人的には[fastlane](https://fastlane.tools/)を使い、かなり標準的な設定に従います。 – martinarroyo

+0

martinarroyo私が従うか、またはスクリプトの例がある他のドキュメントはありますか? – Jan

2

最初に、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 
+0

テストのために私たちは私たちのJenkinsfileでこれを持っている: 'builderNode { // TODO:レコードの結果 段階( "テスト"){ SH「ドッキングウィンドウの実行--rm -i '$ {imageName}'糸検査 " } }' – Cole

関連する問題