1. 程式人生 > >Mac下搭建 Jenkins+Github+蒲公英/fir.im 持續整合環境(iOS自動打包)

Mac下搭建 Jenkins+Github+蒲公英/fir.im 持續整合環境(iOS自動打包)

看了幾篇關於使用jenkins持續整合的部落格,記錄一下自己搭建的過程,順便做一些更新

或者使用命令列安裝

//安裝jenkins
$ brew install jenkins 
//啟動jenkins
$ jenkins
//解除安裝jenkins
$ brew uninstall jenkins
//brew無效? 哦 安裝homebrew 
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”


使用安裝包安裝後會自動開啟,如果埠衝突那麼請修改埠

defaults write
/Library/Preferences/org.jenkins-ci httpPort 7070

3.安裝外掛:系統管理->外掛管理 安裝Xcode integration;git plugin;PostBuildScript Plugin ; github plugin

點選左側工具欄“新建”,選擇第一項“構建一個自由風格的軟體專案”

這裡寫圖片描述

5.配置

  • 原始碼管理

    這裡寫圖片描述

    Private專案需要配置ssh key多說幾句,本人比較笨踩了坑,寫一下jenkin配置ssh key的過程

    使用安裝包安裝,預設裝在Users/Shared/Jenkins 所以首先為jenkins使用者建立一個密碼

    $ sudo dscl . passwd /Users/jenkins **you pass**
    
    //切換到jenkins使用者 
    $ su jenkins
    //生成SSH KEY
    $ ssh-keygen -t rsa -b 4096 -C "[email protected]"
    //開啟id_rsa.pub 手動複製一下 新增到gitHub
    $ vi ~/.ssh/id_rsa.pub
    //測試一下
    $ ssh -T [email protected].com
    Hi ***! You've successfully authenticated, but GitHub does not provide shell access.
  • 構建觸發器
    這裡寫圖片描述
    這裡就是告訴jenkins什麼時候自動構建,如果開始安裝了github plugin外掛的話就會有Build when a change is pushed to GitHub選項,這裡我同時設定了每週一到週五在每天的8點到9點之間執行一次

  • 構建
    增加構建步驟 -> Xcode
    這裡寫圖片描述
    這裡寫圖片描述

    關於證書
    如果在構建中出現了”Code Sign error: There are no valid certificate/private key pairs in the default keychain”這個錯誤,到你的鑰匙串串中,把有關iPhone開發的證書從“登入”便籤複製一份到“系統”標籤裡面。
    這個問題解決以後你會遇到下一個錯誤 “Code Sign error: Provisioning profile ‘xxxxx-xxxx-xxxx-xxxxx’ can’t be found”
    解決這個問題也很簡單,找到相應的.mobileprovision檔案,將其複製到/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profile就可以了

  • 構建後操作
    增加構建後操作步驟->Execute a set of scripts->Add build step->Execute shell
    這裡寫圖片描述

import time
import urllib2
import time
import json
import mimetypes
import os
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart



#蒲公英應用上傳地址
url = 'http://www.pgyer.com/apiv1/app/upload'
#蒲公英提供的 使用者Key
uKey = '**********'
#上傳檔案的檔名(這個可隨便取,但一定要以 ipa 結尾)
file_name = 'test.ipa'
#蒲公英提供的 API Key
_api_key = '**********'
#安裝應用時需要輸入的密碼,這個可不填
installPassword = '111111'
# 執行時環境變數字典
environsDict = os.environ
#此次 jenkins 構建版本號
jenkins_build_number = environsDict['BUILD_NUMBER']

#專案名稱,用在 拼接 tomcat 檔案地址
project_name = '***'



#獲取 ipa 檔案路徑
def get_ipa_file_path():
    #工作目錄下面的 ipa 檔案
    ipa_file_workspace_path = '/Users/Shared/Jenkins/Home/workspace/' + project_name + '/build/'+file_name
    return ipa_file_workspace_path


