佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Jenkins+Docker持續(xù)集成的實現(xiàn)

Jenkins+Docker持續(xù)集成的實現(xiàn)

熱門標(biāo)簽:阿里云 硅谷的囚徒呼叫中心 使用U盤裝系統(tǒng) 智能手機(jī) 網(wǎng)站建設(shè) 檢查注冊表項 百度競價點擊價格的計算公式 美圖手機(jī)

一、Jenkins介紹

Jenkins是一個開源軟件項目,是基于Java開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續(xù)集成變成可能。

二、安裝部署Jenkins

下載地址:https://jenkins.io/download/

我這里下載war包安裝,版本:1.642.3 LTS .war

1. 環(huán)境信息

主機(jī)名 操作系統(tǒng)版本 IP地址 安裝軟件
osb30 Redhat 6.5 172.16.206.30 jenkins

2. 新建Jenkins用戶

[root@osb30 ~]# groupadd jenkins

[root@osb30 ~]# useradd -g jenkins jenkins

[root@osb30 ~]# id jenkins

uid=501(jenkins) gid=501(jenkins) groups=501(jenkins)

[root@osb30 ~]# echo "wisedu" | passwd --stdin jenkins &> /dev/null

3. Jenkins安裝方式

安裝jenkins有兩種方式,tomcat方式部署和java部署啟動。本次實驗我以tomcat下部署啟動為例。

(1)tomcat方式部署

a.首先安裝tomcat和JAVA,配置環(huán)境變量(此步驟不再講述,java配置不可缺少)

我這里安裝的是jdk 1.8.0_65。

b.將從官網(wǎng)下載下來的jenkins.war文件放入tomcat下的webapps目錄下,進(jìn)入tomcat的/bin目錄下,啟動tomcat即啟動jenkins。

我這里用的是tomcat8。

c.啟動jenkins時,會自動在webapps目錄下建立jenkins目錄,訪問地址為:http://localhost:8080/jenkins

[jenkins@osb30 ~]$ tar zxf apache-tomcat-8.0.30.tar.gz

[jenkins@osb30 ~]$ mv jenkins.war apache-tomcat-8.0.30/webapps/

