發表文章

GCP DevOps 實作系列四 連接 Jenkins 與 BitBucket

圖片
接續  GCP DevOps 實作系列三 設定 BitBucket ,接下來要在 Jenkins 中新增工作並抓取 BitBucket 儲存庫內容 [步驟四 連接 Jenkins 與 BitBucket] 回到 Jenkins,並建立一個新作業 devops (可自取),類型一樣使用 Free-Style 軟體專案。 在原始碼管理中,選取 git,並填入   GCP DevOps 實作系列三 設定 BitBucket  文中建立的儲存庫連結 接著在建置觸發程序中選擇 Build When a change is pushed to BitBucket,意思是當 BitBucket 儲存庫發生變化時 (push) 會觸發 Jenkins 執行 devops 工作 *注意 對應的 BitBucket plugin 必須要先安裝才會看到Build when a change is pushed to BitBucket 這個選項 設定完成後,可以利用儀表板上的馬上建置功能進行測試,結果可在 devops作業中的 Console Output 查看 *注意 由於儲存庫上還沒有任何資料,所以第一次的測試應該會失敗,可以嘗試上傳檔案到儲存庫後再進行測試 接著,我們嘗試新增檔案到儲存庫中。 在 BitBucket Overview 中,可以建立一個 Readme 檔案 更新完內容之後,點擊 Commit。這時候回到 Jenkins,就會發現變更已經被偵測到,指定的 devops作業就會開始執行 到這裡,自動化流程差不多已經完成一半。接下來進入下一步,運行 docker

GCP DevOps 實作系列三 設定 BitBucket

圖片
接續  GCP DevOps 實作系列二 設定 Jenkins ,接下來進行 BitBucket 設定 [步驟三 設定 BitBucket] 新增一個儲存庫 (repository) 並給予一個名稱 gcp_devops (可自取) 建立成功後,點選 Settings > Access keys > Add key 在  GCP DevOps 實作系列二 設定 Jenkins  文中已建立一組 Jenkins 使用的 RSA public key。將 key 新增至 BitBucket 專案中表示允許 Jenkins 存取該儲存庫。成功加入後應該會看到一筆 Jenkins 的資料 接下來,可以測試一下是否能夠正確地抓取儲存庫。抓取的位置可以在 Overview > SSH 中找到 測試步驟 1. 利用 ssh 連線至主機 2. 執行 sudo su jenkins 切換成 jenkins 3. cd ~ 移動至家目錄 4. git clone <BitBucket Repository ssh url> 抓取儲存庫,<> 請置換成正確路徑,例如 git clone git@bitbucket.org:james_lu/gcp_devops.git * 提醒 上述測試步驟可能會抓不到任何東西,因為儲存庫建立時是空的。會提示內容   你可以嘗試新增檔案後再抓取儲存庫 當儲存庫發生變化 (push) 時,我們希望 BitBucket 能夠通知 Jenkins。這時候需要設定 Webhook,點選 Settings > Webhooks > Add webhook 指定當發生變化時通知 http://ip<domain>/bitbucket-hook/ 在本案例中,主機的 ip 為 104.155.218.130以及 Jenkins 使用 8080 port,因此 webhook URL 填入 http://104.155.218.130:8080/bitbucket-hook/,給予一個名稱並儲存。設定成功之後可看到一筆新增的資料 *注意 bitbucket-hook/ 最後的 '/' 不可缺少 以

GCP DevOps 實作系列二 設定Jenkins

圖片
接續  GCP DevOps 實作系列一 建立執行個體 ,接下來要進行 Jenkins 的設定 [步驟二 設定 Jenkins] 第一次使用 Jenkins 時,可透過畫面指示找到一個預設的密碼,位置在 /var/lib/jenkins/secrets/initialAdminPassword *可透過  GCP DevOps 實作系列一  中提到的 SSH 連線到主機後取得 選推薦安裝 接下來就會進入安裝畫面 接著建立使用者 完成後就可以開始使用 Jenkins 由於這次的範例是使用 BitBucket 管控程式碼,為了讓 Jenkins 能夠與 BitBucket 溝通我們必須要安裝對應的 plugin,選擇 管理 Jenkins > 管理外掛程式 進入外掛程式管理後,選擇 可用的 > 輸入過濾條件 bitbucket > Bitbucket plugin 並直接安裝 安裝好 plugin 之後,可以嘗試建立一個 job 確認 Jenkins 是否可以正常運作。 首先,點選新增作業。進入新增作業頁面後,給予一個工作名稱 first_job (可自取) 並選擇 建置 Free-Style 軟體專案 接下來在建置段落中選擇執行 Shell  並鍵入 docker run hello-world 這個測試工作的目的只是確認 Jenkins 可以正常運作並執行 docker 指令,該指令會嘗試將 hello-world 映像檔 (image) 運行在容器 (Container) 中。 儲存後,點選儀表板左側的馬上建置,first_job 中所指定的工作就會被執行。 點選已執行任務後可在 Console Output 中看到 log,我們會發現 docker 發現沒有 hello-world 這個映像檔後,會自動抓取。成功下載後再建立容器運行映像檔 接下來要產出一組 RSA key 以供 Jenkins 能夠連到 BitBucket 取得程式碼 1. 透過 ssh 連到主機 2. 執行  sudo su jenkins 切換成 jenkins 使用者 3. cd ~ ,移動到家目錄

