美文网首页
Jenkins 配置

Jenkins 配置

作者: Jackson_Z | 来源:发表于2017-01-11 12:00 被阅读784次

1 安装Jenkins

Jenkins是基于Java开发的一种持续集成工具。所以呢,要使用Jenkins必须使用先安装JDK。

JDK安装:Java Development Kit


Jenkins安装

注意: 1、Jenkins 安装成功后,会创建一个Jenkins用户,而Jenkins的工作区间默认是在【/用户/共享/Jenkins/Home/jobs】目录下,可以用Finder-->前往,进入。
2、Jenkins目录下的文件夹的读写权限只对Jenkins用户开放,所以后面apple证书等必须在Jenkins用户下安装,项目的ipa导出也得在Jenkins用户下操作。(或者用管理员权限修改该目录针对用户的权限)
3、Jenkins的使用是每一个用户都可以使用,所以有可能导致构建版本的时候报错,还是老老实实在Jenkins用户下操作吧。

测试Jenkins安装成功 会自动打开浏览器

如果出现下面情况,则JDK有问题重新安装


下图表明安装成功

打开浏览器,输入http://localhost:8080,如果能够正常打开Jenkins,则Jenkins安装成功。
设置Jenkins用户

2.1 进入 系统偏好设置->用户与群组
2.2 点击左下角的解锁,输入当前用户的密码
2.3 此时Jenkins用户还是一个空的无名用户,可以在用户列表中选择Jenkins用户,右击并选择“高级选项”,输入全名并确定。

2.4 **点击“更改密码”重设Jenkins用户的密码。为了后期方便,可勾选“运行用户管理这台电脑”,将Jenkins用户设为管理员。 **
2.5 选择用户列表下方的登录选项,将自动登录用户设为Jenkins。

3.初始化Jenkins
重启以后,自动以Jenkins登录了。找到/Users/Shared/Jenkins/Home/ 这个目录下,打开initialAdminPassword文件,复制出密码,就可以填到网页上去重置密码了

Unlock Jenkins Customize Jenkins Creast First Admin User

常用插件

Keychains and Provisioning Profiles Management
Post-Build Script Plug-in
SSH Slaves plugin
Subversion Tagging Plugin
GitLab Plugin
Extended Choice Parameter Plug-In

配置项目

Snip20170111_6.png Snip20170112_8.png

配置代码

echo "准备开始打ipa包...................." 

#项目名称
project_name="HeiPiaoFishingBusiness"

#工程环境路径  
workspace_path="/Users/Shared/Jenkins/Home/workspace/IOS-B"

#build的路径
build_path="$workspace_path/$project_name"

#证书
CODE_SIGN_IDENTITY="iPhone Distribution: Shenzhen Heipiao Technology Co., Ltd. (456PY4GRQJ)"

#描述文件
PROVISIONING_PROFILE_APPSTORE="eea7f8c4-08c8-459d-ae9d-9ca66a5e529b"
PROVISIONING_PROFILE_AD_Hoc="fc6bf319-0114-4c0b-8d1c-e9f90419ffe9"


#蒲公英USER_KEY
USER_KEY="7b19054ef2a2aa2678cddbd33d1b10d5"

#蒲公英API_KEY
API_KEY="cafcda0bf7a09201f1d39cb2965a2c6f"

svn upgrade
#解决冲突文件
svn resolve --accept theirs-full "${build_path}/${project_name}/Dev_info.plist"
# info.plist路径
project_infoplist_path="$build_path/$project_name/Info.plist"

#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

DATE="$(date +%y-%m-%d-%H-%M-%S)"

#IPA名
appName_appStore="${project_name}_V${bundleShortVersion}_${DATE}_appStore"
appName_productNetTest="${project_name}_V${bundleShortVersion}_${DATE}_productNetTest"
appName_outNetTest="${project_name}_V${bundleShortVersion}_${DATE}_outNetTest"
appName_inNetTest="${project_name}_V${bundleShortVersion}_${DATE}_inNetTest"

#.app生成后的路径
app_path=$build_path/build/Build/Products/Release-iphoneos/${project_name}.app
app_Dev_path=$build_path/build/Build/Products/Release-iphoneos/${project_name}_Dev.app


#添加解锁
security unlock-keychain -p "0" "/Users/Shared/Jenkins/Library/Keychains/login.keychain-db"

cd $workspace_path



log=$(svn log |head -n 5) 
#  >不追加输出 >>追加输出
echo $log > log.txt

mkdir -p APPS