[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30

[jenkins@osb30 apache-tomcat-8.0.30]$ bin/startup.sh

Jenkins home directory: /home/jenkins/.jenkins found at: $user.home/.jenkins

如果啟動時報錯:

Caused by:java.awt.AWTError: Can't connect to X11 window server using ':0' as the value of the DISPLAY varible...

解決:

[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30/bin/

[jenkins@osb30 bin]$ vim catalina.sh

JAVA_OPTS="-Xms1024m -Xmx1024m -Djava.awt.headless=true"

d.訪問jenkins

http://172.16.206.30:8080/jenkins

(2)java部署啟動jenkins

切換到j(luò)enkins.war存放的目錄,輸入如下命令:

$ java -jar jenkins.war

可以修改啟動端口

$ java -jar jenkins.war --httpPort=8000

然后在瀏覽器中(推薦用火狐、chrom)輸入http://localhost:8080,localhost可以是本機(jī)的ip,也可以是計算機(jī)名。就可以打開jenkins;修改端口后,訪問地址的端口需同步變更。

4. Jenkins授權(quán)和訪問控制

默認(rèn)地Jenkins不包含任何的安全檢查,任何人可以修改Jenkins設(shè)置,job和啟動build等。顯然地在大規(guī)模的公司需要多個部門一起協(xié)調(diào)工作的時候,沒有任何安全檢查會帶來很多的問題。 我們可以通過下面的方式來增強(qiáng)Jenkins的安全:

訪問jenkins:http://172.16.206.30:8080/jenkins

點擊系統(tǒng)管理—> Configure Global Security,點擊”啟用安全”,可以看到可以使用多種方式來增強(qiáng)Jenkins的授權(quán)和訪問控制:

查看策略:

如上圖所示,默認(rèn)是”任何用戶可以做任何事情(沒有任何限制)”。

我們在”安全域”選擇”Jenkins專有用戶數(shù)據(jù)庫”,”允許用戶注冊”;并先在“授權(quán)策略”點擊“任何用戶可以做任何事情(沒有任何限制)”, 防止注冊之后無法再管理jenkins。此時就可以刷新一下jenkins的頁面看到右上角有登錄、注冊的按鈕。

(1)注冊管理員賬號

a.點擊注冊,首先注冊一個管理員賬號。

b.點擊系統(tǒng)管理—> Configure Global Security,在“授權(quán)策略”選擇”安全矩陣”,添加用戶/組——添加admin賬戶——為admin賬戶添加所有權(quán)限,為匿名用戶勾選你希望對方了解的功能。

【注意】:匿名用戶一定要開啟此處的可讀權(quán)限,若不開啟,后面github或者bitbucket的webhook自動構(gòu)建會沒有權(quán)限。

并且勾選上該項,點擊保存。

做完此部操作之后,即可用admin帳號登錄,取消登錄用戶可以做任何事的權(quán)限。

以上操作,即可完成jenkins的授權(quán)和訪問控制。

5. Jenkins系統(tǒng)配置

登錄jenkins——系統(tǒng)管理——系統(tǒng)設(shè)置,為jenkins添加上需要的功能配置,有如下幾個方面:

(1)JDK配置

在jdk的選項,點擊”新增JDK”,取消自動安裝,輸入jdk別名(名稱隨意),JAVA_HOME大家應(yīng)該都很了解,在此處填寫jenkins所在服務(wù)器安裝的java程序的HOME位置即可,根據(jù)不同操作系統(tǒng)填寫不同路徑,如win7 D:\Java\jdk1.8 linux /usr/lib/jvm/jdk1.7.0_51。

設(shè)置完了請記得保存。

(2)git/svn版本控制添加

根據(jù)使用的版本選擇控制版本的應(yīng)用程序的路徑,如jdk配置即可。

【注意】:如果使用Git作為版本控制庫,Jenkins默認(rèn)情況下是沒有安裝Git的。我們需要到插件管理界面中選中Git,然后點擊直接安裝。

點擊系統(tǒng)管理—>管理插件—>可選插件,在右上角”過濾”處輸入git進(jìn)行搜索:

找到Git client plugin和Git plugin,在前面打上√,點擊直接安裝。

安裝插件中。。。

安裝成功后,重啟jenkins。

[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30

[jenkins@osb30 apache-tomcat-8.0.30]$ bin/shutdown.sh

[jenkins@osb30 apache-tomcat-8.0.30]$ bin/startup.sh ;tail -f logs/catalina.out

(3)Jenkins添加maven配置

先判斷jenkins所在主機(jī)是否安裝了maven:

# mvn –version

-bash: mvn: command not found

如果沒有安裝,請先安裝maven。

a.CentOS 安裝maven

[root@osb30 ~]# cd /usr/local/

[root@osb30 local]# wget http://apache.opencas.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

 

[root@osb30 local]# tar zxf apache-maven-3.3.9-bin.tar.gz

[root@osb30 local]# ln -s apache-maven-3.3.9 maven

[root@osb30 local]# vim /etc/profile

# 添加如下配置:

# Maven configuration.

MAVEN_HOME=/usr/local/maven

export PATH=$MAVEN_HOME/bin:$PATH

[root@osb30 local]# source /etc/profile

 

[root@osb30 local]# mvn -version

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)

Maven home: /usr/local/maven

Java version: 1.8.0_65, vendor: Oracle Corporation

Default locale: en_US, platform encoding: UTF-8

OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"

b.Jenkins配置maven

安裝完成后,登錄jenkins。點擊系統(tǒng)管理—>系統(tǒng)設(shè)置。

三、Jenkins構(gòu)建maven風(fēng)格的job

1. 新建maven任務(wù)

登錄jenkins,點擊新建。輸入Item名稱,選擇“構(gòu)建一個maven項目”,點擊OK。

2. 構(gòu)建任務(wù)配置

3. 源碼管理配置

進(jìn)入配置頁面,找到”源碼管理”。我這里是svn,輸入項目所在版本庫的地址。

4. 構(gòu)建觸發(fā)器配置

在”源碼管理”下面是”構(gòu)建觸發(fā)器”。

”構(gòu)建觸發(fā)器”是一個持續(xù)集成的觸發(fā)器插件,可以根據(jù)已經(jīng)完成構(gòu)建的結(jié)果,觸發(fā)新Job或者傳遞參數(shù)。默認(rèn)的選項是Build whenever a SNAPSHOT dependency is built,意思是依賴于快照的構(gòu)建,意思是依賴于快照的構(gòu)建,當(dāng)代碼有更新時就構(gòu)建項目。

Build periodically和Poll SCM可以設(shè)置定時自動構(gòu)建。兩者區(qū)別如下:

  • Poll SCM:定時檢查源碼變更(根據(jù)SCM軟件的版本號),如果有更新就checkout最新code下來,然后執(zhí)行構(gòu)建動作。
  • Build periodically:定時進(jìn)行項目構(gòu)建(它不care源碼是否發(fā)生變化)。

我這里設(shè)置為每12小時構(gòu)建一次。

5. Maven構(gòu)建設(shè)置

(1)Pre Step

Pre Steps選項用來配置構(gòu)建前的工作,這里不作更改。

(2)配置Root POM和Goals and options

因為是Maven項目,所以Build選項有Root POM和Goals and options的設(shè)置。Root POM:填寫你項目的pom.xml文件的位置,注意:是相對位置,如果該文件不存在,會有紅色字提示。

比如我這里是:

(3)Post Steps

在maven項目創(chuàng)建完成后,我們還需要實現(xiàn)每次構(gòu)建完成,將war發(fā)布到阿里云主機(jī)上,以實現(xiàn)自動發(fā)布。我們通過添加shell實現(xiàn)自動發(fā)布。

找到Post steps下有個Execute shell:

【注意】:Jenkins在執(zhí)行該shell腳本的時候是以jenkins這個用戶身份去執(zhí)行。某些場景下請注意環(huán)境變量PATH。

配置阿里云主機(jī)信任內(nèi)網(wǎng)的這臺jenkins主機(jī):

由于是war包在內(nèi)網(wǎng)服務(wù)器上,發(fā)布的環(huán)境是在阿里云主機(jī)上,所以要配置主機(jī)互信,防止scp war包時還需要輸入密碼。我這里內(nèi)網(wǎng)服務(wù)器ip是172.16.206.30,外網(wǎng)是114.55.29.246。

[jenkins@osb30 ~]$ ssh-keygen -t rsa -f .ssh/id_rsa

[jenkins@osb30 ~]$ ssh-copy-id -i .ssh/id_rsa.pub root@114.55.29.246

四、Jenkins郵件通知設(shè)置

1. 配置jenkins自帶的郵件功能

(1)找到系統(tǒng)設(shè)置

(2)填寫系統(tǒng)管理員郵箱

【注意】:這個系統(tǒng)管理員郵件地址一定要填寫,否則郵件發(fā)不出去,連下面的測試郵件都發(fā)不出去。

(3)找到郵件通知,輸入SMTP服務(wù)器地址,點擊高級,輸入發(fā)件人帳號和密碼

(4)勾選上”通過發(fā)送測試郵件測試配置”,然后輸入收件人帳號

此時我們已經(jīng)可以發(fā)送郵件了。在具體job配置處,找到”構(gòu)建設(shè)置”,輸入收件人信箱,但是你會發(fā)現(xiàn)只能在構(gòu)建失敗時發(fā)郵件??梢园惭b插件Email Extension Plugin來自定義。

2. 安裝使用插件Email Extension Plugin

(1)安裝插件Email Extension Plugin

該插件支持jenkins 1.5以上的版本。

在系統(tǒng)管理-插件管理-安裝Email Extension Plugin。它可根據(jù)構(gòu)建的結(jié)果,發(fā)送構(gòu)建報告。該插件支持jenkins 1.5以上的版本。

【注意】:安裝完如果使用Email Extension Plugin,就可以棄用自帶的那個郵件功能了。

(2)配置使用插件Email Extension Plugin

點擊”系統(tǒng)配置”—>”系統(tǒng)設(shè)置”。

找到Extended E-mail Notification處,輸入如下的配置:

【注意】:上面的User Name和Password需要點開“高級設(shè)置”后才能看到,必須輸入用戶名和密碼,否則郵件發(fā)不出去。

點擊下面的保存。

然后去job配置頁面激活這個插件。找到需要發(fā)郵件的項目,點擊進(jìn)去。

點擊配置,點擊”增加構(gòu)建后操作步驟”,選擇Editable Email Notification。

附上構(gòu)建日志,點擊高級設(shè)置。

配置Triggers:

更詳細(xì)的介紹:http://www.cnblogs.com/zz0412/p/jenkins_jj_01.html

五、Sonar

官方文檔:http://docs.sonarqube.org/display/SONARQUBE45/Documentation

1. sonar簡介

Sonar是一個用于代碼質(zhì)量管理的開源平臺,用于管理Java源代碼的質(zhì)量。通過插件機(jī)制,Sonar 可以集成不同的測試工具,代碼分析工具,以及持續(xù)集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通過不同的插件對這些結(jié)果進(jìn)行再加工處理,通過量化的方式度量代碼質(zhì)量的變化,從而可以方便地對不同規(guī)模和種類的工程進(jìn)行代碼質(zhì)量管理。

與持續(xù)集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是簡單地把不同的代碼檢查工具結(jié)果(例如 FindBugs,PMD 等)直接顯示在 Web 頁面上,而是通過不同的插件對這些結(jié)果進(jìn)行再加工處理,通過量化的方式度量代碼質(zhì)量的變化,從而可以方便地對不同規(guī)模和種類的工程進(jìn)行代碼質(zhì)量管理。

在對其他工具的支持方面,Sonar 不僅提供了對 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 這些工具里聯(lián)機(jī)查看結(jié)果;同時 Sonar 還對大量的持續(xù)集成工具提供了接口支持,可以很方便地在持續(xù)集成中使用 Sonar。

此外,Sonar 的插件還可以對 Java 以外的其他編程語言提供支持,對國際化以及報告文檔化也有良好的支持。

2. 環(huán)境要求

http://docs.sonarqube.org/display/SONAR/Requirements

3. 新建用戶

[root@osb30 ~]# groupadd sonar

[root@osb30 ~]# useradd -g sonar sonar

[root@osb30 ~]# id sonar

uid=502(sonar) gid=502(sonar) groups=502(sonar)

[root@osb30 ~]# echo "wisedu" | passwd --stdin sonar &> /dev/null

4. 安裝jdk

[sonar@osb30 ~]$ java -version

java version "1.8.0_65"

Java(TM) SE Runtime Environment (build 1.8.0_65-b17)

Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

5. 安裝配置數(shù)據(jù)庫

[root@osb30 ~]# mysql -uroot –p

mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';

mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'wisedu';

mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'wisedu';

mysql> FLUSH PRIVILEGES;

6. 安裝sonar

我這里用的版本是SonarQube 4.5.7 (LTS *),上傳該軟件到sonar用戶的家目錄下。

[sonar@osb30 ~]$ unzip -oq sonarqube-4.5.7.zip

[sonar@osb30 ~]$ vim sonarqube-4.5.7/conf/sonar.properties

修改如下字段(就是配置數(shù)據(jù)庫信息,其他不用動):

sonar.jdbc.username:                       sonar

sonar.jdbc.password:                       wisedu

sonar.jdbc.url:                            jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

 

# Optional properties

sonar.jdbc.driverClassName:                com.mysql.jdbc.Driver

7. 啟動sonar

Sonar默認(rèn)集成了jetty容器,可以直接啟動提供服務(wù),也可以通過腳本構(gòu)建為war包,部署在tomcat容器中。

Sonar默認(rèn)的端口是”9000”、默認(rèn)的上下文路徑是”/”、默認(rèn)的網(wǎng)絡(luò)接口是”0.0.0.0”,默認(rèn)的管理員帳號和密碼為:admin/admin,這些參數(shù)都可以在配置文件sonar.properties中修改。我這里修改下port,因為本機(jī)的9000端口被其他程序占用了。

[sonar@osb30 ~]$ vim sonarqube-4.5.7/conf/sonar.properties

sonar.web.port=9003

[sonar@osb30 ~]$ sonarqube-4.5.7/bin/linux-x86-64/sonar.sh start

查看日志:

[sonar@osb30 ~]$ tail -f sonarqube-4.5.7/logs/sonar.log

可以看到第一次啟動時,初始化語句:

8. 關(guān)閉sonar

[sonar@osb30 ~]$ sonarqube-4.5.7/bin/linux-x86-64/sonar.sh stop

9. 訪問sonar

瀏覽器輸入http://172.16.206.30:9003/

默認(rèn)的管理員帳號和密碼為:admin/admin。

10. sonar插件

Sonar支持多種插件,插件的下載地址為:http://docs.codehaus.org/display/SONAR/Plugin+Library

將下載后的插件上傳到${SONAR_HOME}extensions\plugins目錄下,重新啟動sonar。

sonar默認(rèn)集成了Java Ecosystem插件,該插件是一組插件的合集:

  • Java [sonar-java-plugin]:java源代碼解析,計算指標(biāo)等
  • Squid [sonar-squid-java-plugin]:檢查違反Sonar定義規(guī)則的代碼
  • Checkstyle [sonar-checkstyle-plugin]:使用CheckStyle檢查違反統(tǒng)一代碼編寫風(fēng)格的代碼
  • FindBugs [sonar-findbugs-plugin]:使用FindBugs檢查違反規(guī)則的缺陷代碼
  • PMD [sonar-pmd-plugin]:使用pmd檢查違反規(guī)則的代碼
  • Surefire [sonar-surefire-plugin]:使用Surefire執(zhí)行單元測試
  • Cobertura [sonar-cobertura-plugin]:使用Cobertura獲取代碼覆蓋率
  • JaCoCo [sonar-jacoco-plugin]:使用JaCOCO獲取代碼覆蓋率

11. 與jenkins集成

可以通過maven集成,也可以直接與jenkins集成。我這里選擇直接與jenkins集成。

(1)修改maven的主配置文件(${MAVEN_HOME}/conf/settings.xml文件或者 ~/.m2/settings.xml文件),在其中增加訪問Sonar數(shù)據(jù)庫及Sonar服務(wù)地址,添加如下配置:

<profile>

<id>sonar</id>

<properties>

    <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar</sonar.jdbc.url>

    <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>

    <sonar.jdbc.username>sonar</sonar.jdbc.username>

    <sonar.jdbc.password>sonar</sonar.jdbc.password>

    <sonar.host.url>http://localhost:9003</sonar.host.url> <!-- Sonar服務(wù)器訪問地址 -->

</properties>

</profile>

 

<activeProfiles>

    <activeProfile>sonar</activeProfile>

</activeProfiles>
...

(2)在jenkins的插件管理中選擇安裝sonar jenkins plugin,該插件可以使項目每次構(gòu)建都調(diào)用sonar進(jìn)行代碼度量。

a.安裝插件

b.系統(tǒng)配置添加sonar的配置

進(jìn)入系統(tǒng)配置頁面對sonar插件進(jìn)行配置,如下圖:

然后點擊下面的保存。

c.配置構(gòu)建項目,增加Post Build Action

點擊要構(gòu)建的項目,在點擊左側(cè)的配置。

在頁面的最下面找到”構(gòu)建后操作”,選擇SonarQube。

It is no longer recommended to use SonarQube maven builder. It is preferable to set up SonarQube in the build environment and use a standard Jenkins maven target.

【解決】:
http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins

修改Build處:

最后去jenkins構(gòu)建項目,構(gòu)建完查看sonar控制臺:

12. 常見問題

Jenkins構(gòu)建完成后,sonar掃描代碼報錯:

解決: 卸載sonar的JavaScript插件。

六、Jenkins與Docker結(jié)合

我這里沒有使用Docker Pipeline,直接在構(gòu)建完成后,執(zhí)行shell腳本,這樣更靈活。

1. 部署流程

  • 研發(fā)push到svn代碼庫
  • Jenkins 構(gòu)建,pull svn代碼 使用maven進(jìn)行編譯打包
  • 打包生成的代碼,生成一個新版本的鏡像,push到本地docker倉庫harbor
  • 發(fā)布,測試機(jī)器 pull 新版本的鏡像,并刪除原來的容器,重新運行新版本鏡像。

2. 環(huán)境說明

主機(jī)名 操作系統(tǒng)版本 IP地址 用途 安裝軟件
osb30 Redhat 6.5 172.16.206.30 svn代碼庫、Jenkins、Docker jenkins、svn、Docker 1.7.1
spark32 CentOS 7.0 172.16.206.32 本地docker倉庫、業(yè)務(wù)部署測試環(huán)境 harbor、Docker 17.06.1-ce

3. 配置

由于在Jenkins機(jī)器上docker是使用root用戶運行的,而Jenkins是使用普通用戶jenkins運行的,所以要先配置下jenkins用戶可以使用docker命令。

[root@osb30 ~]# visudo

jenkins ALL=(root)      NOPASSWD: /usr/bin/docker

另外在Jenkins機(jī)器上配置:

# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.

#         You have to run "ssh -t hostname sudo <cmd>".

#

#Defaults    requiretty

Defaults:jenkins !requiretty

如果不配置這個,在執(zhí)行下面腳本時,會報錯誤:

+ cp -f /home/jenkins/.jenkins/workspace/godseyeBranchForNov/godseye-container/target/godseye-container-wisedu.war /home/jenkins/docker-file/godseye_war/godseye.war

+ sudo docker login -u jkzhao -p Wisedu123 -e 01115004@wisedu.com 172.16.206.32

sudo: sorry, you must have a tty to run sudo

在172.16.206.32機(jī)器上配置:

# visudo

#

#Defaults    requiretty

Defaults:root !requiretty

否則在機(jī)器172.16.206.32機(jī)器上執(zhí)行腳本時會報錯:

[SSH] executing...

sudo: sorry, you must have a tty to run sudo

docker: invalid reference format.

4. 安裝插件

登錄Jenkins,點擊“系統(tǒng)管理”,點擊“管理插件”,搜索插件“SSH plugin”,進(jìn)行安裝。

登錄Jenkins,點擊“Credentials”,點擊“Add domain”。

點擊“系統(tǒng)管理”,“系統(tǒng)配置”,找到“SSH remote hosts”。

5. 配置Post Steps

項目其他的配置不變,見上面的章節(jié)。

【注意】:腳本中用到的倉庫和認(rèn)證的賬號需要先在harbor新建好。

# Jenkins機(jī)器:編譯完成后,build生成一個新版本的鏡像,push到遠(yuǎn)程docker倉庫

 

# Variables

JENKINS_WAR_HOME='/home/jenkins/.jenkins/workspace/godseyeBranchForNov/godseye-container/target'

DOCKERFILE_HOME='/home/jenkins/docker-file/godseye_war'

HARBOR_IP='172.16.206.32'

REPOSITORIES='godseye_war/godseye'

HARBOR_USER='jkzhao'

HARBOR_USER_PASSWD='Wisedu123'

HARBOR_USER_EMAIL='01115004@wisedu.com'

 

# Copy the newest war to docker-file directory.

\cp -f ${JENKINS_WAR_HOME}/godseye-container-wisedu.war ${DOCKERFILE_HOME}/godseye.war

 

# Delete image early version.

sudo docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} -e ${HARBOR_USER_EMAIL} ${HARBOR_IP} 

IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`

if [ -n "${IMAGE_ID}" ];then

    sudo docker rmi ${IMAGE_ID}

fi

 

# Build image.

cd ${DOCKERFILE_HOME}

TAG=`date +%Y%m%d-%H%M%S`

sudo docker build -t ${HARBOR_IP}/${REPOSITORIES}:${TAG} . &>/dev/null

 

# Push to the harbor registry.

sudo docker push ${HARBOR_IP}/${REPOSITORIES}:${TAG} &>/dev/null

# 拉取鏡像,發(fā)布

HARBOR_IP='172.16.206.32'

REPOSITORIES='godseye_war/godseye'

HARBOR_USER='jkzhao'

HARBOR_USER_PASSWD='Wisedu123'

 

# 登錄harbor

#docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}

 

# Stop container, and delete the container.

CONTAINER_ID=`docker ps | grep "godseye_web" | awk '{print $1}'`

if [ -n "$CONTAINER_ID" ]; then

    docker stop $CONTAINER_ID

    docker rm $CONTAINER_ID

else #如果容器啟動時失敗了,就需要docker ps -a才能找到那個容器

    CONTAINER_ID=`docker ps -a | grep "godseye_web" | awk '{print $1}'`

    if [ -n "$CONTAINER_ID" ]; then  # 如果是第一次在這臺機(jī)器上拉取運行容器,那么docker ps -a也是找不到這個容器的

        docker rm $CONTAINER_ID

    fi

fi

 

# Delete godseye_web image early version.

IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`

if [ -n "${IMAGE_ID}" ];then

    docker rmi ${IMAGE_ID}

fi

 

# Pull image.

TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"http://g'` #最后的sed是為了去掉tag前后的雙引號

docker pull ${HARBOR_IP}/${REPOSITORIES}:${TAG} &>/dev/null

 

# Run.

docker run -d --name godseye_web -p 8080:8080 ${HARBOR_IP}/${REPOSITORIES}:${TAG}

到此這篇關(guān)于Jenkins+Docker持續(xù)集成的實現(xiàn)的文章就介紹到這了,更多相關(guān)Jenkins Docker持續(xù)集成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:懷化 賀州 黃山 湖北 煙臺 通遼 湘潭 山南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Jenkins+Docker持續(xù)集成的實現(xiàn)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    苏尼特右旗| 额尔古纳市| 且末县| 革吉县| 咸丰县| 阿拉尔市| 长治市| 高安市| 象山县| 西安市| 西吉县| 洞口县| 星子县| 收藏| 南部县| 蓝山县| 沙洋县| 黔东| 黑河市| 和林格尔县| 琼海市| 疏附县| 永昌县| 托里县| 正定县| 姚安县| 台南县| 北宁市| 剑川县| 石景山区| 昂仁县| 庄河市| 论坛| 湘潭县| 余干县| 江永县| 鹤庆县| 扶风县| 政和县| 大埔区| 抚松县|