部署自動(dòng)打包環(huán)境

部署自動(dòng)打包環(huán)境

概述

  • 基于Gitlab-CICD配置的自動(dòng)打包環(huán)境原押。
  • 在Gitlab上創(chuàng)建Tag時(shí)乍构,會(huì)執(zhí)行包含Deploy的CICD操作旨袒。
    • 創(chuàng)建方法:左側(cè)菜單欄->Repository->Tags->New tag瓣铣。
    • 在Deploy的Job成功后,將會(huì)把對(duì)應(yīng)的壓縮包發(fā)布至指定目錄中

通過(guò)Gitlab的打包方式

  • 完整包:創(chuàng)建前綴為'tag_full_'的tag渡处。
    • tag_full_win_version: 僅打包win的完整包镜悉。
    • tag_full_ios_version: 僅打包ios的完整包。
    • tag_full_android_version: 僅打包android的完整包医瘫。
    • tag_full_version: 未指定版本侣肄,默認(rèn)為打包三種版本(win,ios,android)的完整包。
      • 打包三種版本的完整包的tag一般取名為tag_full_all_version醇份。
  • 補(bǔ)丁包:創(chuàng)建前綴'tag_patch_'的tag稼锅。
    • tag_patch_ios_version: 僅打包ios的補(bǔ)丁包。
    • tag_patch_andorid_version: 僅打包android的補(bǔ)丁包僚纷。
    • tag_patch_version: 未指定版本矩距,默認(rèn)為打包兩種版本(ios和android)的補(bǔ)丁包。
      • 打包兩種版本的補(bǔ)丁包的tag一般取名為tag_patch_all_version畔濒。

如何創(chuàng)建自動(dòng)更新的補(bǔ)丁

  • 概述:

    • 補(bǔ)丁是基于上一個(gè)完整包的版本進(jìn)行的資源/腳本文件修改剩晴。
    • 通過(guò)補(bǔ)丁包可替換原本完整包中的資源/腳本文件锣咒,實(shí)現(xiàn)熱更新侵状。
  • 自動(dòng)更新機(jī)制:

    • 基于指定版本的資源及腳本文件生成MD5的文件記錄
      • md5_assets.txt: 客戶端的資源文件的MD5值毅整。
      • md5_lua.txt: 客戶端的lua腳本的MD5值趣兄。
      • md5_scripts.txt: 客戶端的C#腳本的MD5值。(C#腳本無(wú)法用于自動(dòng)更新)
      • patch.json: 記錄所修改的資源/腳本文件悼嫉。
    • 通過(guò)比較生成的MD5的記錄艇潭, 從而區(qū)分哪些文件發(fā)生了變化。
  • 生成補(bǔ)丁的詳細(xì)操作:

    • 將項(xiàng)目切換至指定完整包的版本戏蔑,通過(guò)菜單欄->Build->生成AssetBundle完整包蹋凝。
      • 在生成AB完整包后,確保獲取到的MD5文件為獲取指定完整包的版本的MD5值总棵。
    • 在生成AssetBundle完整包后鳍寂,可進(jìn)行資源/腳本文件的修改。
    • 在確保資源/腳本文件修改完成后情龄,新增一行版本號(hào)迄汛,作為補(bǔ)丁版本。
      • 版本號(hào)文件:/client/Assets/StreamingAssets/version.txt
      • 一般補(bǔ)丁包的版本號(hào)只在原始版本號(hào)的基礎(chǔ)上骤视,迭代后兩位小版本鞍爱。
    • 獲取補(bǔ)丁包的MD5文件,通過(guò)菜單欄->Build->新增AssetBundle補(bǔ)丁包专酗。
      • 在新增AB補(bǔ)丁包后睹逃,獲取到補(bǔ)丁包的MD5文件記錄。
    • 提交補(bǔ)丁包:
      • 將所修改的資源/腳本文件及其補(bǔ)丁包的MD5文件記錄提交只版本庫(kù)上祷肯。
      • 通過(guò)gitlab創(chuàng)建該分支的tag沉填,tag名稱為tag_patch_version粱玲。
      • 執(zhí)行完該tag的CICD后,可在指定目錄獲取到補(bǔ)丁包拜轨。
  • 生成完整包的流程圖:

      graph TD
        Build[創(chuàng)建并切換至指定版本的分支]
        FullPackage_MD5[完整包的MD5文件記錄 ]
        CurrentBranch_Local[當(dāng)前分支-本地]
        CurrentBranch_Remote[當(dāng)前分支-遠(yuǎn)程]
        PackFull[生成完整包]
        
        subgraph 獲取完整包的MD5
          Build
          FullPackage_MD5
          CurrentBranch_Local
          CurrentBranch_Remote
        end
        
        subgraph 獲取完整包
          Gitlab
          PackFull
        end
        
        Build -- 生成該版本AB完整包 --> FullPackage_MD5
        FullPackage_MD5 -- 提交完整包的MD5文件 --> CurrentBranch_Local
        CurrentBranch_Local -- Git Sync & Push --> CurrentBranch_Remote
        CurrentBranch_Remote --> Gitlab
        Gitlab -- 通過(guò)Gitlab創(chuàng)建當(dāng)前分支的tag,tag名稱前綴為tag_full_ --> PackFull
    
  • 生成補(bǔ)丁包的流程圖:

      graph TD
        Build[創(chuàng)建并切換至指定版本的分支]
        FullPackage_MD5[完整包的MD5文件記錄](méi)
        PatchPackage_MD5[補(bǔ)丁包的MD5文件記錄](méi)
        CurrentBranch_Local[當(dāng)前分支-本地]
        CurrentBranch_Remote[當(dāng)前分支-遠(yuǎn)程]
        PackPatch[生成補(bǔ)丁包]
    
        subgraph 獲取補(bǔ)丁包的MD5
          Build
          FullPackage_MD5
          PatchPackage_MD5
          CurrentBranch_Local
          CurrentBranch_Remote
        end
    
        subgraph 獲取補(bǔ)丁包
          Gitlab
          PackPatch
        end
    
        Build --生成該版本AB完整包--> FullPackage_MD5
        FullPackage_MD5 -- 修改資源/腳本文件以及在version.txt中新增版本號(hào) --> PatchPackage_MD5
        PatchPackage_MD5 -- 提交修改的資源/腳本文件以及補(bǔ)丁包的MD5文件 --> CurrentBranch_Local
        CurrentBranch_Local -- Git Sync & Push --> CurrentBranch_Remote
        CurrentBranch_Remote --> Gitlab
        Gitlab -- 通過(guò)Gitlab創(chuàng)建當(dāng)前分支的tag, tag名稱前綴為tag_patch_ --> PackPatch
    

