轉載自 https://segmentfault.com/a/1190000012921606html
在主機上建立目錄,並添加讀寫權限以便jenkins應用運行時讀寫文件,如:node
$ mkdir -p /var/jenkins_node $ chmod 777 /var/jenkins_node
拉取jenkins鏡像:docker pull jenkins
,當前是2.60.3
版。並運行:web
docker run -d --name myjenkins -p 8080:8080 -p 50000:50000 -v <your_jenkins_path>:/var/jenkins_home jenkins
將以前的目錄掛載爲數據卷。<your_jenkins>
替換爲你的目錄名,路徑須要是絕對路徑。
等待幾十秒,查看jenkins_node目錄,確認是否有jenkins應用生成的文件。
經過http://you_host:8080
登錄查看。是否出現Getting Started界面。docker
在Getting Started界面會須要初始的密碼Unlock Jenkins。
密碼會在輸出終端,也可根據頁面提示到容器的jenkins_home中查找。
因此你能夠npm
docker logs myjenkins
# 或者進入容器 docker exec -t myjenkins /bin/bash
有了密碼,輸入後安裝建議的插件。
完畢後,根據提示設置登錄帳戶。segmentfault
首頁 -> 點擊系統管理 -> 管理插件 ->可選插件 -> 過濾:ssh -> 選擇Publish Over SSH插件,點擊直接安裝。安全
首先在容器中生成rsa密鑰:bash
# 從宿主機客戶進入容器,目前容器名myjenkins,也可經過docker ps 查看 $ docker exec -it myjenkins /bin/bash # 進入容器後創建.ssh目錄,建立密鑰文件私鑰id_rsa,公鑰id_rsa.pub ~ mkdir ~/.ssh && cd ~/.ssh ~ ssh-keygen -t rsa # 一直回車便可
添加公鑰到宿主機
將id_rsa.pub中字符串添加到authorized_keys文件末尾,重啓ssh服務sudo service ssh restart
注意宿主機是否開啓ssh服務。
能夠在容器終端中使用下面的命令添加到宿主機中。也可手動複製id_rsa.pub到宿主機的.ssh/authorized_keys文件中。服務器
ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<host>
須要修改目標服務器的ssh配置文件,配置文件爲/etc/ssh/sshd_config。設置ssh-server容許使用私鑰和公鑰對的方式登陸,而後使用sudo /etc/init.d/ssh restart
命令重啓ssh服務。ssh
添加私鑰
jenkins首頁,系統管理 -> 系統設置 -> 下拉,找到Publish over SSH,填寫Key 和 SSH Server -> 保存

高級選項可以配置ssh服務器端口和超時。Test可測試,顯示success
配置成功。
首先,新建一個任務。填寫項目名稱。
選擇源碼管理爲:Git,填寫項目庫的URL。私有項目須要添加Git帳號。

構建環境:選擇Send files or execute commands over SSH after the build runs
,選擇服務器,以及添加Exec command
。保存。

# 根據你的項目須要編寫 sudo docker stop <node> || true \ && sudo docker rm <node> || true \ && cd /var/jenkins_node/workspace/<node> \ && sudo docker build --rm --no-cache=true -t <node> - < Dockerfile \ && sudo docker run -d --name <node> -p 3000:3000 -v /var/jenkins_node/workspace/node:/home/project <node>
端口設置的3000,也能夠另行設置-p 宿主機端口:容器端口
,記得確認服務器端口權限是否開啓。
Dockerfile
# 根據你的項目須要編寫 FROM node RUN mkdir -p /var/www/html/ RUN npm install -g yarn WORKDIR /var/www/html EXPOSE 3000 CMD ["npm","start"]
ps: npm install -g cnpm --registry=https://registry.npm.taobao.org
返回首頁,選擇項目,當即構建。成功後能夠經過http://you_host:3000
端口查看項目。
配置webhook,實現自動部署
獲取API tonken:首頁 -> 用戶 -> 選擇當前的用戶 -> 設置 -> 在API Tonken 項中點擊Show API Token...

添加令牌:返回首頁 -> 項目 -> 配置 -> 構建觸發器 -> 選擇 "觸發遠程構建" ->粘貼"API Token"內容到"身份驗證令牌"
登錄代碼託管平臺,找到你的項目,選擇管理,選擇webhook,添加URL,格式http://<you_host>:<port>/job/<object_name>/build?token=<API Token>
首頁 -> 系統管理 -> Configure Global Security ->
受權策略,勾選Allow anonymous read access
。

至此,完成自動化的構建和部署。當你推送代碼後就會實現自動構建,部署。
代碼推送和webhook的問題不大,照着例子寫不會出錯。
容器出錯的是鏡像構建和鏡像運行,以及容器間通訊的問題。
構建歷史
-->查看Console Output
,查看控制檯輸出
。這裏能夠看到是哪一步出錯。通常Sending build context to Docker daemon
以前是jenkins命令問題,以後是Dockerfile問題。docker images
查看),但運行失敗,或容器運行後退出,若是代碼本地運行良好,通常是CMD啓動命令錯誤,前臺運行一下容器,docker run -it --name <container_name> <image_name> /bin/bash
,進入容器後手動運行CMD,看看日誌輸出。另,docker exec -t <container_name> /bin/bash
能夠進入運行中的容器,能方便的查看代碼;docker logs <container_name>
顯示運行的日誌輸出。