zoukankan      html  css  js  c++  java
  • jenkins 配置。

    为了避免在jenkins操作过程中的权限问题。
    将安装在/Users/Shared/jenkins目录下的卸载。
    sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
    之后安装在/Users/LoginName/Jenkins 目录下
    java -jar /Applicaitons/Jenkins/jenkins.war --httpPort:8080
    一个小问题。在设置Editable Email Notificaiton 时。
    Triggers 中的Send To 不能是Developers应该用Recipient list

    1. http://www.cocoachina.com/ios/20160804/17281.html

    2. http://www.jianshu.com/p/ed0edb93e234

    3. 安装Jenkins

    a 从官网下载Jenkins(https://jenkins.io/)Mac OS X 对应的jenkins。之后傻瓜式安装。

    b 安装完成之后,Safari可能会自动打开,如果没有自动打开,打开浏览器,输入http://localhost:8080

    c 如果链接服务器失败,很可能是缺少JDK环境,在应用程序中找到Jenkens -> jenkins.rar 点击jenkins.rar会提示缺少JDK环境,点击更多信息。会进入JDK环境下载页面,接受协议,下载Mac os x环境下的JDK。

    d 按照教程进行配置。

     f  输入http://localhost:8080会提示Unlock jenkins 按照提示打开initialAdminPassword文件。由于jenkins下的secrets文件夹和initialAdminPassword被设置了权限。因此要右键 -> 显示简介 -> 共享与权限中更改权限。

    g 获取密码进行 初始化。

    h 配置SSH证书。注意此时的ssh应该是切换到jenkins模式下的ssh。生成ssh要把公钥添加到git上,私钥放在jenkins上,jenkins添加证书流程 主页 -> Credentials -> System -> Global credentials(Unrestricted) -> Add Credentials 设置SSH的私钥,同时用cat的形式获取完整的私钥。包括begin 和 end

    缺少的步骤:

    sudo dscl . passwd /Users/jenkins "YourPassword" 为jenkins这个用户设置一个密码

    su jenkins 切换到jenkins用户

    ssh-keygen -t rsa -C "你的邮箱标识" -f ~/.ssh/jenkins 生成使用的SSH

    之后将jen.pub的公钥加入进git。将jen私钥放入jenkins中。其中获取公钥和私钥时使用 cat jen 即显示"jen"整个文件的数据。

    i jenkins之触发器配置

    http://blog.sina.com.cn/s/blog_71bc9d680102x0n1.html

    二:

    1 设置SSH。添加私钥到 jenkins。添加公钥到git。要完整。(添加证书)

    2 在系统管理插件管理中添加插件:

      安装GitLab插件: 在“可选插件”中选中“GitLab Plugin”和“Gitlab Hook Plugin”这两项,然后安装。

       安装Xcode插件: 在“可选插件”中选中“Xcode integration”安装。

       安装签名证书管理插件: 在“可选插件”中选中“Credentials Plugin”和“Keychains and Provisioning Profiles Management”安装

       安装FTP插件: 在系统管理->管理插件,在“可选插件”中选中“Publish over FTP”安装。

     安装脚本插件: 在系统管理->管理插件,在“可选插件”中选中“Post-Build Script Plug-in”安装。

    3 邮件通知

        jenkins location中的系统管理员邮件地址。要设置的和Extended E-mail Notification中的使用SMTP授权的邮箱地址一样(包括E-mail Notification)。同事邮箱的密码不是常用的密码而是SMTP/POP3的授权码。由于E-mail Notification功能有限。故实际使用时使用Extended E-mail Notification来进行邮件的发送。使用E-mail Notification的“通过发送测试邮件测试配置”来进行邮件发送的测试。同时在Extended E-mail Notification中可以设置属性“Default Triggers”为Success,Failure-Any来接受jenkins构建成功和失败时的通知邮件。

    4 Keychains and Provisioning Profiles Management插件
       上传的login.keychanin而不是证书以及相应的PP文件。其中login.keychain的路径是/Users/电脑名(jisa)/Library/keychains/login.keychain.上传点击Upload。 进入jenkins目录。/Users/Shared/Jenkins/Library.里面是不是有keychains和MobileDevice文件夹。如果没有则拷贝过去。同时要更改权限为读和写。注意keychians里只需要login.keychian和login.keychian-db文件同时要解锁权限。

    五 新建一个自由风格的项目

    源码管理-设置git

    2 构建触发器。 只设置了poll SCM(检查代码更新。什么时候下拉代码。) Build periodically(构建周期。什么时候构建一次,没使用)

    3 构建环境。设置keychain和pp文件

    构建之XCode设置。

    构建Archive和ipa的脚本。

    if [ -d "${WORKSPACE}/builds" ]; then
        rm -rf ${WORKSPACE}/builds;
    fi;
    mkdir ${WORKSPACE}/builds;
    if [ -d "${WORKSPACE}/builds/${BUILD_NUMBER}" ]; then
        rm -rf ${WORKSPACE}/builds/${BUILD_NUMBER};
    fi;
    mkdir ${WORKSPACE}/builds/${BUILD_NUMBER};

    /usr/bin/security unlock-keychain -p pwd ~/Library/Keychains/login.keychain
    /usr/bin/security unlock-keychain -p pwd ~/Library/Keychains/login.keychain-db
    #注意${WORKSPACE}代表的路径。可以在jenkins的工作区看出来。
    xcodebuild -workspace ${WORKSPACE}/source/ios/O2oApp/O2oApp.xcworkspace -scheme "O2oApp" -configuration Release clean build -sdk iphoneos archive -archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/archive CODE_SIGN_IDENTITY="iPhone Distribution: Vision Credit  Financial Technology Company Limited (YWEH5GVC2C)"
    xcodebuild -exportArchive -archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/archive.xcarchive -exportPath ${WORKSPACE}/builds/${JOB_NAME} -exportOptionsPlist ${WORKSPACE}/source/ios/O2oApp/doc/O2oAppDebuge.plist

    非cocoapods类型的工程执行的shell脚本

    if [ -d "${WORKSPACE}/builds" ]; then
        rm -rf ${WORKSPACE}/builds;
    fi;
    mkdir ${WORKSPACE}/builds;
    if [ -d "${WORKSPACE}/builds/${BUILD_NUMBER}" ]; then
        rm -rf ${WORKSPACE}/builds/${BUILD_NUMBER};
    fi;
    mkdir ${WORKSPACE}/builds/${BUILD_NUMBER};
    xcodebuild -project ${WORKSPACE}/jenkinsTest.xcodeproj -scheme "jenkinsTest" -sdk iphoneos archive -archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/archive CODE_SIGN_IDENTITY="iPhone Developer: sa ji (96722ADU5M)"
    xcodebuild -exportArchive -archivePath ${WORKSPACE}/builds/${BUILD_NUMBER}/archive.xcarchive -exportPath ${WORKSPACE}/builds/test/${JOB_NAME}.ipa -exportOptionsPlist ${WORKSPACE}/dev.plist

    exportOptionsPlist的类型如下。是一个plist文件。可以通过xcodebuild -help来执行终端命令。

    使用SHELL脚本打包,不通过jenkins 直接执行脚本。

    #!/bin/sh
    
    export LC_ALL=zh_CN.GB2312;export LANG=zh_CN.GB2312
    cd ..
    base_path="`dirname $0`"
    base_path="`(cd "$base_path"; pwd)`"
    echo "路径$base_path"
    
    path_arr=$(echo $base_path|tr "/" "
    ")
    
    echo "分割路径 $path_arr"
    
    for s in ${path_arr[@]}
    do
    if [ "${s}"x = "ios"x ]; then
    app_path=`printf "$app_path/%s" $s`
    break
    else
    app_path=`printf "$app_path/%s" $s`
    fi
    
    done
    echo "app基本路径=$app_path"
    
    #############制定的Archive路径
    archivePath="/Users/vcredit_hzxh/Desktop/O2oApp"
    
    ###############进入项目目录
    projectName="O2oApp" #项目所在目录的名称
    isWorkSpace="$2"  #判断是用的workspace还是直接project,workspace设置为true,否则设置为false
    projectDir="${app_path}/O2oApp/" #项目所在目录的绝对路径
    
    ###############配置下载的文件名称和路径等相关参数
    
    
    ##########################################################################################
    ##############################以下部分为自动生产部分,不需要手动修改############################
    ##########################################################################################
    
    ####################### FUCTION  START #######################
    replaceString(){
    local inputString="$1"
    result="${inputString//(/}"
    result="${result//)/}"
    echo "$result"
    }
    
    rm -rf ./build
    ###############获取版本号,bundleID
    infoPlist="${projectDir}${projectName}/Info.plist"
    bundleDisplayName=`/usr/libexec/PlistBuddy -c "Print CFBundleDisplayName" $infoPlist`
    bundleVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $infoPlist`
    bundleIdentifier=`/usr/libexec/PlistBuddy -c "Print CFBundleIdentifier" $infoPlist`
    bundleBuildVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $infoPlist`
    ###############在网页上显示的名字和bundleDisplayName一致
    
    #修改编译环境
    #VV_BUILD_FOR_RELEASE 生产发布
    #VV_BUILD_FOR_TEST 公测
    #VV_BUILD_FOR_DEVELOP 内测
    #VV_BUILD_FOR_RELEASE_HOUSE  企业
    ######
    PREPROCESSOR_DEFINITIONS="VV_BUILD_FOR_RELEASE_HOUSE"
    #####
    
    
    if [ "${PREPROCESSOR_DEFINITIONS}"x = "VV_BUILD_FOR_RELEASE"x ]; then
    buildConfig="Release" #编译的方式,默认为Release,还有Debug等  Develop  TEST
    bundleDisplayName="Appstore"
    
    #  发布appstore用********
      CODE_SIGN="iPhone Distribution: Vision Credit  Financial Technology Company Limited (YWEH5GVC2C)"
      ProvisioningProfile="o2o_appstore_pro"
    
    elif [ "${PREPROCESSOR_DEFINITIONS}"x = "VV_BUILD_FOR_RELEASE_HOUSE"x ]; then
    buildConfig="Release_House"
    bundleDisplayName="企业生产"
    CODE_SIGN="iPhone Distribution: Vision Credit  Ltd"
    ProvisioningProfile="O2O_house_Profiles"
    
    elif [ "${PREPROCESSOR_DEFINITIONS}"x = "VV_BUILD_FOR_TEST"x ]; then
    buildConfig="TEST"
    bundleDisplayName="公测"
    CODE_SIGN="iPhone Distribution: Vision Credit  Ltd"
    ProvisioningProfile="O2O_house_Profiles"
    
    
    else
    buildConfig="Debuge"
    bundleDisplayName="内测"
    CODE_SIGN="iPhone Distribution: Vision Credit  Financial Technology Company Limited (YWEH5GVC2C)"
    ProvisioningProfile="o2oapp_develop_Profiles"
    
    fi
    
    appName=$bundleDisplayName
    echo "$bundleDisplayName"
    echo "v_$bundleVersion  b_$bundleBuildVersion"
    
    ##############开始编译app
    if $isWorkSpace ; then  #判断编译方式
    echo  "开始编译workspace111...."
    echo "$projectDir$projectName.xcworkspace"
    
    #xcodebuild -workspace ${projectDir}$projectName.xcworkspace -scheme $projectName GCC_PREPROCESSOR_DEFINITIONS="${PREPROCESSOR_DEFINITIONS}" -configuration $buildConfig CODE_SIGN_IDENTITY="${CODE_SIGN}"  clean build SYMROOT=$app_path
    xcodebuild -workspace ${projectDir}$projectName.xcworkspace -scheme $projectName -configuration $buildConfig clean build -sdk iphoneos archive -archivePath /Users/vcredit_hzxh/Desktop/jff/O2oApp CODE_SIGN_IDENTITY="${CODE_SIGN}"
    else
    echo  "开始编译target12222...."
    cd ${projectDir}
    xcodebuild -target $projectName -configuration $buildConfig clean build SYMROOT=$app_path
    fi
    #判断编译结果
    if test $? -eq 0
    then
    echo "编译成功"
    else
    echo "编译失败"
    echo "
    "
    exit 1
    fi
    
    ###############开始打包成.ipa
    #appDir="${app_path}/Release-iphoneos"  #app所在路径
    ipaDir="/Users/vcredit_hzxh/Document/IPA"  #ipa所在路径
    
    time=`date +%Y%m%d%H%M`
    echo $time
    #echo "------$appDir"
    #echo "开始打包$projectName.xcarchive成$projectName.ipa....."
    
    #ipaPath="$ipaDir/${time}_${bundleDisplayName}"
    #if [ ! -d $ipaPath} ];then
    #mkdir -p $ipaPath}
    #cd ipaPath}
    #fi
    
    #--------jff------
    if [ "${PREPROCESSOR_DEFINITIONS}"x = "VV_BUILD_FOR_RELEASE"x ]; then
    echo "AppStore"
    elif [ "${PREPROCESSOR_DEFINITIONS}"x = "VV_BUILD_FOR_RELEASE_HOUSE"x ]; then
    xcodebuild -exportArchive -archivePath /Users/vcredit_hzxh/Desktop/jff/O2oApp.xcarchive -exportPath /Users/vcredit_hzxh/Documents/IPA -exportOptionsPlist ${projectDir}doc/O2oAppEnterprise.plist
    elif [ "${PREPROCESSOR_DEFINITIONS}"x = "VV_BUILD_FOR_TEST"x ]; then
    echo "内侧"
    else
    echo "开发时"
    xcodebuild -exportArchive -archivePath $/Users/vcredit_hzxh/Desktop/jff/O2oApp.xcarchive -exportPath /Users/vcredit_hzxh/DeskTop/jff -exportOptionsPlist ${projectDir}doc/O2oAppDebuge.plist
    fi
    
    #xcodebuild -exportArchive -archivePath ${app_path}/O2oApp.xcarchive -exportPath /Users/vcredit_hzxh/DeskTop/jff -exportOptionsPlist ${projectDir}doc/O2oAppDebuge.plist
    #废弃的
    #xcrun -sdk iphoneos PackageApplication -v "$appDir/$projectName.app" -o "$ipaPath/${projectName}_${bundleDisplayName}_V${bundleVersion}(${bundleBuildVersion})_${time}.ipa" --embed "$ProvisioningProfile"
    #将app打包成ipa
    
    #cp -rp "$appDir/$projectName.app.dSYM" "$directory"
    #echo "ipa 路径=$ipaPath"
    
    rm -rf $appDir
  • 相关阅读:
    SpringBoot20 集成SpringSecurity02 -> 利用SpringSecurity进行前后端分离的登录验证
    Angular问题04 模块导入错误???、BrowserModule模块重复加载???、material模块引入后报错
    基于http的多进程并发文件服务器
    准备面试的那些事儿2
    ubuntu中解决/usr/bin/ld: cannot find -lxxx
    kafka学习之相关命令
    linux中制作动态库
    kafka之c接口常用API------librdkafka
    kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
    <c和指针>学习笔记6输入输出函数
  • 原文地址:https://www.cnblogs.com/jisa/p/6808507.html
Copyright © 2011-2022 走看看