# while get_ipa_file_path() is None:
#     time.sleep(5)

#ipa 檔案路徑
ipa_file_path = get_ipa_file_path()
print ipa_file_path

#請求字典編碼
def _encode_multipart(params_dict):

    boundary = '----------%s' % hex(int(time.time() * 1000))
    data = []
    for k, v in params_dict.items():
        data.append('--%s' % boundary)

        if hasattr(v, 'read'):
            filename = getattr(v, 'name', '')
            content = v.read()
            decoded_content = content.decode('ISO-8859-1')
            data.append('Content-Disposition: form-data; name="%s"; filename="kangda.ipa"' % k)
            data.append('Content-Type: application/octet-stream\r\n')
            data.append(decoded_content)
        else:
            data.append('Content-Disposition: form-data; name="%s"\r\n' % k)
            data.append(v if isinstance(v, str) else v.decode('utf-8'))
    data.append('--%s--\r\n' % boundary)
    return '\r\n'.join(data), boundary


#處理 蒲公英 上傳結果
def handle_resule(result):

    json_result = json.loads(result)


    print json_result


    if json_result['code'] is 0:
        send_Email(json_result)

#傳送郵件
def send_Email(json_result):

    appName = json_result['data']['appName']
    appKey = json_result['data']['appKey']
    appVersion = json_result['data']['appVersion']
    appBuildVersion = json_result['data']['appBuildVersion']
    appShortcutUrl = json_result['data']['appShortcutUrl']
    #郵件接受者
    mail_receiver = ['***@***.com']
    #根據不同郵箱配置 host,user,和pwd
    mail_host = 'smtp.126.com'
    mail_user = '***@**.com'
    mail_pwd = '****'
    mail_to = ','.join(mail_receiver)
    mail_title = project_name + '最新打包檔案' + '(' +jenkins_build_number + ')'
    msg = MIMEMultipart()

    environsString = '<h3>本次打包相關資訊</h3><p>'
    environsString += '<p>專案名稱 : '+ project_name + '<p>'
    environsString += '<p>構建ID:' + jenkins_build_number +'<p>'
    environsString += '<p>你也可從蒲公英網站線上安裝 : ' + 'http://www.pgyer.com/' + str(appShortcutUrl) + '   密碼 : ' + installPassword + '<p>'
    environsString += '<li><a href="itms-services://?action=download-manifest&url=https://ssl.pgyer.com/app/plist/' + str(appKey) + '">點我直接安裝</a></li>'
    message = environsString
    body = MIMEText(message, _subtype='html', _charset='utf-8')
    msg.attach(body)
    msg['To'] = mail_to
    msg['from'] = mail_user
    msg['subject'] =mail_title

    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user, mail_pwd)

        s.sendmail(mail_user, mail_receiver, msg.as_string())
        s.close()
        print 'success'
    except Exception, e:
        print e

#############################################################
#請求引數字典
params = {
    'uKey': uKey,
    '_api_key': _api_key,
    'file': open(ipa_file_path, 'rb'),
    'publishRange': '2',
    'password': installPassword

}

coded_params, boundary = _encode_multipart(params)
req = urllib2.Request(url, coded_params.encode('ISO-8859-1'))
req.add_header('Content-Type', 'multipart/form-data; boundary=%s' % boundary)
try:
    resp = urllib2.urlopen(req)
    body = resp.read().decode('utf-8')
    handle_resule(body)

except urllib2.HTTPError as e:
    print(e.fp.read())

OK 最後 點選 立即構建

稍等幾分鐘收到郵件這裡寫圖片描述

這裡寫圖片描述

這種方法適合做日常測試,或者讓產品經理更好的瞭解進度。如果做上線測試建議使用iTunes Connect +Testflight, 保證提交稽核的版本跟測試最後看到的版本是同一個包!介紹的文章有很多了 隨便 來一個吧 《如何使用TestFlight進行Beta測試》

