Docker+Jenkins+Nodejs+Git+Webhook自動部署

1.準備環境

  • 一臺有網絡的Linux 服務器
  • Docker rpm安裝包,依賴包 libcgroup
  • jdk1.7 OR 1.8環境下載
  • Jenkins WAR包下載
  • NodeJs 源碼包下載

依賴下載地址:html

2.安裝Docker

rpm -ivh libcgroup-0.40.rc1-23.el6.x86_64.rpm 
rpm -ivh docker-engine-1.7.1-1.el6.x86_64.rpm

3.編寫Dockerfile

FROM ubuntu 

ADD jdk-8u171-linux-x64.tar.gz /usr/local/

RUN mv /usr/local/jdk1.8.0_171 /usr/local/java

ADD apache-tomcat-8.5.30.tar.gz /usr/local/

RUN mv /usr/local/apache-tomcat-8.5.30 /usr/local/tomcat

COPY jenkins.war /usr/local/tomcat/webapps/

ADD node-v8.11.1.tar.gz /root/

RUN apt-get update

RUN apt-get install -y python git ssh gcc g++ make

RUN /root/node-v8.11.1/configure && make -C /root/node-v8.11.1/ && make install -C /root/node-v8.11.1/ && rm -rf /root/node-v8.11.1/

ENV JAVA_HOME /usr/local/java

ENV JRE_HOME $JAVA_HOME/jre

ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 8080 3000 22

ENTRYPOINT ["java","-jar","/usr/local/tomcat/webapps/jenkins.war"]

(這裏就不對Dockerfile和語法作解釋了,能夠自行查閱資料)java

原本是要用tomcat啓動的,但容器啓動後tomcat沒啓動,試了不少種方法都不行,最後只能改爲java -jarnode

將Dockerfile與全部的軟件包放在一塊兒而後執行命令python

docker build -t jenkins ./
-t jenkins爲鏡像的TAG,'./'爲Dockerfile與軟件包的路徑,最後看到Successfully說明成功

(Docker基礎鏡像中有jenkins的鏡像,直接執行docker pull jenkins就能夠了,我爲何要用WAR包安裝,是由於jenkins鏡像的登錄用戶爲jenkins,登錄到容器後沒有權限不少事情都作不了)linux

4.運行鏡像

這時候運行docker images應該就會有一個叫jenkins的鏡像git

執行命令web

docker run -d -p 8080:8080 -p 50000:50000 -p 3000:3000 -p 50001:22 -v /var/jenkins_home:/root/.jenkins/ --name jenkins_node jenkins

(3000端口是本身設置的nodejs程序端口)docker

run 運行docker鏡像,-d 之後臺守護進程運行 ,-p 將容器端口開放(服務器端口:容器端口) , -v 掛載分區(服務器分區:容器分區) --name 指定容器名稱,最後的jenkins爲鏡像包名

若是出現這種問題,重啓docker服務,在嘗試啓動容器,如問題未能解決就將防火牆端口開放,而後重啓docker服務
圖片描述apache

以Centos7爲例npm

firewall-cmd --zone=public --add-port=50001/tcp --permanent
firewall-cmd --reload
systemctl restart docker
docker start jenkins_node

防火牆對docker的影響很大,在防火牆開啓的狀況下會遇到不少奇怪的錯誤,並且這些錯誤基本上查不到決絕辦法,能查到的只有與你遇到的問題無關的,但這些問題基本上都是與鏈接有關的,好比連不上主機或找不到主機,解析不了網址之類的,若是在防火牆開啓的狀況下遇到這類問題就先檢查防火牆,而後重啓docker服務和容器

5.jenkins配置

jenkins安裝

  1. 打開瀏覽器並輸入:"服務器地址:8080"訪問,出現以下頁面
    圖片描述
  2. 將服務器"/var/jenkins_home/secrets/initialAdminPassword"文件的內容複製到輸入框,點擊繼續

    圖片描述

  3. 點擊左邊的推薦安裝,等待安裝完成

    圖片描述

  4. 設置Admin user

    圖片描述

