iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 7
1

使用 CI/CD 工具通常不會是自己一個人使用,因此設定團隊與認證是非常重要的。

團隊

概念上,我們可以把團隊視為一個命名空間,將不同團隊的 Pipeline 和資料分隔出來。而認證的方式則取決於團隊,也就是說不同團隊可以用有不一樣的認證方式。另一方面,團隊中並不存在「使用者」這一概念,對 Concourse 只在意用什麼方式通過驗證而已。

主團隊

在 Concourse 裡面有一個特例的團隊叫做 main 是唯一擁有權限新增和修改其他團隊的團隊,而且目前沒有辦法將其他團隊提升權限到這個層級,因此是唯一特例的團隊。而主團隊的認證方式,也需要在部署的時候就決定好,無法在部署後調整認證方式。

新增團隊

當你透過 fly 指令登入 main 團隊後,就可以使用 set-team 指令來新增或者修改團隊。

fly set-team -n my-team \
    --basic-auth-username ci \
    --basic-auth-password changeme

而團隊被新增出來後,我們就能用 fly login -n my-team 來指定要登入的團隊。

在切換團隊後,新設定的 Pipeline 等,都會被這個團隊所有有,除非設定為公開不然其他團隊是無法瀏覽的。

認證

因為在建置的時候我們需要有非常多秘鑰之類的設定,還要確保原始碼不會被不相干的人取得。所以需要進行認證的設定,讓有權限的人可以取得和配置這些資訊。

不過即使設定了認證,如果在公開的網路環境中沒有搭配 SSL 加密連線的話,還是有不安全的。

基本認證

最簡單的認證方式,使用 HTTP Basic Auth 的機制,只需要設定帳號和密碼。

fly set-team -n my-team \
    --basic-auth-username foo \
    --basic-auth-password bar

Github

透過 Github 提供的 OAuth 來進行認證,是目前 Concourse 少數支援的第三方認證機制之一。不過要設定的項目也相對的比較多一點。

fly set-team -n concourse \
    --github-auth-client-id $CLIENT_ID \
    --github-auth-client-secret $CLIENT_SECRET \
    --github-auth-team concourse/Pivotal

除了 Client ID 和 Client Secret 之外,所謂的 Auth Team 是指 Github 中在 concourse 組織裡面的 Pivotal 這個團隊有權限存取。

因為使用了 OAuth 認證,所以 Callback 網址也需要在 Github 上面設定,網址位置是 /auth/github/callback 已 Concourse 自己的伺服器來舉例,就是 https://ci.concourse.ci/auth/github/callback

另外,除了指定 Github 團隊外,還有下面幾種授權的方式。

  • --github-auth-user=LOGIN:對特定使用者授權
  • --github-auth-team=ORG/TEAM NAME:對組織中的某個團隊授權
  • --github-auth-organization=ORG:對某個組織授權

OAuth

既然能支援 Github 的 OAuth 那麼一般的 OAuth 大多能夠相容,透過設定一樣可以用任何提供 OAuth 2 的服務來當作認證的提供者。

fly set-team -n my-team-in-x \
    --generic-oauth-display-name 'X' \
    --generic-oauth-client-id $CLIENT_ID \
    --generic-oauth-client-secret $CLIENT_SECRET \
    --generic-oauth-auth-url https://oauth.example.com/o/oauth2/auth \
    --generic-oauth-token-url https://oauth.example.com/o/oauth2/token

表面上看起來相對 Github 多了不少設定,不過其實就是將 OAuth 伺服器提供進來(畢竟 Github 已經是已知的數值可以跳過)

假設需要提供一些額外的參數在認證中使用,可以透過下面兩種方式:

  • --generic-oauth-auth-url-param scope:read
  • --generic-oauth-scope concourse.main

第一種是透過增加網址的參數來實現,而第二種則是賦予 Sceop 數值,可以試 OAuth 2 提供者來調整,像是 Google 就是屬於第二種的類型。

至於 Callback 網址跟 Github 基本上沒有差異,只是從 github 改為 oauth 了!已 Concourse 官方 CI 伺服器的範例舉例,就是 https://ci.concourse.ci/auth/oauth/callback 這個網址。

目前團隊基本上都是有完全的權限操作裡面所有的 Pipeline 不過官方似乎有打算增加更多控制項,但是作為基本的認證已經足夠。

下一篇我們將會正式開始使用 Concourse 來執行一些任務。


上一篇
05 - 建置環境 (2)
下一篇
08 - Hello World
系列文
不一樣的 CI/CD 工具:Concourse 初探30

尚未有邦友留言

立即登入留言