圖文無關java
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。node
目前持續集成(CI)已成爲當前許多軟件開發團隊在整個軟件開發生命週期內側重於保證代碼質量的常見作法。它是一種實踐,旨在緩和和穩固軟件的構建過程。
Jenkins 做爲一款軟件開發的神器,能幫團隊很優雅地解決編譯和發佈等工做。支持超多的第三方系統軟件,自定義 Shell 腳本,豐富的插件,可讓你遊刃有餘地完成不少自動化的工做。git
Jenkins 能解決如下幾類問題:docker
提供兩種安裝方式。shell
war
文件,運行 java -jar jenkins.war
http://localhost:8080
根據頁面指導完成安裝我更加推薦這種方式。倉庫地址:https://hub.docker.com/_/jenk...npm
docker pull jenkins
掛載目錄到宿主機,例如使用/var/jenkins_home
,須要給目錄設置訪問權限segmentfault
chown 1000 /var/jenkins_home
啓動。 使用 root
帳號進行登陸,暴露端口 8080
,tcp 端口50000
api
docker run -u root -itd --name jenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home jenkins
Publish Over SSH
Publish Over SSH
/configure
頁面。配置 jenknis 的私鑰,和遠程服務地址和端口等等。
Remote Directory
,jenkins 推送過去的文件都會出如今這個目錄,設置遠程服務器的絕對路徑有可能無效。使用相對路徑便可。若是有多臺機器,都在這裏進行配置。另外,須要把 Jenkins 的公鑰,添加到 server1-3 的 ~/.ssh/authorized_keys
。bash
1. ssh jenkins 宿主機 2. cat /var/jenkins_home/.ssh/id_rsa.pub 3. 把公鑰存放到 server1-3 的`~/.ssh/authorized_keys` 4. 這樣 jenkins 這臺機器就能夠免密登錄到 server1-3 5. 若是 Jenkins 機器沒有 /var/jenkins_home/.ssh/,那麼就經過`ssh-keygen`生成
測試環境和產品環境應該使用不一樣的任務,由於服務會部署到不一樣的機器。執行流程也可能有差別。服務器
/var/jenkins_home/.ssh/id_rsa.pub
添加到倉庫的 access_key 裏面。保證 jenkins 能夠免密獲取到代碼,這個是最簡單那的配置
以 node 項目爲例,Jenkins shell 默認使用 非交互+非登錄式,因此獲取不到環境變量。解決辦法第一行須要寫成 #!/bin/bash -l
編譯任務都在這裏完成了。
Send build artifacts over SSH
sources files
是基於當前項目的工做目錄,絕對路徑是無效的,Publish Over SSH
的時候指定的。#!/bin/bash -l
FROM node:8 MAINTAINER 123 <123@123.me> expose 7001 ENV LANG="C.UTF-8" \ TZ="Asia/Shanghai" WORKDIR /data/work/ #設置時區 RUN echo Asia/Chongqing > /etc/timezone \ && ln -sfv /usr/share/zoneinfo/Asia/Chongqing /etc/localtime RUN echo "deb http://mirrors.aliyun.com/debian/ jessie main non-free contrib \n\ deb http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib \n\ deb-src http://mirrors.aliyun.com/debian/ jessie main non-free contrib \n\ deb-src http://mirrors.aliyun.com/debian/ jessie-proposed-updates main non-free contrib" \ > /etc/apt/sources.list \ && apt-get update \ && apt-get install -y libsasl2-dev libsasl2-modules-gssapi-heimdal \ && rm -rf /var/lib/apt #加入node程序並安裝npm包 ADD ./ ./ RUN set -ex \ && npm install -g cnpm --registry=https://registry.npm.taobao.org \ && cnpm install egg-development-proxyworker \ && cnpm install --production \ && cd clientapp \ && cnpm install \ && NODE_ENV="production" cnpm run build:prod CMD /bin/bash -c "npm run prod && while pidof node; do sleep 60; done"
#!/bin/bash -l set -ex docker build -t registry.cn-hangzhou.aliyuncs.com/123/minerdash:${BUILD_NUMBER} . # docker image tag registry.cn-hangzhou.aliyuncs.com/123/minerdash:${BUILD_NUMBER} registry.cn-hangzhou.aliyuncs.com/123/minerdash:latest docker push registry.cn-hangzhou.aliyuncs.com/123/minerdash:${BUILD_NUMBER}
set -ex docker pull registry.cn-hangzhou.aliyuncs.com/123/minerdash:${BUILD_NUMBER} docker rm -f minerdash || true docker run -d --name minerdash --network host registry.cn-hangzhou.aliyuncs.com/123/minerdash:${BUILD_NUMBER}