2018年9月19日 星期三

2018-09-19 Google Oauth v2 Scope 的坑!

      今天有一個客戶發現 Google 不能登入系統,都會登入失敗,請同事去看,是否因為更新了什麼導致的,因為事情緊急,我也幫忙處理問題...

危機處理:

客戶:為什麼不能用了,不能登入我們要怎麼作業 OOXX.
PM:好的我們馬上處理 <=聯絡工程師,並且安撫客戶
RD:我什麼都沒動欸,為什麼突然不能用了,前幾天還好好的,生氣氣!
DevOps:我來幫你看看,除錯的過程中...
PM:我也來幫忙找原因為什麼不能用,另外一個系統的 Google oauth 也不能用了
RD:什麼?難道是同一個問題!
PM:你們快點找出問題,我來跟客戶說先用帳號密碼登入,這是 Google 的問題,我們也是受害者,需要時間修復
DevOps:我發現你們用的 Oauth App ID的帳號他說今天到期,會是沒有繳錢被停用了嗎?
PM:我打電話去問 Google 客服,幹!客服説我們是免費帳戶,不提供技術支援,但是歡迎在上面留言!還是我們換一組 Oauth App ID
DevOps:替換到 Oauth App ID 之後,還是一樣的問題,初步排除 Oauth App ID 問題,還是用官方範例的插件重寫試試看 .
RD:我先回去寫原本的程式,比較不會讓費時間
PM:好的
DevOps:我使用官方插件還是一樣遇到一樣的問題,改回原來的寫法,網路搜尋也沒什麼人遇到這個問題,太奇怪了!再重寫的過程中發現 redirect_url 怪怪的後面的帶了不必要的參數,另外 scope 改用官方範例的寫,發現錯誤提示不一樣了,好像是 redirect_url 和 scope 問題,在測試一下發現可以正常使用了,太神奇了!
PM:那趕快更新系統,看系統可不可以正常運作了
RD:更新完了可以正常運作!
PM:還好不用加班解決這個問題了!
DevOps、RD、PM 我們一致認為是 Google 害了我們
DevOps:我發現晚上在記錄問題的時候,又重新測試了一次發現是redirect_url 變嚴格了,不是 Scope 的問題,我們誤會 Google 修改了 scope profile 的權限了!

Oauth 架構如下圖:

Your application sends a token request to the Google Authorization Server, receives an authorization code,
exchanges the code for a token, and uses the token to call a Google API endpoint.

2018年8月23日 星期四

Jenkins 開源的持續整合工具

Jenkins

op 231620h7QSPm_GBAETOF.jpg
Jenkins是一款由Java編寫的開源的持續整合工具。在與Oracle發生爭執後,專案從Hudson專案復刻。
Jenkins提供了軟體開發的持續整合服務。它執行在Servlet容器中(例如Apache Tomcat)。它支援軟體配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以執行基於Apache Ant和Apache Maven的專案,以及任意的Shell指令碼和Windows批次處理命令。Jenkins的主要開發者是川口耕介。[3]Jenkins是在MIT許可證下發布的自由軟體。[4]
可以通過各種手段觸發構建。例如提交給版本控制系統時被觸發,也可以通過類似Cron的機制排程,也可以在其他的構建已經完成時,還可以通過一個特定的URL進行請求。

2018年7月30日 星期一

Jmeter 壓力測試工具

簡介

Apache JMeter 是 Apache 開發的壓力測試套件,程式是以JAVA寫成,可以在 Unix-Like 上執行,也可以在 MS-Windows 上執行,本篇是在 Mac OS X 上執行。
Apache JMeter

安裝

  • Oracle JAVA
  • Apache JMeter下載網址
    解壓縮檔案後,執行 bin 目錄下的 jmeter.bat ,Unix/Mac OS X 請執行 jmeter.sh
    (不保證舊版或新版JMeter畫面和此版相同)

執行