GCP DevOps 實作系列一 建立執行個體

圖片
今天來分享一下如何在 GCP 上建置 DevOps CI/CD 環境。以下針對使用的工具與環境做說明 Docker : 軟體容器平台 (Software Container Platform),輕量級的虛擬環境,可將軟體部署至獨立容器中的過程自動化 Jenkins : 開源的持續整合工具。我們需要使用它來執行一系列的自動化的工作包括監控程式碼的變化、重新測試與建置環境等等,以達到持續整合的目的。 BitBucket : 可以免費使用的程式碼版本控制平台。相較於 github,BitBucket可以建立不公開的儲存庫 (private repository),並提供五人以下同時使用,非常適合小型專案開發。 ubuntu 16.04 LTS : GCE 提供的映像檔 [前提備註] 目前 GCP 提供 300美金 / 年的免費專案,在規範資源內可以任意使用 GCP 的資源。當申請好帳號時,可至  GCP Console  申請免費試用。過程會需要提供信用卡資料,不過不必擔心會被收取費用,因為如果額度用完或者超過期限,專案會凍結。除非你決定要繼續使用則可手動解除。如需要知道更多內容可參考  免費試用 。完成申請之後就可以開始建置環境 [步驟一 建立執行個體] 首先我們需要建立一個執行個體,可在 Computer Engine > VM 執行個體 > 建立 填入名稱並指定區域以及機器等級還有預設的系統。 有兩種方法可以安裝需要的軟體例如 docker, Jenkins 等等。第一種方式可以在成功建立執行個體後逐一安裝,第二種方式我們可以在建立執行個體時,直接把需要的軟體透過 script 安裝進去。為了方便起見我們使用第二種方式如下 在開機指令碼中填入開機後所需要執行的 script,使用的 script 如下 script 看似複雜,其實也不過就是安裝個別軟體。 * 特別注意  useradd jenkins -G docker -m 如果想要讓 jenkins 執行 docker 指令則需要把 jenkins 加到 docker 群組中 * 特別注意  echo "jenkins ALL= NOPASSWD: ALL" >>

GCE Script :安裝 npm, docker, docker compose

圖片
建立 instance 的時候可加入 start script 一並安裝需要的軟體 將下列 script 貼到 Startup script 中,建立 instance 後,即可使用 npm, docker 與 docker compose *下列 script 適用於 ubuntu ##### npm section ##### sudo apt-get update -y sudo apt-get install -y npm ##### docker section ##### curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update -y apt-cache policy docker-ce sudo apt-get install -y docker-ce ##### docker compose section ##### sudo curl -o /usr/local/bin/docker-compose -L "https://github.com/docker/compose/releases/download/ 1.11.2 /docker-compose-$(uname -s)-$(uname -m)" sudo chmod +x /usr/local/bin/docker-compose

如何新增使用者並開放 sudo 權限以及取消輸入密碼的要求

測試作業環境:GCE ubuntu 16.04 LTS 映像檔 如果想在 ubuntu 中加入一個新的 user,可以利用 sudo useradd [使用者名稱] 新增 例如新增一個使用者 james: sudo useradd james 執行上面指令後 james 就會被新增到系統中,之後如果需要執行 sudo 的指令,可以把 james 轉成 sudoer,最簡易的做法是直接把 james 指定為 sudo 的群組成員如下 sudo adduser james sudo 如果想確定是否加入成功可以執行下列指令,該指令會列出 james 所隸屬的群組 (sudo) groups james 成功加入 sudo 群組後,當執行 sudo 命令時,每次系統都會提示需要輸入密碼,相當的麻煩。如果你需要利用這個使用者來執行一些背景工作的時候也會相當困擾。有兩種修改方式 1. 修改 /etc/sudoers 檔案,開啟檔案後新增一筆權限說明 james ALL=(ALL) NOPASSWD: ALL 2. 如果 /etc/sudoers 有指定參考 /etc/sudoers.d 目錄,則在 /etc/sudoers.d 底下新增一個檔案 james.user 填入以下內容 james ALL=(ALL) NOPASSWD: ALL 修改成功後,之後 james 在使用 sudo 指定的時候就不需要再輸入密碼

How to upload file to Storage without login

圖片
In order to upload file to Storage without login google account, we have to implement policy document. After that, user can upload file to Storage from web page via Form directly. There are 4 rough steps: Service Account p12 file, it can be created at  GCP Console   Uploading object metadata, including Bucket Key ACL Expiration, for more information:  Policy Document encryption fill above info to Form, upload file Step One:p12 file After login GCP Console , you can generate p12 file via API Manager -> Credentials -> Create credentials Only Storage Admin assigned because we utilize Storage service only. If you need more permissions for other services, please refer available roles. Please save your p12 file properly because there is only one chance to download the file. Step Two:uploading object metadata According to  Policy Document , JSON format is required for uploading object metadata. There are two major parts:  expiration:policy