GitLab 實現動態 Environment URL

四娘發表於2018-12-29

之前 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

覺得文章還不錯的話可以關注一下我的部落格

來源:https://juejin.im/post/5c26e0b751882579520b3aea#comment

相關文章