Qt項目持續集成系列之二 -- github自動化發行

上一篇文章在這
https://blog.csdn.net/D759378563/article/details/84643034

本文的目標是,在github上實現Qt工程的自動化發行。
看個預覽圖先:
在這裏插入圖片描述
上圖所示github的Release中,包含了兩個macos平臺的dmg包、5個windows平臺的zip包以及一個ubuntu平臺的包,都是自動化發行的結果。

後續會加入Android和ios包。

1、Appveyor的配置

https://blog.csdn.net/D759378563/article/details/84643034
前一篇文章中已經介紹過,Appveyor網站提供了windows的Docker鏡像,包含各種版本的visual studio和Qt,這裏通過yml配置文件,來使用這些鏡像。

先是通過一個矩陣來配置不同的鏡像
在這裏插入圖片描述
matrix之下,每一個‘-’號開頭的一段描述,都代表一個鏡像的配置。
其中APPVEYOR_BUILD_WORKER_IMAGE是網站提供的環境變量,用來指定Docker鏡像。
platform、 qt以及releaseName是我自定義的變量,用來在後文中執行腳本時做區分

在這裏插入圖片描述
before_build腳本,就是編譯之前要執行的腳本,默認使用windows的cmd語法,當然也可以使用Powershell等。
我這段腳本目的是,在編譯之前,先確認要使用的vs編譯器和Qt所在路徑。
vs一般通過調用vcvarsall.bat腳本,並傳入x86或x64等參數,來確定相應的編譯器和鏈接器,如cl.exe、nmake.exe等。
Qt的使用,是將QTDIR\bin設置到環境變量PATH中,以便可以找到qmake.exe。

在這裏插入圖片描述
有了正確的環境設置,接下來就是編譯了,很簡單的qmake make

在這裏插入圖片描述
編譯通過後,有一個after_build的腳本執行時機,此時的環境變量和前面一樣。
我這段腳本目的是,在代碼被打上tag的情況下,執行windeployqt命令,將依賴的Qt庫都打包到一起。
APPVEYOR_REPO_TAG是Docker提供的環境變量,有tag的時候這個變量的值爲true。

artifacts用來描述可以發行的代碼包,這裏指定了bin路徑,則Docker會自動將bin路徑打包爲zip,zip的名字是指定的name。

deploy用來描述要發行的目標網站。
這裏的provider指定爲github,就可以使用github的Release功能了。當然還有很多其它的網站也可用來發行。
auth_token是從github上生成的驗證用的token,後面再說如何生成。爲了不讓別人看到具體token,這裏引用了自定義的環境變量GITHUB_OAUTH_TOKEN

 on: 
 	APPVEYOR_REPO_TAG: true

表示只有在代碼被打上tag的時候,才執行deploy。
這裏的deploy沒有指定artifacts,默認會把定義的artifacts都發行出去,這就夠了。

最終的yml配置文件

appveyor.yml

version: '{build}'

branches:
  except:
    - project/travis
environment:
  matrix:
  - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    platform: x86
    qt: 5.9
    releaseName: HelloCI_qt59_vs2015_x86
  - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    platform: x64
    qt: 5.9
    releaseName: HelloCI_qt59_vs2015_x64
  - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
    platform: x64
    qt: 5.9
    releaseName: HelloCI_qt59_vs2017_x64
  - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
    platform: x64
    qt: 5.12
    releaseName: HelloCI_qt512_vs2015_x64
  - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
    platform: x64
    qt: 5.12
    releaseName: HelloCI_qt512_vs2017_x64
before_build:
  - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set msvc=msvc2015
  - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set vs=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
  - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" set msvc=msvc2017
  - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" set vs=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
  - if "%platform%"=="x86" set QTDIR=C:\Qt\%qt%\%msvc%
  - if "%platform%"=="x64" set QTDIR=C:\Qt\%qt%\%msvc%_64
  - set PATH=%PATH%;%QTDIR%\bin;
  - if "%platform%"=="x86" set vcvarsall=%vs%\vcvarsall.bat
  - if "%platform%"=="x64" set vcvarsall=%vs%\vcvarsall.bat
  - if "%platform%"=="x86" call "%vcvarsall%" x86
  - if "%platform%"=="x64" call "%vcvarsall%" x64
build_script:
  - qmake
  - nmake
after_build:
  - if "%APPVEYOR_REPO_TAG%"=="true" windeployqt bin\HelloCI.exe --qmldir %QTDIR%\qml
artifacts:
  - path: bin
    name: $(releaseName)
deploy:
  provider: GitHub
  auth_token: $(GITHUB_OAUTH_TOKEN)
  description: 'HelloCI Release'
  draft: false
  prerelease: false
  on:
      APPVEYOR_REPO_TAG: true

2、 Travis

Travis網站有兩個,https://travis-ci.org 和https://travis-ci.com, 區別是https://travis-ci.com可以操作github的私有倉庫。

在這裏插入圖片描述
同樣的,先看一下矩陣,這裏配置了兩個osx系統和一個ubuntu系統。

os:linux
 dist: xenial

這是ubuntu16.04的配置(目前還不支持18.04 bionic)
env中自定義了一些環境變量,後面用到
cache是用來緩存的,這裏指定了Qt的安裝路徑,那麼在下一次同樣的Docker鏡像啓動時,優先使用緩存,除非沒有安裝或者有新版本纔會去更新這個路徑。這樣可以節省大量的Docker運行時間哦。

os: osx
  osx_image: xcode10.2

這是macos系統的設置,osx_image是travis提供的,可在其文檔中找到其它可用版本
https://docs.travis-ci.com/user/reference/osx/
緩存也是要有的。

osx系統通過brew安裝Qt,只需要一條命令即可 brew install qt,按照brew官網https://brew.sh/的描述,目前安裝的版本爲5.12.2
濤哥試過後,發現安裝路徑是/usr/local/Cellar/qt/5.12.2/

ubuntu系統安裝Qt,上一篇文章也說過了,是通過launchpad源,目前已經有了最新的5.12.2和5.12.3了。
在這裏插入圖片描述
3、OAuth token

OAuth機制,是在不知道密碼的情況下,只通過授權的token去訪問特定的api。

使用token大致步驟:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

接下來要去兩個地方粘貼,最好先貼到記事本或着什麼地方,備用。

先到Travis的項目配置頁面
在這裏插入圖片描述
在這裏插入圖片描述
Name寫前面的yml配置文件中引用的變量名GITHUB_OAUTH_TOKEN,value就是前面的token

接下來是Appveyor
在這裏插入圖片描述

在這裏插入圖片描述

一樣的東西,填好後保存即可。

最後,給代碼打上tag,提交吧。

濤哥在連續提交了50多次後。。。
在這裏插入圖片描述
最終拿到了這兩個徽章
在這裏插入圖片描述
還有這正確的發佈包。
(ubuntu那個,缺少linuxdeployqt打包步驟,後面再加)
在這裏插入圖片描述

當然,你們不用像我一樣提交50多次,你們可以直接用我寫好的配置文件。

最後附上GitHub鏈接
https://github.com/wentaojia2014/HelloCI

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章