如何搭建Gitlab-CICD的平臺(tái)

  • 概述:

    • CI/CD是指持續(xù)集成/持續(xù)部署抽减。
      • 持續(xù)集成(Continuous integration)是一種軟件開(kāi)發(fā)實(shí)踐,每次集成都通過(guò)自動(dòng)化的構(gòu)建(包括編譯橄碾,發(fā)布卵沉,自動(dòng)化測(cè)試)來(lái)驗(yàn)證,從而盡早地發(fā)現(xiàn)集成錯(cuò)誤法牲。
      • 持續(xù)部署(continuous deployment)是通過(guò)自動(dòng)化的構(gòu)建史汗、測(cè)試和部署循環(huán)來(lái)快速交付高質(zhì)量的產(chǎn)品。
    • 中心思想是當(dāng)每一次push到gitlab的時(shí)候拒垃,都會(huì)觸發(fā)一次腳本執(zhí)行停撞,然后腳本的內(nèi)容包括了測(cè)試,編譯悼瓮,部署等一系列自定義的內(nèi)容戈毒。
  • CI/CD的好處:

    • 快速發(fā)現(xiàn)錯(cuò)誤。
      • 每完成一點(diǎn)更新横堡,就集成到主干上埋市,可以快速發(fā)現(xiàn)錯(cuò)誤,定位錯(cuò)誤也比較容易命贴。
    • 防止分支大幅度偏離主干道宅。
      • 如果不是經(jīng)常集成,主干又在不斷更新胸蛛,會(huì)導(dǎo)致以后集成的難度變大污茵,甚至難以集成。
  • CI/CD中的基本概念:

    • Pipeline:

      • Pipeline表示構(gòu)建任務(wù)葬项,包含測(cè)試泞当,編譯,部署等一系列的階段的執(zhí)行玷室。
      • 每次提交都會(huì)創(chuàng)建一條Pipeline零蓉。
    • Stages:

      • Stages表示構(gòu)建階段,屬于Pipeline的組成單元穷缤。
      • Stages的特點(diǎn)為:
        • 當(dāng)前Stages都執(zhí)行成功秫筏,才會(huì)執(zhí)行下一個(gè)Stages江滨。
        • 所有的Stages都執(zhí)行成功薇溃, 該pipeline才會(huì)成功搜锰。
      • 一般將Stages分為三個(gè)階段:build,test,deploy秸脱。
    • Jobs:

      • Jobs表示構(gòu)建工作落包,屬于Stages的組成單元。
      • Jobs的特點(diǎn)為:
        • 每個(gè)Stages中的所有Job執(zhí)行成功摊唇,該Stages才會(huì)執(zhí)行成功咐蝇。
        • 默認(rèn)情況下,每個(gè)Job都是單獨(dú)的環(huán)境巷查,每個(gè)job直接不互相干擾有序。
    • Gitlab-CI:

      • Gitlab自帶的持續(xù)集成系統(tǒng)旭寿,.gitlab.yml的腳本解析就由它來(lái)負(fù)責(zé)。
    • Gitlab-Runner:

      • 負(fù)責(zé).gitlab.yml腳本的部分執(zhí)行崇败,.gitlab.yml的script部分的運(yùn)行就是由runner來(lái)負(fù)責(zé)的盅称。
      • Gitlab-CI通過(guò)解析.gitlab.yml文件后,根據(jù)里面的規(guī)則后室,分配對(duì)應(yīng)的runner執(zhí)行相應(yīng)腳本script缩膝。
        • 每個(gè)runner都有自己的一個(gè)tag,作為向Gitlab注冊(cè)的標(biāo)簽咧擂,Gitlab-CI可根據(jù)該tag執(zhí)行指定runner逞盆。
      • 一臺(tái)服務(wù)器/pc可以注冊(cè)多個(gè)Runner,要讓Runner同時(shí)運(yùn)行松申,則需要進(jìn)一步參考官方文檔
    • .gitlab.yml:

      • 必須存在與git項(xiàng)目的根目錄下的一個(gè)文件, 記錄了一系列的執(zhí)行階段和執(zhí)行規(guī)則。
    • Pipeline流程圖:

        graph LR
          check1{是否全部成功}
          check2{是否全部成功}
      
          Job_build1 --> check1
          Job_build2 --> check1
          check1 --> Job_test1
          check1 --> Job_test2
          Job_test1 --> check2
          Job_test2 --> check2
          check2 --> Job_deploy1
          check2 --> Job_deploy2
          subgraph States1
          Job_build1
          Job_build2
          end
      
          subgraph States2
          Job_test1
          Job_test2
          end
      
          subgraph States3
          Job_deploy1
          Job_deploy2
          end
      
    • Gitlab-CI/CD流程圖:

        graph LR
          Gitlab-CI[Gitlab-ci->解析.gitlab.yml]
          
          subgraph 服務(wù)器/PC3
          RunnerN
          end
      
          subgraph 服務(wù)器/PC2
          Runner2
          end
      
          subgraph 服務(wù)器/PC1
          Runner1
          end
      
          Developer -- push --> Gitlab
          Gitlab --> Gitlab-CI
          Gitlab-CI --tag1--> Runner1
          Gitlab-CI --tag2--> Runner2
          Gitlab-CI --tagN--> RunnerN
      
  • 注冊(cè)Gitlab-Runner:

    • 基于已搭建好的Gitlab俯逾,注冊(cè)Runner來(lái)實(shí)現(xiàn)CI/CD贸桶。

    • 準(zhǔn)備工作:

      • 下載Gitlab-Runner:
      • 獲取Gitlab上項(xiàng)目的管理員權(quán)限桌肴,打開(kāi)左側(cè)菜單欄->Setting->CI/CD->Runner皇筛。
        • 在Specific Runners獲取Gitlab的URL和Token。
      • 如果gitlab為https鏈接坠七,則需要獲取Gitlab的公鑰證書:
        • 打開(kāi)瀏覽器水醋,點(diǎn)擊網(wǎng)址框左側(cè)的鎖圖標(biāo)。
        • 切換至下一頁(yè)彪置,點(diǎn)擊更多信息拄踪。
        • 在彈出的頁(yè)面信息框->安全->網(wǎng)站身份->查看證書。
        • 在彈出的證書查看器->詳細(xì)信息->導(dǎo)出拳魁。
        • 獲取到該gitlab.crt惶桐。
    • 開(kāi)始注冊(cè):

      • 打開(kāi)命令行執(zhí)行:

            gitlab-runner-windows-amd64.exe register ^
            --non-interactive ^
            --name win7_test_2 ^
            --tag-list win7_test_2 ^
            --url https://m68gitlab.g-bits.com/ ^
            --registration-token CAsBb_m2cRzzBMnNJeJx ^
            --executor shell ^
            --tls-ca-file ./m68gitlab.g-bits.com.crt
        
      • 上述命令選項(xiàng)含義(*為必選項(xiàng)):

          --non-interactive       非交互式
          --name                  該Special Runner服務(wù)名,便于后臺(tái)管理(查看、刪除姚糊、調(diào)用)*
          --tag-list              該Special Runner標(biāo)簽贿衍,集成腳本中可以通過(guò)指定tag關(guān)聯(lián)
          --url                   Gitlab的地址*
          --registration-token    項(xiàng)目里剛才看到的token,互相關(guān)聯(lián)的標(biāo)志*
          --excutor               規(guī)定集成腳本執(zhí)行的環(huán)境救恨,還可以是shell贸辈,docker等*
        
      • 注冊(cè)成功后,可在項(xiàng)目的Setting->CI/CD->Runner中查看到新注冊(cè)的Runner信息肠槽。

    • 運(yùn)行Gitlab-Runner:

      • 打開(kāi)命令行執(zhí)行:

          gitlab-runner-windows-amd64.exe run
        
    • 注冊(cè)Gitlab-runner服務(wù):

      • 即開(kāi)機(jī)自動(dòng)通過(guò)System賬號(hào)運(yùn)行Gitlab-runner裙椭。

      • 注冊(cè)Gitlab-runner服務(wù),默認(rèn)的服務(wù)名為gitlab-runner署浩。

        • 想要在同一臺(tái)PC上注冊(cè)多個(gè)Gitlab-runner服務(wù)揉燃,需要自定義服務(wù)名。
          • 自定義服務(wù)名的方式:--service name
      • 打開(kāi)命令行執(zhí)行:(需要使用管理員身份執(zhí)行)

          gitlab-runner-windows-amd64.exe install 
          或
          gitlab-runner-windows-amd64.exe install --user name --password pw
        
      • Runner服務(wù)管理相關(guān)指令:

          gitlab-runner-windows-amd64.exe start     // 開(kāi)啟服務(wù)
          gitlab-runner-windows-amd64.exe stop      // 停止服務(wù)
          gitlab-runner-windows-amd64.exe uninstall // 卸載服務(wù)
        
    • Gitlab-Runner流程圖:

        graph LR
          PC[服務(wù)器/PC]
          Developer -- 獲取gitlab的公鑰證書,URL,Token --> PC
          PC -- 注冊(cè)Runner --> Gitlab
          PC -- 運(yùn)行Runner --> Gitlab
          Gitlab -- 通知執(zhí)行 --> Gitlab-CI
      
  • 配置.gitlab.yml文件

    • 基本模板:

        stages:
          - test
          - deploy
      
        win_test:
            script:
                - echo win_test
                - call test.bat
            stage: test
            tags:
                - win7_test
      
        win_deploy:
            script:
                - echo win_deploy
                - call deploy.bat
            stage: deploy
            tags:
                - win7_test
      
    • 上述主要參數(shù):

      • states:
        • 構(gòu)建階段筋栋,自定義要執(zhí)行的幾個(gè)階段炊汤。
      • win_test,win_deploy:
        • 構(gòu)建工作弊攘,具體要執(zhí)行的內(nèi)容抢腐。
        • script:
          • 該job所要執(zhí)行的命令行指令。
        • stage:
          • 限定該job屬于哪一個(gè)stages襟交。
        • tags:
          • 限定該job執(zhí)行的腳本是在哪一個(gè)Runner上執(zhí)行迈倍。
    • 測(cè)試命令,檢驗(yàn)語(yǔ)法:

      • 可在 GitLab->CI/CD->Pipelines->CI Lint 中進(jìn)行執(zhí)行。
    • 測(cè)試命令,檢驗(yàn)語(yǔ)法:

      • 可在 GitLab->CI/CD->Pipelines->CI Lint 中進(jìn)行執(zhí)行捣域。
    • 返回值獲取

      • 通過(guò)在批處理中啼染,獲取運(yùn)行腳本的返回值。errorlevel指令焕梅。
      • 從而迹鹅,判斷是否exit 0 或者exit -1。實(shí)現(xiàn)樣例是否通過(guò)的判斷贞言。
    • GitLab-CI中的cache和artifacts的區(qū)別

      • 用Docker運(yùn)行Gitlab-Runner斜棚,cache會(huì)生成一些臨時(shí)容器,不容易清理该窗。
      • cache不一定能夠命中弟蚀,artifacts肯定命中。
      • cache與機(jī)器上Runner緩存的容量相關(guān)酗失。
        • 能否使用cache取決于機(jī)器是否生成過(guò)cache义钉,artifacts則每次都能從Gitlab下載。
        • artifacts中定義的部分级零,會(huì)自動(dòng)生成断医,并可以傳到下面的job中解壓使用滞乙,避免了重復(fù)依賴安裝等功能。
        • artifacts可以設(shè)置自動(dòng)過(guò)期時(shí)間, 過(guò)期自動(dòng)刪除鉴嗤,cache不會(huì)自動(dòng)清理斩启。
        • artifacts會(huì)先傳到GitLab服務(wù)器, 然后需要時(shí)再重新下載, 所以這部分也可以在GitLab下載和瀏覽。
        • artifacts在jobs成功時(shí)才會(huì)將指定文件上傳至Gitlab醉锅。
  • 自動(dòng)打包環(huán)境的流程圖:

      graph LR
        Developer -- 通過(guò)Gitlab創(chuàng)建完整包/補(bǔ)丁包的tag --> Gitlab-CI
        Gitlab-CI -- 解析.gitlab.yml執(zhí)行命令行指令 --> 執(zhí)行打包操作
    
      graph TD
        pack[執(zhí)行打包操作]
        pack_full[執(zhí)行打完整包操作]
        pack_patch[執(zhí)行打補(bǔ)丁包操作]
        packing_full[執(zhí)行指定版本的打完整包操作]
        packing_patch[執(zhí)行指定版本的打補(bǔ)丁包操作]
        packing_full_all[執(zhí)行所有版本android,ios,win的打完整包操作]
        packing_patch_all[執(zhí)行所有版本android,ios的打補(bǔ)丁包操作]
        transform_package[傳輸壓縮包文件至指定目錄](méi)
        check_tag_pre{識(shí)別tag名稱}
        check_tag_full{tag名稱是包含android/ios/win}
        check_tag_patch{tag名稱是包含android/ios}
    
        pack --> check_tag_pre
        check_tag_pre -- tag名稱前綴為tag_full_ --> pack_full
        check_tag_pre -- tag名稱前綴為tag_patch_ --> pack_patch
    
        pack_full --> check_tag_full
        pack_patch --> check_tag_patch
    
        check_tag_full -- 是 --> packing_full
        check_tag_full -- 否 --> packing_full_all
        check_tag_patch -- 是 --> packing_patch
        check_tag_patch -- 否 --> packing_patch_all
    
        packing_full --> transform_package
        packing_patch --> transform_package
        packing_full_all --> transform_package
        packing_patch_all --> transform_package
    

