最新內容更新於 使用 Travis CI / Azure PipeLines 發佈 Artifact 到 Dropbox
吉米:	既然,可以運用 CI Server 自動建置、自動測試、發訊息,那再接下來,應該就是自動發佈了吧。
Eric:	沒錯,不過發佈類型不同,設定也有所差異。
吉米:	可以先介紹一下安裝檔的發佈嗎?
Eric:	好啊。
由於先前使用的 CI Server 全部是現有的雲端服務,或是自行架構在 Azure 的虛擬機器。
所以期望 CI Server 也可以將檔案,自動發佈到網路空間,以下,筆者試著將軟體發佈到 DropBox 之中。
檔案上傳到 Dropbox 時,筆者運用 andreafabrizi 在 GitHub ,所分享的 Dropbox-Uploader ,以簡化介接 Dropbox API 的工作量。
首先,先到 Dorpbox Developers ,會看到以下的畫面,

按下 Create app 後,創立一個提供 CI Server 使用的 API。

完成建立後,直接到 OAuth 2 的區域取得 Token 值,這會用在 Dropbox_Uploader.sh 之中。

要注意的是,dropbox_uploader.sh 中,是將 先前取得的 Dropbox OAuth2 的 Token 另存檔案。但這情況不適合用在 CI Server ,所以對 dropbox_uploader.sh 進行部份修改。
# step 1
# 到 #Default values 增加 Token
OAUTH_ACCESS_TOKEN=73x2khI0WgMAAAAAAACQT9o8kMlODtz48GhinV9sq2lRCZq8RzIpLMBkVb2575wy
# Step 2
# 將 SETUP 區域的部份 mark 掉
並將修改後的 dropbox_upload.sh 放到 Repository 的目錄下。
Travis CI 提供許多現成的發佈方式,例如 GitHub Release, AWS S3, Azure Web App, NPM, …… ,但由於我們要將程式發佈到 DropBox 之中,所以使用 Custom Deploy。
deploy:
  provider: script
  script: bash scripts/deploy.sh
  on:
    branch: master
在 yaml 指令中,看到 bash scipts/deploy.sh 這個指令。它的意思是,要去執行 scripts 這個資料夾中,deploy.sh 這個 shell 檔案。
依 Travis CI 建議的做法,是比軟好的方式,但筆者則是採用另一程做法。直接在 .travis.yml 的 script 區段,執行上傳的動作。
language: csharp
solution: IronmanDemo.sln
mono: none
dotnet: 2.1.300
script:
    - dotnet restore
    - dotnet build --configuration Release
    - dotnet test Calculate.Tests/Calculate.Tests.csproj
    # 上傳到 dropbox 的檔案清單
    - bash dropbox_uploader.sh upload IronmanDemo/bin/Release 2019Ironman/Travis

在 Azure Pipeline 的部份,筆者參考官方文件的說明。
- task: ShellScript@2
  inputs:
    scriptPath:
    #args: '' # Optional
    #disableAutoCwd: false # Optional
    #cwd: '' # Optional
    #failOnStandardError: false
先將 dropbox-uploader.sh 放到 repository 之中。
再到 azure-pipeline.yml 中,加入 dropbox-uploader.sh 的調用。
- task: ShellScript@2
  inputs:
    scriptPath: .\dropbox_uploader.sh 
    args: upload IronmanDemo/bin 2019Ironman/AzureDevOps

說個題外話,筆者在實作時,沒有注意到參數要用 args 這個 key 值載入。試了很多次,才發發現這個錯誤,哈哈哈。
吉米:	透過 shell script 的操作,CI Server 的運用,就更加靈活。
Eric:	是啊,也要謝謝 andreafabrizi 分享上傳 dropbox 的 shell,大量簡化了與 Dropbox API 串接的工程。
吉米:	真的。剛剛看了一下 dropbox 的說明文件,如果都自己來,那工可就多了。
<< 待續 >>