#IPA生成后的路径
ipa_appStore_path=$workspace_path/APPS/${appName_appStore}.ipa
ipa_productNetTest_path=$workspace_path/APPS/${appName_productNetTest}.ipa
ipa_outNetTest_path=$workspace_path/APPS/${appName_outNetTest}.ipa
ipa_inNetTest_path=$workspace_path/APPS/${appName_inNetTest}.ipa


echo "第一步,进入项目工程文件: $build_path"
cd $build_path

echo "第二步,执行build clean命令"
xcodebuild clean



#参数构建

#内网测试
if [ $para = "innet" ]; then 
echo "第三步,执行编译生成.app命令"
xcodebuild -workspace $project_name.xcworkspace -scheme "${project_name}_Dev" -sdk iphoneos GCC_PREPROCESSOR_DEFINITIONS="DEVELOPMENT=1 API_TYPE=0" PROVISIONING_PROFILE="$PROVISIONING_PROFILE_AD_Hoc" CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" IPHONEOS_DEPLOYMENT_TARGET="8.0" -configuration Release -derivedDataPath build

echo "第四步, 导出ipa包"
xcrun -sdk iphoneos PackageApplication -v ${app_Dev_path} -o ${ipa_inNetTest_path}

echo "制作 outNetTest ipa 包完成......................."

#路径写入文件
#echo "${ipa_inNetTest_path}" > $workspace_path/path.txt

cd /Users/Shared/Jenkins/Home/workspace
./upload.sh ${ipa_inNetTest_path} ${log}




#外网测试
elif [ $para = "outnet" ]; then 
echo "第三步,执行编译生成.app命令"
xcodebuild -workspace $project_name.xcworkspace -scheme "${project_name}_Dev" -sdk iphoneos GCC_PREPROCESSOR_DEFINITIONS="DEVELOPMENT=1 API_TYPE=1" PROVISIONING_PROFILE="$PROVISIONING_PROFILE_AD_Hoc" CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" IPHONEOS_DEPLOYMENT_TARGET="8.0" -configuration Release -derivedDataPath build

#echo "第四步, 导出ipa包"
xcrun -sdk iphoneos PackageApplication -v ${app_Dev_path} -o ${ipa_outNetTest_path}
echo "制作 outNetTest ipa 包完成......................."

#上传外网测试包到蒲公英
echo '++++++++++++++upload+++++++++++++'

#路径写入文件
#echo "${ipa_outNetTest_path}" > $workspace_path/path.txt

cd /Users/Shared/Jenkins/Home/workspace
./upload.sh ${ipa_outNetTest_path} ${log}



else

#生成APPSTORE包
echo "第三步,执行编译生成.app命令"
xcodebuild -workspace $project_name.xcworkspace    -scheme   $project_name   -sdk iphoneos GCC_PREPROCESSOR_DEFINITIONS="DEVELOPMENT=0 API_TYPE=2" PROVISIONING_PROFILE="$PROVISIONING_PROFILE_APPSTORE" CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" IPHONEOS_DEPLOYMENT_TARGET="8.0" -configuration Release -derivedDataPath build
echo "第四步, 导出ipa包"
xcrun -sdk iphoneos PackageApplication -v $app_path -o $ipa_appStore_path
echo "制作appStore ipa包完成......................."


#生产环境测试
echo "第二步,执行build clean命令"
xcodebuild clean
echo "第三步,执行编译生成.app命令"
xcodebuild -workspace $project_name.xcworkspace   -scheme   ${project_name}   -sdk iphoneos GCC_PREPROCESSOR_DEFINITIONS="DEVELOPMENT=0 API_TYPE=2" PROVISIONING_PROFILE="$PROVISIONING_PROFILE_AD_Hoc" CODE_SIGN_IDENTITY="$CODE_SIGN_IDENTITY" IPHONEOS_DEPLOYMENT_TARGET="8.0" -configuration Release -derivedDataPath build
echo "第四步, 导出ipa包"
xcrun -sdk iphoneos PackageApplication -v ${app_path} -o ${ipa_productNetTest_path}
echo "制作 productNetTest ipa 包完成......................."

#路径写入文件
#echo "${ipa_productNetTest_path}" > $workspace_path/path.txt

cd /Users/Shared/Jenkins/Home/workspace
./upload.sh ${ipa_productNetTest_path} ${log}