參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兔簇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子硬耍,更是在濱河造成了極大的恐慌垄琐,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件经柴,死亡現(xiàn)場(chǎng)離奇詭異狸窘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)坯认,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門翻擒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人牛哺,你說(shuō)我怎么就攤上這事陋气。” “怎么了引润?”我有些...
    開(kāi)封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵巩趁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我淳附,道長(zhǎng)议慰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任燃观,我火速辦了婚禮褒脯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缆毁。我一直安慰自己,他們只是感情好到涂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布脊框。 她就那樣靜靜地躺著,像睡著了一般践啄。 火紅的嫁衣襯著肌膚如雪浇雹。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天屿讽,我揣著相機(jī)與錄音昭灵,去河邊找鬼吠裆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛烂完,可吹牛的內(nèi)容都是我干的试疙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼抠蚣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼祝旷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起嘶窄,我...
    開(kāi)封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤怀跛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后柄冲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吻谋,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年现横,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漓拾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡长赞,死狀恐怖晦攒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情得哆,我是刑警寧澤脯颜,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贩据,受9級(jí)特大地震影響栋操,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饱亮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一矾芙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧近上,春花似錦剔宪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至斗锭,卻和暖如春地淀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背岖是。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工帮毁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留实苞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓烈疚,卻偏偏與公主長(zhǎng)得像黔牵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胞得,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 來(lái)源:https://github.com/Fennay/git... 此文檔用于描述.gitlab-ci.yml...
    編碼前線閱讀 6,280評(píng)論 0 6
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理荧止,服務(wù)發(fā)現(xiàn),斷路器阶剑,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 1.是什么跃巡? Gitlab-CI是GitLab Continuous Integration(Gitlab持續(xù)集成...
    優(yōu)雨閱讀 1,948評(píng)論 0 2
  • 陽(yáng)臺(tái)上海棠花露出新芽,空氣里飄來(lái)一陣花香牧愁,樓下的櫻花開(kāi)了素邪。 下樓出樓梯就感受到溫暖的風(fēng)撲面而來(lái),絢麗的陽(yáng)光里是春的...
    谷應(yīng)閱讀 156評(píng)論 1 3
  • 昨天是偉大的母親節(jié)猪半,出現(xiàn)了各種令人震驚的現(xiàn)象兔朦。就連和菜頭叔叔都開(kāi)始驚訝發(fā)現(xiàn),原來(lái)朋友圈里有那么多的人是有媽媽的磨确!自...
    多幣閱讀 236評(píng)論 1 2