Jenkins+Docker持續集成


本節內容:

  • Jenkins介紹
  • 安裝部署Jenkins
  • Jenkins構建maven風格的job
  • Jenkins郵件通知設置
  • Sonar
  • Jenkins與Docker結合

 

一、Jenkins介紹

 Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。

 

二、安裝部署Jenkins

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

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

 

1. 環境信息 

主機名 操作系統版本 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,配置環境變量(此步驟不再講述,java配置不可缺少)

我這里安裝的是jdk 1.8.0_65。

 

b.將從官網下載下來的jenkins.war文件放入tomcat下的webapps目錄下,進入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

切換到jenkins.war存放的目錄,輸入如下命令:

$ java -jar jenkins.war 

可以修改啟動端口

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

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

 

4. Jenkins授權和訪問控制

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

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

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

查看策略:

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

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

 

(1)注冊管理員賬號

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

 

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

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

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

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

以上操作,即可完成jenkins的授權和訪問控制。

 

5. Jenkins系統配置

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

 

(1)JDK配置

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

設置完了請記得保存。

 

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

根據使用的版本選擇控制版本的應用程序的路徑,如jdk配置即可。

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

點擊系統管理—>管理插件—>可選插件,在右上角”過濾”處輸入git進行搜索:

找到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所在主機是否安裝了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。點擊系統管理—>系統設置。

 

三、Jenkins構建maven風格的job

1. 新建maven任務

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

 

 

2. 構建任務配置

 

3. 源碼管理配置

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

 

4. 構建觸發器配置

在”源碼管理”下面是”構建觸發器”。

”構建觸發器”是一個持續集成的觸發器插件,可以根據已經完成構建的結果,觸發新Job或者傳遞參數。默認的選項是Build whenever a SNAPSHOT dependency is built,意思是依賴於快照的構建,意思是依賴於快照的構建,當代碼有更新時就構建項目。

Build periodically和Poll SCM可以設置定時自動構建。兩者區別如下:

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

我這里設置為每12小時構建一次。

 

5. Maven構建設置

(1)Pre Step

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

(2)配置Root POM和Goals and options

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

比如我這里是:

(3)Post Steps 

在maven項目創建完成后,我們還需要實現每次構建完成,將war發布到阿里雲主機上,以實現自動發布。我們通過添加shell實現自動發布。

找到Post steps下有個Execute shell:

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

將構建完成后,所要采取的動作,shell腳本腳本內容如下:

#!/bin/bash

#阿里雲主機
# Stop tomcat.
ssh root@114.55.29.246 '/usr/local/apache-tomcat-7.0.65/bin/shutdown.sh' &>/dev/null
sleep 15

# Check the stop is successful or not. If until not, kill the tomcat process.
if ssh root@114.55.29.246 'ps -ef|grep tomcat |grep -v "grep"' &>/dev/null; then
  tomcat_pid=`ps -ef | grep tomcat | grep -v "grep" | awk '{print $2}'`
  kill -9 ${tomcat_pid}
fi

# Check the stop is successful or not.
if ssh root@114.55.29.246 'ps -ef|grep tomcat |grep -v "grep"' &>/dev/null; then
  echo "Tomcat stop failed.Please check the problem."
  exit 5
fi

# Backup previous version and delete the war in the path /usr/local/apache-tomcat-7.0.65/webapps/.
ssh root@114.55.29.246 '/usr/bin/cp -f /usr/local/apache-tomcat-7.0.65/webapps/*.war /backups/*war'
ssh root@114.55.29.246 'rm -rf /usr/local/apache-tomcat-7.0.65/webapps/*'

# Copy the newest war to aliyun ECS.
scp /home/jenkins/.jenkins/workspace/godseye/godseye-parent/godseye-container/target/godseye-container-aliyun.war root@114.55.29.246:/usr/local/apache-tomcat-7.0.65/webapps/godseye.war &>/dev/null

# Start the tomcat.
ssh root@114.55.29.246 '/usr/local/apache-tomcat-7.0.65/bin/startup.sh' &>/dev/null
shell腳本

 

配置阿里雲主機信任內網的這台jenkins主機:

由於是war包在內網服務器上,發布的環境是在阿里雲主機上,所以要配置主機互信,防止scp war包時還需要輸入密碼。我這里內網服務器ip是172.16.206.30,外網是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郵件通知設置

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

(1)找到系統設置

 

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

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

 

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

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

此時我們已經可以發送郵件了。在具體job配置處,找到”構建設置”,輸入收件人信箱,但是你會發現只能在構建失敗時發郵件。可以安裝插件Email Extension Plugin來自定義。

 

