以前 fir 上傳接口返回的數據裏增長了一個 release_id,讓咱們能夠直接跳轉到對應 Build 的下載頁面,但 GitLab 並不支持動態 Environment URL。git
爲此 GitLab 提供了一個環境變量 CI_ENVIRONMENT_SLUG
,能夠做爲合法的子域名使用,但這種方式並不利於咱們接入第三方服務,例如 iOS 經常使用的測試分發平臺 fir。github
解決方法也很簡單,使用一箇中轉服務器去存儲 CI_ENVIRONMENT_SLUG
與下載地址的映射,而後經過 CI_ENVIRONMENT_SLUG
訪問時查詢對應的下載連接,重定向過去便可。json
我順手用 Sinatra + SQLite 實現了一套,首先是定義資源 download_url
,添加 put方法新增下載連接:ruby
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'
end
end
複製代碼
這裏有完整的 Demo。less
以爲文章還不錯的話能夠關注一下個人博客。gitlab