code-prettify

2016年7月27日 星期三

使用 Docker 啟動 Jenkins 2

Jenkins 2 是 Jenkins 的大改版,特色是主打 Pipelines,提供彈性的設定及狀態的視覺化。
詳細的內容可以參考官網 2.0 的介紹

假設已經有了 Docker 環境,如果沒有的話可以參考這篇文章建立一個 VM。
在 Windows 7 使用 Vagrant 建立 Docker VM 環境

因為 docker 內的修改在 container 停止後是不會保留的,為了避免失去相關資料,要先幫 jenkins 建立一個目錄來保存。
sudo mkdir /opt/jenkins
sudo chown vagrant.vagrant jenkins

將著執行指令取得 Jenkins 2 的 image 並且啟動 Container。

docker run -d \
    -v /opt/jenkins:/var/jenkins_home \
    -p 8082:8080 \
    --name jenkins2 \
    jenkinsci/jenkins

-v 參數 Data volumes,建立 Host 跟 Container 的對應,在 Container 中的 /var/jenkins_home 將會連結到 Host 的 /opt/jenkins。

-p 參數 Port Mapping ,是設定 Host 跟 Container 的 Port 對應,當 Container 有設定 export Port 時,可以透過此參數來對應 Host Port 及 Container Port。這個例子是,代表 Host 的 8082 Port 對應到 Container 的 8080 Port。

--name 參數是 Container 的名稱,方便識別,必須是唯一的,如果重覆必須先 rm 掉原本的 Container 。



輸入命令後,Docker 發現本地沒有這個 Image,會從 DockerHub 下載,下載完成會啟動一個 Container。

因為使用 VM,記得要設定 VirtualBox 的 Port Forwarding 喔。
VirtualBox 設定 Port Forwarding

開啟 http://localhost:8082
可以看到第一次登入 Jenkins,要求輸入管理員密碼。


畫面上提示密碼在 /var/jenkins_home/secrets/initialAdminPassword 目錄下,
但是別忘了,這個路徑實際上在 Host 是 /opt/jenkins/secrets/initialAdminPassword。


將那一串密碼輸入後,會請你選擇安裝建議套件,或是自己選擇套件,如果已經清楚需要哪些套件的話可以選右邊,否則就選左邊喔。


選擇左邊之後開始安裝套件,可以看到每個套件安裝的進度。


安裝後請你輸入第一個管理員的帳號及密碼,如果不想自訂可以選右下角的「Continue as admin」


選擇跳過自訂管理員帳號的話,會出現預設帳號 admin,及預設密碼 administrator。


最後就可以開始使用 Jenkins 嘍!




資料來源:
DockerHub - jenkinsci/jenkins
https://hub.docker.com/r/jenkinsci/jenkins/

DockerHub - bmst/jenkins2
https://hub.docker.com/r/bmst/jenkins2/

2016年7月19日 星期二

如何使用 Closure Compiler 最小化 JavaScript 產生 Source Maps 後進行偵錯

本文介紹以一個 AngularJS App 當範例,如何使用 Closure Compiler 最小化 (minimizes) 後產生的 Source Map 透過 Chrome 來進行偵錯 (Debug)。

Closure Compiler 是 Google 開發的 JavaScript 最小化編譯器,
關於細節可以參考 Google Closure Compiler 編譯器:產生最佳化(最小化)JavaScript 程式碼

本文使用的範例是 Kuroneko Idle Game (雖然不能算是一個遊戲)
所有的程式碼在 GitHub
https://github.com/allyusd/kuroneko
範例網站
http://allyusd.github.io/kuroneko

