(macOS) macOS系統Jenkins使用

基礎使用

  • 安裝
brew install jenkins
  • 啟動服務
brew services start jenkins
  • 停止服務
brew services stop jenkins
  • 初始配置
open http://localhost:8080
  • 解鎖 Jenkins
cat $HOME/.jenkins/secrets/initialAdminPassword
  • 更新
brew upgrade jenkins
  • 卸載
brew uninstall jenkins --force
  • 清除依賴
brew cleanup

配置自動化打包

  • General


    1.png
  • 參數化構建過程
    Git 參數

    Git Parameter.png

Git Parameter.png

布爾值參數

4.png

  • 源碼管理


    5.png
  • Environment


    6.png
  • Build Steps

cd ./Project/
export LANG=en_US.UTF-8
/opt/homebrew/bin/pod install
/opt/homebrew/bin/fastlane build
$HOME/task/scripts/upload_ipa.sh "$JOB_NAME" "$GIT_BRANCH" "debug" "$BUILD_NUMBER" "appstore" "$SEND_TO_PM_UI"

Fastlane

default_platform(:ios)

platform :ios do
  desc "uploaded pgyer"

  lane :dev do

    gym(
        clean:false,
        scheme:"Project",
        configuration:"Debug",
        export_method:"development",
    )

    api_key = "xxxx"

    pgyer(api_key: "#{api_key}")

    sh "./notice.sh"

  end

  lane :build do

    gym(
        clean:false,
        scheme:"Project",
        configuration:"Debug",
        export_method:"development",
    )

  end
end

notice.sh

#!/bin/bash
  
# Webhook
WEBHOOK_URL="xxxx"
 
# 文本信息
MESSAGE='{
    "msgtype": "markdown",
    "markdown": {
        "title":"發包通知??????",
        "text":"**春江水暖,本鴨先知** ??
        \r **iOS 測試包**
        \r [?? Download](xxxx)
        \r ![](xxxx)"
    }
}'

MESSAGEAT='{
    "msgtype": "text",
    "text": {
        "content": "??????iOS發包通知 @139xxxx @176xxxx"
    },
    "at": {
        "atMobiles": [
            "139xxxx",
            "176xxxx"
        ],
        "atUserIds": [
            "xxxx",
            "xxxx",
        ],
        "isAtAll": false
    },
}'

# 通過 curl 指令發送 Webhook 通知消息
curl -H "Content-Type: application/json" -X POST -d "$MESSAGE" "$WEBHOOK_URL"
# 通過 curl 指令發送 Webhook @消息
curl -H "Content-Type: application/json" -X POST -d "$MESSAGEAT" "$WEBHOOK_URL"

upload_ipa.sh

#!/bin/zsh

# ---------------------------------------------------------------
# functions
# ---------------------------------------------------------------

# 小黃鴨 token
WEBHOOK_URL_XHY="xxxx"
# 打包小助手 token
WEBHOOK_URL_DBXZS="xxxx"
# 測試 token
WEBHOOK_URL_TEST="xxxx"

#給UI驗收 -BK
WEBHOOK_URL_UI_BK="xxxx"
#給UI驗收 -SC
WEBHOOK_URL_UI_SC="xxxx"

log() {
   echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*"
}

logTitle() {
    log "-------------------------------- $* --------------------------------"
}

execCommand() {
    log "$@"
    result=$(eval $@)
}

