Jenkins+docker作持續集成

想堅持更新本身的博客這個想法已經好久了,一直都沒有邁開第一步。在2018年的最後日子裏邁開了這一步。java

Jenkins和docker作持續集成主要是原因是由於公司在.net的路上轉頭向.net core 發展,因爲.net core的版本更新比較頻繁在linux上安裝和卸載.net core不太方便,因而有了Jenkins+docker的組合。linux

Jenkins主要是負責持續集成,docker實際負責集成.net core環境部署程序。git

Jenkins和docke的集成環境:centos7docker

1、安裝java環境json

官網下載 jdk:jdk-8u171-linux-x64.rpmvim

安裝 jdkcentos

配置環境app

vim /etc/profile 在最後加上下面的配置ssh

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 配置生效svn

2、安裝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安裝完畢

3、安裝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持續集成已經完成,謝謝各位能看完此文,有錯誤的地方還請你們給指出。

相關文章
相關標籤/搜索