想堅持更新自己的博客這個想法已經很久了,一直都沒有邁開第一步。在2018年的最后日子里邁開了這一步。
Jenkins和docker做持續集成主要是緣由是因為公司在.net的路上轉頭向.net core 發展,由於.net core的版本更新比較頻繁在linux上安裝和卸載.net core不太方便,於是有了Jenkins+docker的組合。
Jenkins主要是負責持續集成,docker實際負責集成.net core環境部署程序。
Jenkins和docke的集成環境:centos7
一、安裝java環境
官網下載 jdk:jdk-8u171-linux-x64.rpm
安裝 jdk
配置環境
vim /etc/profile 在最后加上下面的配置
JAVA_HOME=/usr/java/jdk1.8.0_171 CLASSPATH=.:$JAVA_HOME/lib.tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH
執行 source /etc/profile 配置生效
二、安裝docker
安裝基礎環境 :yum install -y yum-utils device-mapper-persistent-data lvm2
獲取docker源 :
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
獲取docker版本列表:
yum list docker-ce --showduplicates|sort -r
安裝docker:
yum install docker-ce版本號
docker安裝后使用 docker infn 查詢是否安裝成功

啟動daocker :
systemctl start docker
編輯daemon
vim /etc/docker/daemon.json
{ "registry-mirrors": ["https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn"],//docker鏡像獲取地址,一般都配成阿里的鏡像這樣速度回很快 "insecure-registries": [""],//配置你要有自己的私有鏡像庫通過配置這個可以訪問 "max-concurrent-downloads": 10, "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "10m", "max-file": "3" } }
重新加載daemon :
systemctl daemon-reload
重啟docker:
systemctl restart docker
這樣docker安裝完畢
三、安裝Jenkins
官網下載 rpm包:https://pkg.jenkins.io/redhat-stable/ 我使用的是jenkins-2.121.1-1.1.noarch.rpm
下載
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.121.1-1.1.noarch.rpm
安裝:
yum install -y jenkins-2.121.1-1.1.noarch.rpm
啟動:
systemctl start jenkins
到這安裝已經完成准備開始配置Jenkins
訪問:http://ip:8080

提示需要/var/lib/jenkins/secrets/initialAdminPassword這里的密碼

需要選擇需要插件,這里可以選擇推薦插件安裝,后面還可以自己再選擇安裝其他插件,這里我選擇默認安裝

安裝中

安裝完成后的樣子,這時候就可以安裝自己想要插件了
我們項目使用使用的team foundation server存儲項目,所以要安裝tfs的插件
系統管理 -> 插件管理

插件安裝完成就可以去構建項目了
新建構建任務

填寫任務名稱然后選擇構建一個自由風格的軟件項目

創建任務后進去會看到這些選擇,有一個需要配置的在高級中

這里工作空間需要配置,為了后面的構建使用

配置項目源碼獲取,這里可以根據自己源碼的存儲方式選擇獲取方式,支持git,svn ,tfs是前面安裝的插件才能支持的
配置好項目源后Jenkins就能獲取到我們的項目了

這是構建觸發器

這個是構建環境配置
Abort the build if it's stuck 這里配置構建項目的超時 ps:這里要預估下自己項目的構建時間,如果構建的時間超過了超時時間就構建失敗
下面是構建的步驟,這個根據自己的環境來配置
我的構建步驟:
- 創建項目的docker鏡像
- 清除創建鏡像時產生的none鏡像(因為會很占空間)
- 創建docker鏡像的版本號(因為有自己的內部鏡像庫),同時推送鏡像到鏡像庫
- 創建docker鏡像的最新版本,同時推送鏡像到鏡像庫 ps:這樣做的主要目的如果項目是正常狀態部署直接獲取最新版本就可以了,版本可以用來回滾到以前的版本


這樣項目就已經構建完成,並同推送到鏡像庫中
還有構建后的操作

這個可以配置ssh一些遠程連接方式進行后續的部署。
這里我再分享下我的Dockerfile文件
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.2-sdk AS build WORKDIR /src COPY ["TxERP.NetCore.OrderingPolicy.Web/TxERP.NetCore.OrderingPolicy.Web.csproj", "TxERP.NetCore.OrderingPolicy.Web/"] COPY ["TxERP.NetCore.OrderingPolicy.Web/NuGet.config", "TxERP.NetCore.OrderingPolicy.Web/"] //如果你有自己的nuget私有庫的話需要把nuget的配置文件拷貝進來,保證項目能獲取到類庫 RUN dotnet restore "TxERP.NetCore.OrderingPolicy.Web/TxERP.NetCore.OrderingPolicy.Web.csproj" --disable-parallel COPY . . WORKDIR "/src/TxERP.NetCore.OrderingPolicy.Web" RUN dotnet build "TxERP.NetCore.OrderingPolicy.Web.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "TxERP.NetCore.OrderingPolicy.Web.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone //鏡像內部默認的是格林尼治時間,這樣時間會快8小時,所以要把時區文件拷貝進來 ENTRYPOINT ["dotnet", "TxERP.NetCore.OrderingPolicy.Web.dll"]
這個Dockerfile時間項目建立docker文件的基礎上做的改動可能有的朋友會用到
到此Jenkins和docke持續集成已經完成,謝謝各位能看完此文,有錯誤的地方還請大家給指出。