if [ $tag = "true" ]; then 
#tag
echo "打tag V${bundleShortVersion}_${DATE}"
svn cp -m  "打tag V${bundleShortVersion}_${DATE}"  https://192.168.1.201/svn/heipiao/app/ios/B/trunk/${project_name} https://192.168.1.201/svn/heipiao/app/ios/B/tags/V${bundleShortVersion}_${DATE}
fi

fi 

upload.sh代码

#!/bin/sh
echo '==============='
echo $*

while result=$(curl --retry 10 -F "file=@$1" -F "uKey=7b19054ef2a2aa2678cddbd33d1b10d5" -F "_api_key=cafcda0bf7a09201f1d39cb2965a2c6f" -F "updateDescription=$2" "https://qiniu-storage.pgyer.com/apiv1/app/upload")
echo  ${result}
do
    if [[ $result == '' ]]; then
        echo "upload fail" 
    else
        echo "upload success"
        break
    fi
done

没有Scheme,导致无法打包

命令行调用code sign时报错

security unlock-keychain -p "你的用户密码" ~/Library/Keychains/login.keychain

Mac下Jenkins+SVN+Xcode构建持续导出环境
Mac下Jenkins+SVN(Git)+Xcode搭建持续构建环境
手把手教你利用Jenkins持续集成iOS项目
基于xcodebuild和xcrun的自动化打包

xcodebuild -sdk xxx -target xxx GCC_PREPROCESSOR_DEFINITIONS="API_TYPE=0"  
API_TYPE=0 ,后面只能为数字 在下图配置
Snip20170111_1.png

基本配置

参数化构建 测试脚本 Jenkins地址 xcodebuild路径 设置编码 svn方式构建 构建出发机制

安卓配置

QQ20170114-0.png QQ20170114-1.png
  • 安卓shell脚本
#start
#项目名称
PROJECT_NAME="Android_B"

#工程环境路径
WORKSPACE_PATH="${JENKINS_HOME}/jobs/${PROJECT_NAME}/workspace"

#蒲公英USER_KEY
USER_KEY="7b19054ef2a2aa2678cddbd33d1b10d5"

#蒲公英API_KEY
API_KEY="cafcda0bf7a09201f1d39cb2965a2c6f"

# gradle.properties路径
VERSION_CODE_PATH="${WORKSPACE_PATH}/gradle.properties"

#取版本号
VERSION_CODE=`cat ${VERSION_CODE_PATH} | sed -n 's/.*VERSION_NAME=\(\S\)/\1/p' | tr -d '\r'`

echo ${VERSION_CODE}

#时间
DATE="$(date +%Y-%m-%d)"


#svn路径

SVN_TAG_PATH="https://192.168.1.201/svn/heipiao/app/andriod/B/tags"
#trunk_path
TRUNK_PATH="https://192.168.1.201/svn/heipiao/app/andriod/B/trunk"

SVN_USER="maimingliang"
SVN_PWD="maimingliang"

#tagName

TAG_NAME="v${VERSION_CODE}-${DATE}"


echo ${TAG_NAME}

 

 
if [ ${BUILD_TYPE} = 'ProductionRelease' ]&&[ ${IS_CREATE_TAG} = 'true' ]; then


echo "创建tag目录"

svn mkdir ${SVN_TAG_PATH}/${TAG_NAME} -m "mkdir tags ${TAG_NAME}" --username "$SVN_USER" --password "$SVN_PWD" --non-interactive


echo "打tag"

svn cp $TRUNK_PATH $SVN_TAG_PATH/${TAG_NAME} -m "tag version ${TAG_NAME}-${DATE}"  --username "$SVN_USER" --password "$SVN_PWD" --non-interactive


else

echo '不符合打tag的条件'

fi
 
 


#日志

LOG_STR=$(svn log --limit 1 --username=$SVN_USER --password=$SVN_PWD ${WORKSPACE_PATH})

echo ${LOG_STR}




#判断是否需要上传蒲公英

if [ ${BUILD_TYPE} = 'BetaOutdebug' ]; then

curl --retry 10 -F "file=@${WORKSPACE_PATH}/app/build/outputs/apk/hp-b-v${VERSION_CODE}-beta-${DATE}-outdebug.apk" -F "uKey=${USER_KEY}" -F "_api_key=${API_KEY}" https://qiniu-storage.pgyer.com/apiv1/app/upload

else

echo ${BUILD_TYPE}

fi


#判断是否需要打tag

#end

xcodebuild批量打包之区分不同的渠道

相关文章

网友评论

      本文标题:Jenkins 配置

      本文链接:https://www.haomeiwen.com/subject/antrbttx.html