之前 fir 上傳介面返回的資料裡增加了一個 release_id,讓我們可以直接跳轉到對應 Build 的下載頁面,但 GitLab 並不支援動態 Environment URL。
為此 GitLab 提供了一個環境變數 CI_ENVIRONMENT_SLUG
,可以作為合法的子域名使用,但這種方式並不利於我們接入第三方服務,例如 iOS 常用的測試分發平臺 fir。
解決方法也很簡單,使用一箇中轉伺服器去儲存 CI_ENVIRONMENT_SLUG
與下載地址的對映,然後通過 CI_ENVIRONMENT_SLUG
訪問時查詢對應的下載連結,重定向過去即可。
我順手用 Sinatra + SQLite 實現了一套,首先是定義資源 download_url
,新增 put方法新增下載連結:
put '/download_url' do request.body.rewind json = JSON.parse request.body.read slug = json['ci_environment_slug'] release_id = json['fir_release_id'] download_url = json['fir_download_url'] pass unless !slug.nil? || !slug.empty? pass unless !release_id.nil? || !release_id.empty? pass unless !download_url.nil? || !download_url.empty? guru_club_releases.insert(ci_environment_slug: slug, fir_release_id: release_id, fir_download_url: download_url) 'Success'end複製程式碼
接著是 get,通過 ci_environment_slug
獲取資源:
get '/download_url' do slug = params['ci_environment_slug'] row = guru_club_releases.where(ci_environment_slug: slug).first if row download_url = row[:fir_download_url] release_id = row[:fir_release_id] redirect "#{download_url
}?release_id=#{release_id
}" else halt 404, 'Could not find corespond release' endend複製程式碼
這裡有完整的 Demo。
覺得文章還不錯的話可以關注一下我的部落格。