點選 Jmeter.sh 開啟程式
op 螢幕快照 2018-07-27 上午10.45.18.png
op 螢幕快照 2018-07-27 上午10.47.17.png

step 1 設定 Thread Group 群組

在 Test Plan 上點右鍵, Add → Threads (Users) → Thread Group
op 螢幕快照 2018-07-27 上午10.48.50.png

step 2

Thread Properties
  • Number of Threads(users) 設定會有幾個使用者來存取 (測試) 我們的服務
  • Ramp-Up Period (in seconds) 指得是「在幾秒內達到所設定的使用者人數」,可以讓受測服務一開始不會接受到太過巨量的 Requests
op 螢幕快照 2018-07-27 上午10.52.58.png

step 3 模擬 每個使用者,都會對我們的服務存取一定的次數

在 Thread Group 上點右鍵, Add → Logic Controller → Loop Controller
op 螢幕快照 2018-07-27 上午10.54.17.png
設定 Loop count (迴圈/重複執行次數)為 100 次
op 螢幕快照 2018-07-27 上午10.58.56.png
設定完 Thread Group 和 Loop Count 後,也就等於控制了對受測服務所發出的 request 數量,這邊作個簡單的計數的話就是:
100 (Users) * 100 (Loop Count) = 10,000 (Requests)
也就是我們的服務將接受 10,000 次 requests 的測試。

step 4 設定要測試的 http request 資料

建立一個 HTTP Request。在 Loop Controller 上點右鍵, Add → Sampler → HTTP Request
op 螢幕快照 2018-07-27 上午11.00.00.png
輸入要測試的內容值
設定 API 參數:
IP: 127.0.0.1
Method: POST
Path: /api/v1/member
勾選 Use multipart/form-data for POST
Send Parameters With the Requests:
  • account: ${V(TestA10${Random(100000,100000000000,)}@gmail.com)}
    亂數產生 TestA10 {亂數100000-100000000000} @gmail.com
  • password: 123456
  • nickname: ${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}
    隨機10個英文字
  • device_id: ${__UUID} 隨機產生 UUID
    設到這裡基本上就可以開始測試了,接下來要設的是針對壓力測試結果的報表。
    op 螢幕快照 2018-07-27 上午11.03.59.png

step 5 View Results Tree

Loop Controller 上點右鍵, Add → Listener → View Results Tree 加入 View Results Tree 來記錄每一筆 Request 的結果
op 螢幕快照 2018-07-27 上午11.13.34.png
Loop Controller 上點右鍵, Add → Listener → Summary Report 加入 Summary Report 來統計 Request 的結果
op 螢幕快照 2018-07-27 上午11.15.42.png
Loop Controller 上點右鍵, Add → Listener → Graph Results 加入 Graph Results 以圖表顯示執行的結果
op 螢幕快照 2018-07-27 上午11.16.17.png

step 6 開始測試

點選綠色向右的三角形執行
op 螢幕快照 2018-07-27 上午11.16.58.png
執行結束,Summary Report
op 螢幕快照 2018-07-27 上午11.33.50.png
Graph Results 的結果長醬子,由於是存取localhost 所以大多request是 7.9秒 就處理完成。
op 螢幕快照 2018-07-27 上午11.38.04.png
View Results Tree 裡可以看到實際傳回的 request 和 response data.
op 螢幕快照 2018-07-27 上午11.34.12.png

step 8 清除任務,重新開始

點選齒輪掃把圖示來清楚記錄,清除完成後再點選三角形執行
op 螢幕快照 2018-07-27 上午11.23.36.png

常用 Debug

設定 一個使用者 ,一個迴圈,來測試
使用 View Results Tree 來查看 Request 是否正常
op 螢幕快照 2018-07-27 上午11.26.39.png
Sampler result
op 螢幕快照 2018-07-27 上午11.29.58.png
Request
op 螢幕快照 2018-07-27 上午11.30.06.png
Response data
op 螢幕快照 2018-07-27 上午11.30.12.png