首先看一下完整建置指令
java -jar compiler-latest\compiler.jar --js_output_file myapp.min.js --create_source_map myapp.min.js.map --output_wrapper "%%output%%//# sourceMappingURL=myapp.min.js.map" js/**.js

這一段指令,將 js 目錄下含子目錄的所有 js 檔案,都合併成 myapp.min.js,並且在最後加上 sourceMappingURL 相關文字,同時產生 myapp.min.js.map 這個 Source Map 檔案。

參數介紹
js_output_file 表示最小化後輸出的 js 檔案名稱
create_source_map 表示同時要產生 Source Map,並指定檔案名稱
output_wrapper 可以進行加工,這個例子是加上 #sourceMappingURL 關鍵字

先介紹一下最小化,在開發 AngularJS (或任何 JavaScript 應用) 時,大部份的情況像是下圖的結構。


透過 Closure Compiler 可以合併成單一檔案,減少 Http request 次數,減少空白或換行字元,用短變數的替換…等等的好處。但是衍生了一個問題,就是不方便偵錯,這是用 Chrome 看到最小化後的結果(部份)。



人是貪心的,有沒有辦法魚與熊掌兼得呢?

實際上是有的,就是利用 Source Map,只要加上 create_source_map 參數就能產生,但是要如何使用呢?

我們在最小化的檔案 myapp.min.js 加上 sourceMappingURL 告訴瀏覽器 Source Map 的位置,接著用 Chrome 查看會出現下圖。



眼尖的話會發現除了 myapp.min.js 外出現很多斜體字檔案,其實就是合併前的 js 檔。開心的別太早,點開檔案發現裡面是空白的,因為並沒有把原始檔案上傳,如果有上傳的話,這時候已經可以看到原本的 JavaScript 檔案內容。

因為不想上傳多餘的東西,所以我們要偵錯的話必須讓 Chrome 知道原本的檔案在哪裡,首先在空白處點擊 Add folder to workspace


指定本地檔案路徑後,Chrome 上方會出現授權請求及警語。


按下允許後下方會出現本地工作目錄。

接著剩下最後一個動作了,在上面斜體字檔案按下右鍵,選擇 Map to file system resource...


最後選擇對應的本地檔案就完成了,結果如下圖


這些原始檔可不是只能看看而已,可以下中斷點的偵錯的喔!




資料來源
Introduction to JavaScript Source Maps
http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/

Map Preprocessed Code to Source Code
https://developers.google.com/web/tools/chrome-devtools/debug/readability/source-maps

Secrets of the Browser Developer Tools
http://devtoolsecrets.com/secret/debugging-use-javascript-source-maps.html

Set Up Persistence with DevTools Workspaces
https://developers.google.com/web/tools/setup/setup-workflow

2016年7月17日 星期日

使用 Docker 啟動 Shipyard

Shipyard 提供一個支援多主機 Docker 叢集的 Web UI 管理服務
可以透過 Web 管理容器,如下圖


假設已經有了 Docker 環境,如果沒有的話可以參考這篇文章建立一個 VM。
在 Windows 7 使用 Vagrant 建立 Docker VM 環境

馬上透過官方提供的腳本進行安裝
curl -s https://shipyard-project.com/deploy | bash -s


Docker 會將需要的 Image 從 DockerHub 下載,最後會出現
Username: admin Pasword: shipyard,等等會用到。

因為使用 VM,記得要設定 VirtualBox 的 Port Forwarding 喔。
可以參考 VirtualBox 設定 Port Forwarding

輸入 http://localhost:8080 就可以看到 shipyard 登入畫面,記得輸入剛剛的帳密。


登入後可以看到列出來的容器清單 Containes,可以看到 Shipyard 需要的相關服務都已經下載並啟動完成。


這麼一來就有 Docker 視覺化基本操作介面可以玩嘍!



Updata
20160720 開頭補充 Shipyard 簡單介紹


資料來源
Shipyard - Composable Docker Management
http://shipyard-project.com/

2016年7月11日 星期一

VirtualBox 設定 Port Forwarding

利用 VirtualBox 建立 VM,預設網路設定為 NAT,如果想要從 Host 存取 VM 的 Port,必須設定 Port Forwarding (連接埠轉送)。

開始 VM 的設定頁之後,選擇網路,連接埠轉送。



接著輸入名稱,主機連接埠、客體連接埠,然後按下確定,就完成設定了!

2016年7月10日 星期日

在 Windows 7 使用 Vagrant 建立 Docker VM 環境

需要安裝兩個軟體

一、VirtualBox
https://www.virtualbox.org/wiki/Downloads

二、Vagrant
https://www.vagrantup.com/downloads.html

在下載的過程中,簡單介紹一下 Vagrant。
Vagrant 官方定義為 「建立及設定輕量性、可重覆性及可攜性的開發環境」,主要是透過設定檔使用 VirtualBox 來建立一個虛擬機器 (Virtual Machine, VM),是達成 「Infrastructure As Code」的一種方式。

Vagrant 包裝好的環境,稱為 Vagrant Box,本來在 Vagrant Cloud 提供上傳下載,但是現在被 Atlas 合併後不開放新帳號註冊了,所以只能下載 Box,不能上傳,除非你有原本 Vagrant Cloud 的帳號,幸好主要是要用 Docker,以後有 DockerHub,這些事情就不重要嘍。

下載安裝完 VirutalBox 及 Vagrant 之後,就可以開啟命令提示字元 (cmd.exe) 來操作嘍。首先建立這次要使用的資料夾,會用來放 vagrant 設定檔
mkdir vagrant\ubuntu
cd vagrant\ubuntu



目標版本為 Ubuntu 14.04 LTS ,直接用已經存在的 Box 來進行初始化。
vagrant init ubuntu/trusty64


初始化會在資料夾產生一個 Vagrantfile,是 Vagrant 主要的設定檔,目前只有指定 Box 名稱,如果想要設定 cpu, memory 等等,也在這裡設定,目前先用預設值來啟動 VM。
vagrant up



如果是第一次使用這個 Box,會從 Atlas 網站下載,時間視檔案大小及網路速度而定,第二次之後就會省去這個動作,順便一提,下載後 Box 存放的路徑在 %USERPROFILE%\.vagrant.d\boxes。等進度條跑完,Vagrant 就會依照設定把 VM 開起來嘍。

接著使用 ssh 登入 VM吧。
vagrant ssh


這樣已經可以開始玩新建立的 VM 嘍,但是習慣用 PieTTY 連線的話怎麼辦呢?這時候就要回頭看一下啟動的訊息,其中最重要的是 22 (guest) => 2222 (host) 的 Forwading ports 設定,代表連到本機的 2222 port 就可以連到 VM 的 22 ssh port 喔。



預設的帳密是 vagrant / vagrant


因為 Ubuntu 14.04 還沒有預裝 Docker,所以我們要先安裝,
透過官方提供的指令可以快速完成相關安裝及設定。
curl -sSL https://get.docker.com/ | sudo sh


可以看到安裝的 Docker 版本是 1.11.2,且提示要使用非 root 操作 docker 的話,將該 user 加入 docker 群組中。
sudo usermod -aG docker ${USER}

輸入後重新登入,使用指令測試一下 dockre


回過頭來看一下 Vagrant 的效果,
只需要兩行指令,達到輕量性。
(init 指令可改為從 GitHub 取得 Vagrantfile)
直接使用 Box,為可重覆性。
可以在 Windows, Linux, Max 使用,算是可攜性。

以後就不需要苦惱要設定 VirtualBox 的 Image 要怎麼辦了,大大減少從 OS 安裝開始的流程,也不必靠文件的 SOP 來建立想要的環境,接下來就可以開始放心玩 Docker 嘍!



Udpate
20160716 因為 williamyeh/ubuntu-trusty64-docker 除了安裝 docker 之外有其它客製化,為了保持環境單純,改用 ubuntu/trusty64 當範例



資料來源
Vagrant Tutorial(2)跟著流浪漢把玩虛擬機
http://www.codedata.com.tw/social-coding/vagrant-tutorial-2-playing-vm-with-vagrant/

Vagrant Tutorial(3)細說虛擬機生滅狀態
http://www.codedata.com.tw/social-coding/vagrant-tutorial-3-vm-lifecycle/

Vagrant box: can't login with password from VirtualBox GUI
http://stackoverflow.com/questions/26524691/vagrant-box-cant-login-with-password-from-virtualbox-gui

《Docker —— 從入門到實踐­》正體中文版 - Ubuntu 系列安裝 Docker
https://philipzheng.gitbooks.io/docker_practice/content/install/ubuntu.html