sendMsg() {
    if [ "$JOB_NAME" = "iOS_BK_DEV" ]; then
        # ---------------------------------------------------------------
        # 上傳到fir
        # ---------------------------------------------------------------
        logTitle "上傳到fir"
        /opt/homebrew/opt/ruby/bin/fir publish $IPA_ABS_PATH -T xxxxxx
        # 要發送的消息內容
        MESSAGE='{"msgtype": "markdown", "markdown": {"title": "Jenkins打包完成",  "text": "
        \r\n ### 發包通知:'$APP_NAME'iOS 打包完成
        \r\n > 打包分支: '${GIT_BRANCH}'
        \r\n > 最新提交: '${COMMIT_MSG}'
        \r\n 打包完成,請掃碼下載!
        \r\n ![](http://api.appmeta.cn/welcome/qrcode?url=http%3A%2F%2Ft.feiyangyinxiang.cn%2Fltevj57m)
        \r\n @176xxxx @139xxxx"}
        , "at": {
                "atMobiles": [
                    "176xxxx",
                    "139xxxx"
                ],
                "atUserIds": [
                    "xxxx",
                    "xxxx"
                ],
                "isAtAll": false
            }
        }'
         
         # 發送POST請求到釘釘Webhook
        curl -H "Content-Type: application/json" -X POST -d "$MESSAGE" "$WEBHOOK_URL_XHY"

        if [[ "$SEND_TO_PM_UI" = "true" ]]; then
            # 要發送的消息內容
            MESSAGE='{"msgtype": "markdown", "markdown": {"title": "Jenkins打包完成",  "text": "
            \r\n ### 發包通知:'$APP_NAME'iOS 打包完成
            \r\n > 打包分支: '${GIT_BRANCH}'
            \r\n > 最新提交: '${COMMIT_MSG}'
            \r\n 打包完成,請掃碼下載!
            \r\n ![](http://api.appmeta.cn/welcome/qrcode?url=http%3A%2F%2Ft.feiyangyinxiang.cn%2Fltevj57m)
            \r\n @136xxxx6 @158xxxx @136xxxx"}
            , "at": {
                    "atMobiles": [
                        "136xxxx",
                        "158xxxx",
                        "136xxxx"
                    ],
                    "atUserIds": [
                        "xxxx",
                        "xxxx",
                        "xxxx"
                    ],
                    "isAtAll": false
                }
            }'
             # 發送POST請求到釘釘Webhook
            curl -H "Content-Type: application/json" -X POST -d "$MESSAGE" "$WEBHOOK_URL_UI_BK"
        fi

    else 
        # ---------------------------------------------------------------
        # 上傳到fir
        # ---------------------------------------------------------------
        logTitle "上傳到fir"
        /opt/homebrew/opt/ruby/bin/fir publish $IPA_ABS_PATH -T xxxxxxxx
        # 要發送的消息內容
        MESSAGE='{"msgtype": "markdown", "markdown": {"title": "Jenkins打包完成",  "text": "
        \r\n ### 發包通知:'$APP_NAME'iOS 打包完成
        \r\n > 打包分支: '${GIT_BRANCH}'
        \r\n 打包完成,請掃碼下載!
        \r\n ![](http://api.appmeta.cn/welcome/qrcode?url=http%3A%2F%2Ft.feiyangyinxiang.cn%2Fc2h7ng)
        \r\n @158xxxx"}
        , "at": {
                "atMobiles": [
                    "158xxxx"
                ],
                "atUserIds": [
                    "xxxx"
                ],
                "isAtAll": false
            }
        }'
         
         # 發送POST請求到釘釘Webhook
        curl -H "Content-Type: application/json" -X POST -d "$MESSAGE" "$WEBHOOK_URL_DBXZS"

        if [[ "$SEND_TO_PM_UI" = "true" ]]; then
            # 要發送的消息內容
            MESSAGE='{"msgtype": "markdown", "markdown": {"title": "Jenkins打包完成",  "text": "
            \r\n ### 發包通知:'$APP_NAME'iOS 打包完成
            \r\n > 打包分支: '${GIT_BRANCH}'
            \r\n 打包完成,請掃碼下載!
            \r\n ![](http://api.appmeta.cn/welcome/qrcode?url=http%3A%2F%2Ft.feiyangyinxiang.cn%2Fc2h7ng)
            \r\n @136xxxx @176xxxx @176xxxx"}
            , "at": {
                    "atMobiles": [
                        "136xxxx",
                        "176xxxx",
                        "176xxxx"
                    ],
                    "atUserIds": [
                        "xxxx",
                        "xxxx",
                        "xxxx"
                    ],
                    "isAtAll": false
                }
            }'
             # 發送POST請求到釘釘Webhook
            curl -H "Content-Type: application/json" -X POST -d "$MESSAGE" "$WEBHOOK_URL_UI_SC"
        fi
    fi
}

# 名字
readonly JOB_NAME=$1
# 分支
readonly GIT_BRANCH=$2
# 編譯類型
readonly BUILD_TYPE=$3
# 構建編號
readonly BUILD_NUMBER=$4
# 渠道
readonly BUILD_CHANNEL=$5
# 發給UI驗收
readonly SEND_TO_PM_UI=$6

logTitle "$SEND_TO_PM_UI"


# 當前時間
curlTime=`date +%Y%m%d_%H%M%S`
# ip 地址
ip=`ipconfig getifaddr en0`

APP_NAME=""
IPA_ABS_PATH=""
if [ "$JOB_NAME" = "iOS_BK_DEV" ]; then
    APP_NAME="項目1"
    IPA_ABS_PATH=$HOME/.jenkins/workspace/iOS_BK_DEV/BuildCard/Project.ipa
else
    APP_NAME="項目2"
    IPA_ABS_PATH=$HOME/.jenkins/workspace/iOS_SC_DEV/NFT/NFT.ipa
fi

# 打包地址
JOB_URL="http://$ip:8080/job/${JOB_NAME}/${BUILD_NUMBER}"

COMMIT_MSG=$(/usr/bin/git log -1 --pretty=format:"%s")

log COMMIT_MSG

# ---------------------------------------------------------------
# 發送消息推送
# ---------------------------------------------------------------

logTitle "發送釘釘消息"

sendMsg

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容