星期三, 5月 17, 2017

Web site time check

有些網路訂票、報名之類的頁面,往往秒殺,所以事先了解對方有沒有依網路校準時間相對重要。在 Linux 或 Mac 上可藉由以下指令探測對方的時鐘:
  • while sleep 1; do curl -sI http://... | grep Date; done

星期六, 5月 13, 2017

Visual Studio Team Services + Jenkins

除了 BitBucket 以外,Visual Studio Team Services 似乎也能成為雲端免費版控服務的提供者,平時用 Visual Studio 編輯程式,持續整合時用 Jenkins 往 VSTS 取程式下來。但一開始試得不那麼順利,原來是有許多秘辛:
  • VSTS 預設使用名為 Personal Access Tokens 的認證機制,不能與 Jenkins GIT_ASKPASS 相通,但若搭配 GitHub 上一個叫 Git-Credential-Manager-for-Windows 的用戶端軟體,在安裝時它會順道帶一個版本合適的 Git for Windows,省去許多麻煩。
  • 在某部電腦上若已用 Microsoft Account 連過 VSTS 並有版控存取權,也裝了上述的 GCM for Windows,就可透過命令列 git ls-remote -h https://yourVSTSAccount.visualstudio.com/DefaultCollection/_git/yourProject 測通。這時由於是透過 Personal Access Tokens 認證的,所以不需輸入帳密。
  • 即然不輸入帳密就能連有點不踏實,可以系統管理員身分下指令「git config --system --unset credential.helper」關閉,之後每次存取 VSTS 就要輸入帳密,而且輸入正確也沒用。
  • 會慌嗎?沒事的,同樣以系統管理員身分下指令「git config --system credential.helper manager」,一切又恢復不需帳密即可存取的原樣。
  • 此時可到 VSTS 網頁介面,右上角登入者的頭像下拉選單,Security -> Alternate authentication credentials -> Enable,輸入密碼兩次並儲存,未來即可在不依賴 credential.helper 的情況下存取 VSTS。
  • 回到 Jenkins,GIT_ASKPASS 的條件之一就是沒有 credential.helper,所以就通了。

星期五, 5月 12, 2017

Minimum and vulnerability-free .NET web project


為了驗證 Checkmarx 掃出的資安弱點與解法,需要這樣的 .NET 基礎專案當底:
  1. Solution 方案內僅有一個 Web Application 專案。
  2. 專案內僅有 Web.config,沒有其他任何網頁、樣式、前後端程式。
  3. Web.config 僅有如附圖的必要內容。
  4. 若以上條件皆符合,Visual Studio 能通過建置,且 Checkmarx 掃描沒有任何資安弱點。

星期五, 5月 05, 2017

Jenkins Node @ CentOS 6.7 can't fetch git via GIT_ASKPASS

最近忙著將 Jenkins 的工作分散到幾個 Node 上,其中一個要去 Git 抓原始碼總是卡在 git fetch 401,但若在 Terminal 下 git fetch ... https://user@githost... 又都沒問題?
我想錯誤應是來自於 Jenkins 的 Git Plugin,從 log 來反推它的決策過程:
  • > git --version
  • using GIT_ASKPASS to set credentials
  • > git fetch ...
以上是指出 Git Plugin 下了 git --version 命令取得結果之後,決定用 GIT_ASKPASS 這種比較新的做法來傳遞帳密,但我的 git --version 是 1.7.1,其實並不支援 GIT_ASKPASS(有個說法是 1.7.1.1 才開始),參考這篇到 WANDisco's CentOS repository 裝上新版 git 立刻就解決了。

星期五, 4月 21, 2017

Initial Docker on CentOS

安裝
  • sudo yum install docker
啟動 docker service
  • sudo systemctl start docker 或是舊指令 sudo service docker start
開機後自動啟動 docker service
  • sudo systemctl enable docker
省略當前使用者未來每個 docker 指令都要 sudo
  • sudo groupadd docker
  • sudo gpasswd -a ${USER} docker 或是另一種寫法 sudo usermod -aG docker ${USER}
  • sudo systemctl restart docker
  • logout / login

星期一, 4月 17, 2017

7 lines JavaScript crash SonarJs

如下圖的程式碼:
在 SonarQube 掃描會異常中止,得到如此的錯誤訊息:

java.lang.IllegalStateException: At least one branch of condition should be executed (condition on line 4)

現實中當然沒有這麼白痴的程式,這段其實出自於 primitives.latest.js 兩萬行之中精簡而來,幸好是可以排除的對象。

星期四, 4月 13, 2017

VPN establish connection difficulty?

即使所有參數(主機位址、帳密、協定...)設對,在 VM 裡的 Windows 要掛上 VPN 也很困難?除了要注意虛擬機器必須至少有一 Bridged 網卡之外,多網卡可能也會造成不當的權重導致 VPN 永遠走不上正確的路,例如附圖。解決之道是暫時先關閉其他不相干的(ex: NAT)網路介面,等 VPN 通了再復原不遲。