進階應用

websocket

流程測試

  1. 計時器 counter 使用
  2. 創建會員 依據計時器來創建依序的會員
  3. 登入 輸入帳號密碼,取得使用者 ID and Token

常見問題

執行前要先儲存專案
op 螢幕快照 2018-07-27 上午11.20.51.png
op 螢幕快照 2018-07-27 上午11.30.12.png
op 螢幕快照 2018-07-27 上午11.30.06.png
op 螢幕快照 2018-07-27 上午11.34.12.png

結論

2018年6月19日 星期二

Source 介紹

Source 介紹

簡介
      Sourcetree 簡化了您與Git存儲庫的操作方式,因此您可以專注於編碼。
通過Sourcetree簡單的Git GUI可視化和管理您的存儲庫。

安裝



Bitbucket 創建專案

點選左邊的+創建專案
 

輸入專案名稱:bitbucket_git_example


2018年6月15日 星期五

Git 版本控管,寫程式的起手式

Git 版本控管,寫程式的起手式

什麼是Git?為什麼要用Git?

     Git是版本控制系統,專業一點說分散式版本控制系統,他就像我們玩遊戲的紀錄一樣,
可以讓你儲存當下的所有狀態,並且隨時切換到任何一個紀錄.我們之所以要使用Git是因為
他可以幫我們管理程式碼,在開發的過程中,所有的程式碼都有紀錄,可以隨時回到的某一
個版本或狀態,並且針對每次紀錄的修改都可以清楚地知道,修改了哪一個檔案哪一行,這對
於軟體開發非常的有用,可以參考

Git 常用指令

      網路上很多Git教學都寫得很好,我這邊就不多說只記錄我覺得常用的一些簡單觀念和指
令分享,主要還是讓自己未來可以有的地方回憶.

2018年6月14日 星期四

Blogger 期許

         這一個部落格是在我轉職DevOps職業後新創的部落格,我會在這邊寫有關DevOps這個職業的點點滴滴,包含一些心得和實作的技術文章,給一些想要在DevOps發展的人一些參考,也給自己在這條路上有一個紀錄,分享我所學習和應用的案例給大家,互相學習就是最好的練習,期許自己可以讓這個部落格可以影響更多的人.

      起:我的背景是資工畢業,當了四年的MIS兼輔助開發,這四年的經驗讓我熟悉網站架設流程,尤其熟練了Linux Centos 系統,這四年的MIS讓我有一些伺服器的經驗.
   
      承:在2015台灣第一次舉辦DevOps研討會,在那時候誤打誤撞參加了DevOps研討會,發現一條有趣的職業之路,讓我了解到原來軟體開發還可以這樣玩,很多的工具來幫助系統開發到系統維運的痛點,也埋下了要研究DevOps導入CI/CD的種子.

      轉:在2015 DevOps 研討會結束後,剛好從MIS轉職到Python後端工程師,開始實際的開發網頁系統,在開發的過程中學習到很多的網頁技術,有前端Html、CSS、JavaScript、jquery等,後端的Pyramid Framework、PostgreSQL、RestFul API等技術,在開發的過程中一邊學習軟體開發技能,另外一邊想說導入CI/CD的開發流程,但是迫於專案都在趕進度,而且環境也不適合.

      合:直到有一天,朋友說要去一家新公司問我要不要一起過去,我提出如果可以在新公司開發流程導入CI/CD,我就過去,就這樣開始了我的DevOps支路.


台灣人工智慧學校第四屆開學典禮

台灣人工智慧學校  第四屆 開學典禮       今天 AI 學校開學,非常特別像參加研討會一樣,開場介紹孔祥重校長和陳昇瑋執行長為什麼會創建這間學校,主要是他們發現AI技術可以幫助產業界解決很多問題,但是人才問題嚴重,希望透過一年三期每期500左右的規模並在北中南都有分校,來...