補充遇到的問題
1.構建失敗提示:–resource-rules has been deprecated in mac os x >= 10.10
解決:選擇 project > Targets > Select your target > Build Settings >
Code Signing Resource Rules Path 新增 $(SDKROOT)/ResourceRules.plist
2.構建失敗提示:
FATAL: Build directory does not exist at /Users/Shared/Jenkins/Home/**. Potential configuration issue.
Build step ‘Xcode’ marked build as failure

看了jenkins論壇,上面發了相識問題也沒有,仔細檢查一下發現 Advanced Xcode build options 少配置了一項,Build output directory設定為${WORKSPACE}/build/ OK解決!

這裡寫圖片描述
3.注意:Schemes 勾選shared
4.在Xcode配置 Advanced Xcode build options -
Custom xcodebuild arguments 填寫:CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist

相關推薦

Mac搭建 Jenkins+Github+蒲公英/fir.im 持續整合環境iOS自動打包

看了幾篇關於使用jenkins持續整合的部落格,記錄一下自己搭建的過程,順便做一些更新 或者使用命令列安裝 //安裝jenkins $ brew install jenkins //啟動jenkins $ jenkins //解除安裝

MAC搭建Intellij IDEA+Scala SDK+Scala外掛開發環境

MAC下搭建Intellij IDEA+Scala SDK+Scala外掛環境 網上很多配置Scala開發環境的都不完整, 只安裝了Scala外掛,沒有Scala SDK。親試後如下: 前提環境: Mac電腦+Intellij IDEA+JAVA 8 步驟如下:

Jenkins+GitLab+fir.im 持續整合

寫在前面 最近公司搞自動化打包,從0開始折騰了幾天終於完成了,準備整理一下,寫成文件。 1、下載Jenkins並安裝 Jenkins下載地址:https://jenkins.io 在主頁面點選Download Jenkins選擇Mac OS。 安裝沒有什麼好介紹

[編譯] 5、在Linux搭建安卓APP的開發燒寫環境makefile版—— 在Linux上用命令列+VIM開發安卓APP

星期三, 19. 九月 2018 02:19上午 - BEAUTIFULZZZZ 0)前言 本文不討論用IDE和文字編輯器開發的優劣,是基於以下兩點考慮去嘗試用命令列編譯安卓APP的: 瞭解安卓APP的編譯過程,瞭解IDE幹了什麼事; 放在打包伺服器上需要自動化生成APP的指令碼; 1)安裝配置環境

Docker+Jenkins持續整合環境1使用Docker搭建Jenkins+Docker持續整合環境

來源:https://www.cnblogs.com/xiaoqi/p/docker-jenkins-cicd.html 本文介紹如何通過Jenkins的docker映象從零開始構建一個基於docker映象的持續整合環境,包含自動化構建、釋出到倉庫\並部署上線。 0. 前置條件 伺服器安

使用Jenkins搭建持續整合(CI)環境實現自動構建轉載

轉載地址:http://www.cnitblog.com/luckydmz/archive/2012/01/03/77007.htmlhttp://www.cnitblog.com/luckydmz/archive/2012/01/03/77007.html 例如我

MSBuild和Jenkins搭建持續整合環境1

你或其他人剛剛寫完了一段程式碼,提交到專案的版本倉庫裡面。但等一下,如果新提交的程式碼把構建搞壞了怎麼辦?萬一出現編譯錯誤,或者有的測試失敗了,或者程式碼不符合質量標準所要求的底限,你該怎麼辦? 最不靠譜的解決方案就是寄希望於所有人都是精英,他們根本不會犯這些

基於windows 10的git版本控制系統、(Bug管理系統)Bugzilla、持續整合環境基於JenkinsGithub的安裝與學習

Git安裝與學習報告 由於我使用的是windows平臺,所以git的安裝和學習也是基於windows下的。 Git安裝 安裝完成之後在開始選單中找到Git資料夾,點選裡面的Git Bash, 然後會彈出一個小視窗,那就說明安裝成功了。

搭建面向NET Framework的CI/CD持續整合環境

# 前言 網上大多數都是針對主流的Spring Cloud、NET Core的CI/CD方案。但是目前國內絕大部分的公司因為一些歷史原因無法簡單的把專案從NET Framework切換升級到NET Core,又急切的需要引入CI/CD流程來提高開發體驗和效率。因此,本系列部落格針對這一問題,旨在解決NET

Mac搭建Jenkins自動打包工具帶submodule,引數傳遞,上傳到fir.im,釘釘通知

1.工具下載    1.ApacheTomcat下載:https://tomcat.apache.org/download-90.cgi 下載zip,tar。用工具或者命令tar -zxvf解壓    2.Jenkins.war下載:https://jenkins.io/do

Mac利用Hexo+GitHub輕鬆搭建自己的部落格

今年4月份就在mac下利用hexo搭建了一個部落格,因換了一臺電腦,專案丟失,需重新安裝。 整理一下安裝流程: 1.hexo是基於nodejs的,需安裝nodejs,安裝nodejs最好選擇homebrew 2.首先檢視電腦是否安裝ruby,因為homebrew安裝依賴ru

Mac配置Jenkins + Grandle + Github

        貌似網上關於Jekins的配置資料不多,而Mac OS 上的資料更是少之又少,故此記錄下自己的配置過程,希望可以給後來人一點幫助, 在配置過程中遇到如下問題: pull程式碼一直失敗jdk安裝錯誤(一直誤以為自己安裝成功)jekens無法失敗出android

Windows搭建Jenkins+Jmeter+Ant 自動測試環境

jmeter1.JDK \Jmeter \ Ant安裝:1.1. 安裝JDK:雙擊jdk-7u80-windows-x64.exe安裝,默認安裝到C:\ProgramFiles\Java目錄1.2. 安裝Jmeter:在我的電腦—E盤(建議與文檔保持一致,否則需要修改配置文件),新建apa

mac搭建java開發環境

$path java ide new 版本 word-wrap 開發工具 profile data- 剛剛從windows系統轉到使用mac系統。感覺不是特別熟悉,須要一定的適應時間。以下簡介一下mac下搭建主要的java開發環境。 1.安裝jdk 安裝jdk1

Mac搭建Apache服務器

出了 這一 con exists inux host 終端 應該 用戶名 Apache作為最流行的Web服務器端軟件之一,它的優點與地位不言而喻。下面介紹下在Mac下搭建Apache服務器的步驟: (1)”前往” –>”個人”“ (2)在你的個人目錄下新建一個文件夾

mac 搭建Elasticsearch 5.4.3分布式集群

kdt arch 技術 知識庫 ica add software 軟件 nts 一、集群角色 多機集群中的節點可以分為master nodes和data nodes,在配置文件中使用Zen發現(Zen discovery)機制來管理不同節點。Zen發現是ES自帶的默認發現

Linux 環境搭建 JenkinsHudson平臺

效果 swd gpo conf 有一個 信息 hudson track 文件 安裝jenkins:安裝 jenkins 有兩種方式:安裝方式一: [java] view plain copy sudo java -jar jenkins.war –htt

Mac搭建Python3+PyQt5的開發環境

rmi 交互 安裝python pyqt5 usr ont post nal sta 可以下載源碼自己編譯,也可以直接通過pip3直接安裝。 因為Mac系統默認是安裝Python2的,需要首先安裝Python3,具體的步驟如下。 1. 安裝Xcode。這個沒什麽好說的,Ma

Mac搭建hexo3.0博客

tags new art ast popu 人的 lease view dep Mac下搭建hexo3.0博客(文章同步自個人博客站點以及Github博客https:

Mac安裝jenkins

打開 org agents -c 停止 git home nload 安裝 1.安裝brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/i