jenkins插件安裝配置

  1. 點擊 系統管理 --> 插件管理
  2. 選擇 「可選插件」
  3. 右上角搜索SSH,--> 選擇Publish Over SSH -->點擊 直接安裝
  4. 等待安裝完成
  5. 安裝成功後,點擊 系統管理 --> 插件管理
  6. 拉到最下面找到 "Publish over SSH" , 設置服務器的SSH信息

    1. 到服務器執行docker exec -it jenkins_node bash登錄到容器
    2. 重置用戶密碼passwd
    3. 安裝一個編輯器apt-get install -y vim
    4. 安裝完以後vim /etc/ssh/sshd_config編輯ssh配置文件
    5. 找到PermitRootLogin prohibit-password改成PermitRootLogin yes保存文件
    6. 從新啓動sshservice ssh restart
    7. 設置ssh開機自啓動update-rc.d ssh defaults
    8. 生成ssh祕鑰ssh-keygen -t rsa什麼都不要輸直接回車直到完成就好
    9. 切換到ssh祕鑰目錄cd ~/.ssh/會有兩個文件'id_rsa'(祕鑰)和'id_rs a.pub'(公鑰)文件
    10. 將公鑰複製cp id_rsa.pub authorized_keys
    11. 複製id_rsa(祕鑰)文件中的內容
    12. 到jenkins ‘Publish over SSH’ 設置找到SSH Servers 點擊 "增長 --> 高級"

      • Name : ssh server名稱隨意設置
      • Hostname : 服務器ip地址
      • Username : 容器用戶名
      • 選中 Use password authentication, or use a different key
      • Passphrase / Password : 容器用戶密碼
      • Key : 將剛剛複製的id_rsa(祕鑰)內容粘貼到這裏
      • Port : 設置成鏡像運行命令中將22端口映射爲50001的端口
      • 點擊Test Configuration出現Success成功
      • 若是出現下圖請檢查authorized_keys文件名稱或內容是否正確,和複製的私鑰內容是否正確,docker容器ssh是否運行。
      • 圖片描述
      • 若是出現下圖就到宿主機開放50001端口
      • ![圖片描述
      • 保存

    圖片描述

6.jenkins項目配置

  1. 首頁,點擊左上角」新建」
  2. General: 只填 項目名稱便可
  3. 源碼管理: 填寫Git信息
    Repository URL : 填寫項目git地址
    Credentials : 若是有用戶名密碼,點擊add添加用戶信息,輸入用戶名密碼

    圖片描述

    若是出現圖中CAfile錯誤就到容器中執行git config --global http.sslverify false關閉https證書檢測,而後回到頁面將Repository URL中的地址剪切並從新粘貼

  4. 構建環境選中‘Send files or execute commands over SSH before the build starts’
    Remote directory : 執行此命令的文件夾位置,通常爲"./",意思是在項目目錄
    Exec command :所執行的構建命令,例如"npm start"
    圖片描述
  5. 保存,返回首頁,並構建剛剛建立的項目

7.自動部署

  1. jenkins --> 首頁 --> 用戶
    圖片描述
  2. 設置 --> 點擊 "show API Token"
    圖片描述
  3. 複製API Token內容
    圖片描述
  4. 返回首頁 --> (本身的項目) --> 配置 --> 構建觸發器 --> 選擇 "觸發遠程構建" -->粘貼"API Token"內容到"身份驗證令牌"
    圖片描述
  5. 登錄git平臺,找到你的項目,選擇管理,選擇webhook
    圖片描述

    • URL 中 node 請替換爲你在jenkins上建立的項目名稱
    • token爲複製的 API Token內容
  6. 此時你git push,會發現jenkins並無自動構建,是由於jenkins的安全策略致使的,還須要以下設置。
    jenkins首頁,選擇 系統管理-->Configure Global Security(系統設置下面那個) 進行以下設置
    圖片描述
相關文章
相關標籤/搜索