2. 安裝使用插件Email Extension Plugin

(1)安裝插件Email Extension Plugin

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

在系統管理-插件管理-安裝Email Extension Plugin。它可根據構建的結果,發送構建報告。該插件支持jenkins 1.5以上的版本。

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

 

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

點擊”系統配置”—>”系統設置”。

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

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

構建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

<hr/>
(本郵件是程序自動下發的,請勿回復!)<br/><hr/>
項目名稱:$PROJECT_NAME<br/><hr/>
構建編號:$BUILD_NUMBER<br/><hr/>
svn版本號:${SVN_REVISION}<br/><hr/>
構建狀態:$BUILD_STATUS<br/><hr/>
觸發原因:${CAUSE}<br/><hr/>
構建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
構建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
變更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
Email Extension Plugin配置內容

點擊下面的保存。

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

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

附上構建日志,點擊高級設置。

配置Triggers:

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

 

五、Sonar

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

 

1. sonar簡介

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

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

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

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

 

2. 環境要求

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. 安裝配置數據庫

[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

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

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默認集成了jetty容器,可以直接啟動提供服務,也可以通過腳本構建為war包,部署在tomcat容器中。

Sonar默認的端口是”9000”、默認的上下文路徑是”/”、默認的網絡接口是”0.0.0.0”,默認的管理員帳號和密碼為:admin/admin,這些參數都可以在配置文件sonar.properties中修改。我這里修改下port,因為本機的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. 關閉sonar

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

 

9. 訪問sonar

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

默認的管理員帳號和密碼為:admin/admin。

 

 

 

10. sonar插件

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

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

sonar默認集成了Java Ecosystem插件,該插件是一組插件的合集:

  • Java [sonar-java-plugin]:java源代碼解析,計算指標等
  • Squid [sonar-squid-java-plugin]:檢查違反Sonar定義規則的代碼
  • Checkstyle [sonar-checkstyle-plugin]:使用CheckStyle檢查違反統一代碼編寫風格的代碼
  • FindBugs [sonar-findbugs-plugin]:使用FindBugs檢查違反規則的缺陷代碼
  • PMD [sonar-pmd-plugin]:使用pmd檢查違反規則的代碼
  • Surefire [sonar-surefire-plugin]:使用Surefire執行單元測試
  • 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數據庫及Sonar服務地址,添加如下配置:

<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服務器訪問地址 -->
</properties>
</profile>

<activeProfiles>
    <activeProfile>sonar</activeProfile>
</activeProfiles>

...

這部分內容具體可參照網上http://www.cnblogs.com/gao241/p/3190701.html

 

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

a.安裝插件

 

b.系統配置添加sonar的配置

進入系統配置頁面對sonar插件進行配置,如下圖:

 

然后點擊下面的保存。

 

c.配置構建項目,增加Post Build Action

點擊要構建的項目,在點擊左側的配置。

在頁面的最下面找到”構建后操作”,選擇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構建項目,構建完查看sonar控制台:

 

12. 常見問題

Jenkins構建完成后,sonar掃描代碼報錯:

解決: 卸載sonar的JavaScript插件。

 

六、Jenkins與Docker結合

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

 

1. 部署流程

  1. 研發push到svn代碼庫
  2. Jenkins 構建,pull svn代碼 使用maven進行編譯打包
  3. 打包生成的代碼,生成一個新版本的鏡像,push到本地docker倉庫harbor
  4. 發布,測試機器 pull 新版本的鏡像,並刪除原來的容器,重新運行新版本鏡像。

 

2. 環境說明

主機名 操作系統版本 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倉庫、業務部署測試環境 harbor、Docker 17.06.1-ce

 

 

 

 

3. 配置

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

[root@osb30 ~]# visudo
jenkins ALL=(root)      NOPASSWD: /usr/bin/docker

另外在Jenkins機器上配置:

# 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

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

+ 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機器上配置:

# visudo
#
#Defaults    requiretty
Defaults:root !requiretty

否則在機器172.16.206.32機器上執行腳本時會報錯:

[SSH] executing...
sudo: sorry, you must have a tty to run sudo
docker: invalid reference format.

 

4. 安裝插件

登錄Jenkins,點擊“系統管理”,點擊“管理插件”,搜索插件“SSH plugin”,進行安裝。

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

 

 

點擊“系統管理”,“系統配置”,找到“SSH remote hosts”。

 

5. 配置Post Steps

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

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

 

# Jenkins機器:編譯完成后,build生成一個新版本的鏡像,push到遠程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

 

# 拉取鏡像,發布
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  # 如果是第一次在這台機器上拉取運行容器,那么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/\"//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}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM