GitLab 實現動態 Environment URL

以前 fir 上傳接口返回的數據裏增長了一個 release_id,讓咱們能夠直接跳轉到對應 Build 的下載頁面,但 GitLab 並不支持動態 Environment URLgit

爲此 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
複製代碼

這裏有完整的 Demoless

以爲文章還不錯的話能夠關注一下個人博客gitlab

相關文章
相關標籤/搜索