Jenkins持续集成pipeline的使用

一. pipeline介绍

1.1 What is Jenkins Pipeline?

https://www.jenkins.io/doc/book/pipeline/#overview
Jenkins Pipeline (or simply "Pipeline" with a capital "P") is a suite of plugins which supports implementing and integrating continuous delivery pipelines into Jenkins.
解释的咱也没怎么看懂,总结一点就是,jenkins job看着很干净,有利于管理,复制job,你可以把所有拉代码,打包,构建项目工程发布等步骤全部放在一个文件里,这个文件上传到github上,使用很方便,话不多说

1.2 新建一个job

New Item.png

Job.png

1.3 配置build需要的参数,该参数全局可用

image.png

1.4 拉取代码,并指定分支

Pull code.png

1.5 创建子文件夹,设置pipeline读取的Jenkinsfile 路径

该路径是1.4步骤中拉取代码之后的Jenkinsfile的相对路径(如图1.6)


image.png

1.6 pipeline读取的script文件,拉完代码之后,jenkins就会执行该Jenkinsfile中的脚本,继续打包等接下来步骤

1.6.png

1.7 Jenkinsfile文件的脚本,我这里是mac,使用的是shell脚本,主要做的事是:iOS项目编译,archive,重签名

pipeline {
    agent {
     # 指定node节点
       node { label 'Mini-Mac-builder-SH-SSD-M1' } 
    }
#配置静态变量
   environment {
      ipa_name="EAM"
      APP_VER="3.9.0"
      ipa_full_name="${ipa_name}-${BUILD_TYPE}-${APP_VER}.${BUILD_NUMBER}"
   }
   // 配置超时时间
   options { timeout(time: 10, unit: 'MINUTES') }
    stages {
      #拉取第三方代码
        stage('pull common release-2.4-eam3.9 for eam3.9') {
            steps {
                dir(path: "./OneSource-CommonLib") {
                    git(
                       branch: "release-2.4-eam3.9",
                       credentialsId: "6414ec98-hhhh-hhhh-b800-hhhhhhhhhhhfd",
                       url : "https://hhhhhhhhhhhhhhhLib.git",
                       changelog: true,
                    )
                 }
             }
        }
        stage('ipa build') {
            steps {
                sh label: '', 
                script: 
                '''
                    project_name="EAMInventory"
                    info_plist_name="info"
                    build_configuration="Release"
                    fold_name="OneSource-EAM"
                    fold_sub_name="iOS"
                    APP_DISPLAY_NAME="OS EAM"
                    EAM_NAME="EAM"
                        
                PROVISIONING_PROFILE_DEV="41c0291a-hhhh-hhhh-87bc-hhhhhhhh"
                    CERTIFICATE_SHA1_DEV="hhhhhhhhhhhhhhhhD40E855390BA0C72"
                    DEV_BUNDLEID="com.perkinelmer.ehhhhhhhh"
                    
                    
                    PRO_CER_NAME="iPhone Distribution: PerkinElmer hhhhhhh, Inc"
                    PRO_BUNDLEID="com.perkinelmer.hhhhhhhh"
                    PRO_PROFILE="12329c66-d1c9-hhhh-hhhh-062e478ac7ef"

                    info_plist_path="${WORKSPACE}/${fold_name}/${fold_sub_name}/${project_name}/${info_plist_name}.plist"

                    chmod a+rw ${info_plist_path}
                    archivePlist_path="${WORKSPACE}/${fold_name}/iOS/buildScript"
                    /usr/libexec/PlistBuddy -c "Set :provisioningProfiles:${DEV_BUNDLEID} ${PROVISIONING_PROFILE_DEV}" "${archivePlist_path}/archive.release.plist"
                    /usr/libexec/PlistBuddy -c "Set :signingCertificate ${CERTIFICATE_SHA1_DEV}" "${archivePlist_path}/archive.release.plist"
                    /usr/libexec/PlistBuddy -c "Set CFBundleVersion ${APP_VER}.${BUILD_NUMBER}" "${info_plist_path}"
                    
                   # xxxx为keychain 密码
                    security unlock-keychain -p xxxxxxxx
                
                    cd ${WORKSPACE}/${fold_name}/ReactNative
                    #npm install
                    #export PATH=$PATH:/usr/local/bin
                    react-native bundle --entry-file index.ios.js --platform ios --bundle-output build/main.jsbundle --sourcemap-output build/main.jsbundle.map --assets-dest build/ --dev false
                    cd ../iOS
                    export LANG=zh_CN.UTF-8
                    #rm -rf podfile.lock
                    #pod install
                
                    xcodebuild -workspace "EAMInventory.xcworkspace" -scheme EAMInventory -archivePath ${WORKSPACE}/build/EAMInventory.xcarchive -configuration "Release" archive
                    xcodebuild -exportArchive -archivePath ${WORKSPACE}/build/EAMInventory.xcarchive  -exportPath ${WORKSPACE}/EAMInventoryIpa  -exportOptionsPlist ${archivePlist_path}/archive.release.plist
   
                    mkdir -p ${WORKSPACE}/IPA
                    PROJECT_PATH="${WORKSPACE}/EAMInventoryIpa/${project_name}"

                    if [ "${BUILD_TYPE}" = "Release" ]
                    then

                        PROFILE_PATH="/Users/mini/Library/MobileDevice/Provisioning Profiles/${PRO_PROFILE}.mobileprovision"
                        open /Users/mini/workspace/iOSAppSigner.app --wait-apps --args -ipa ${PROJECT_PATH}.ipa -ipaout ${PROJECT_PATH}-resigned.ipa -cert "${PRO_CER_NAME}" -profileloc "${PROFILE_PATH}" -newAppId ${PRO_BUNDLEID} -appName "${APP_DISPLAY_NAME}"
                         mv "${PROJECT_PATH}-resigned.ipa" "${WORKSPACE}/IPA/${EAM_NAME}-${BUILD_TYPE}-${APP_VER}.${BUILD_NUMBER}.ipa"
                    else  
                       mv "${PROJECT_PATH}.ipa" "${WORKSPACE}/IPA/${EAM_NAME}-${BUILD_TYPE}-${APP_VER}.${BUILD_NUMBER}.ipa"
                       mkdir /Users/mini/Desktop/crashLog/QAFiles/EAMInventory/EAMbeta${APP_VER}.${BUILD_NUMBER}
                       cp -af /Users/mini/workspace/analyseCrash.sh /Users/mini/Desktop/crashLog/QAFiles/EAMInventory/EAMbeta${APP_VER}.${BUILD_NUMBER}
                       cp -af ${WORKSPACE}/build/EAMInventory.xcarchive/dSYMs/EAMInventory.app.dSYM /Users/mini/Desktop/crashLog/QAFiles/EAMInventory/EAMbeta${APP_VER}.${BUILD_NUMBER}
                     
                       mkdir /Users/mini/Desktop/crashLog/testFiles/EAMInventory/EAMbeta${APP_VER}.${BUILD_NUMBER}
                       cp -af /Users/mini/workspace/analyseCrash.sh /Users/mini/Desktop/crashLog/testFiles/EAMInventory/EAMbeta${APP_VER}.${BUILD_NUMBER}
                       cp -af ${WORKSPACE}/build/EAMInventory.xcarchive/dSYMs/EAMInventory.app.dSYM /Users/mini/Desktop/crashLog/testFiles/EAMInventory/EAMbeta${APP_VER}.${BUILD_NUMBER}
                    fi
                         mkdir -p ${WORKSPACE}/DSYM
                         cp -af ${WORKSPACE}/build/EAMInventory.xcarchive/dSYMs/EAMInventory.app.dSYM ${WORKSPACE}/DSYM/${APP_VER}.${BUILD_NUMBER}-EAMInventory.app.dSYM
  
              '''
                   # 修改 build name 和添加下载链接,下载链接为nginx搭建,同局域网可直接下载,速度非常快
                buildName "${ipa_full_name}"
                    buildDescription "<a href='http://165.xx.1xx.xx:8800/mini/workspace/${JOB_NAME}/IPA/${ipa_full_name}.ipa'>download ipa</a>"
              }
           }
       }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容