Jenkins + Docker 持續集成

Jenkins介紹

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

 

安裝部署Jenkins

https://jenkins.io/download/
我這裏下載war包安裝,版本:1.642.3 LTS .warjava

環境信息

主機名 操做系統版本 IP地址 安裝軟件
osb30 Redhat 6.5 172.16.206.30 jenkins

新建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

Jenkins安裝方式

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

tomcat方式部署

1.首先安裝tomcat和JAVA,配置環境變量(此步驟再也不講述,java配置不可缺乏)
我這裏安裝的是jdk 1.8.0_65。linux

2.將從官網下載下來的jenkins.war文件放入tomcat下的webapps目錄下,進入tomcat的/bin目錄下,啓動tomcat即啓動jenkins。
我這裏用的是tomcat8。git

3.啓動jenkins時,會自動在webapps目錄下創建jenkins目錄,訪問地址爲:http://localhost:8080/jenkinsgithub

[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

若是啓動時報錯:web

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

解決:sql

[jenkins@osb30 ~]$ cd apache-tomcat-8.0.30/bin/
[jenkins@osb30 bin]$ vim catalina.sh 
JAVA_OPTS="-Xms1024m -Xmx1024m -Djava.awt.headless=true"

4.訪問jenkins
http://172.16.206.30:8080/jenkinschrome

java部署啓動jenkins

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

$ java -jar jenkins.war

能夠修改啓動端口

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

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

Jenkins受權和訪問控制

默認地Jenkins不包含任何的安全檢查,任何人能夠修改Jenkins設置,job和啓動build等。顯然地在大規模的公司須要多個部門一塊兒協調工做的時候,沒有任何安全檢查會帶來不少的問題。 咱們能夠經過下面的方式來加強Jenkins的安全:
訪問jenkins:http://172.16.206.30:8080/jenkins,
點擊系統管理—> Configure Global Security,點擊」啓用安全」,能夠看到可使用多種方式來加強Jenkins的受權和訪問控制:


如上圖所示,默認是」任何用戶能夠作任何事情(沒有任何限制)」。
咱們在」安全域」選擇」Jenkins專有用戶數據庫」,」容許用戶註冊」;並先在「受權策略」點擊「任何用戶能夠作任何事情(沒有任何限制)」, 防止註冊以後沒法再管理jenkins。此時就能夠刷新一下jenkins的頁面看到右上角有登陸、註冊的按鈕。

註冊管理員帳號

1.點擊註冊,首先註冊一個管理員帳號。

2.點擊系統管理—> Configure Global Security,在「受權策略」選擇」安全矩陣」,添加用戶/組——添加admin帳戶——爲admin帳戶添加全部權限,爲匿名用戶勾選你但願對方瞭解的功能。

【注意】:匿名用戶必定要開啓此處的可讀權限,若不開啓,後面github或者bitbucket的webhook自動構建會沒有權限。
而且勾選上該項,點擊保存。

作完此部操做以後,便可用admin賬號登陸,取消登陸用戶能夠作任何事的權限。
以上操做,便可完成jenkins的受權和訪問控制。

Jenkins系統配置

登陸jenkins——系統管理——系統設置,爲jenkins添加上須要的功能配置,有以下幾個方面:

jdk版本

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

設置完了請記得保存。

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

Jenkins添加maven配置

先判斷jenkins所在主機是否安裝了maven:

# mvn –version
-bash: mvn: command not found

若是沒有安裝,請先安裝maven。

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
Java home: /usr/java/jdk1.8.0_65/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"
Jenkins配置maven

安裝完成後,登陸jenkins。點擊系統管理—>系統設置。

Jenkins構建maven風格的job

新建maven任務

登陸jenkins,點擊新建。輸入Item名稱,選擇「構建一個maven項目」,點擊OK。

構建任務配置

源碼管理配置

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

構建觸發器配置

在」源碼管理」下面是」構建觸發器」。
」構建觸發器」是一個持續集成的觸發器插件,能夠根據已經完成構建的結果,觸發新Job或者傳遞參數。默認的選項是Build whenever a SNAPSHOT dependency is built,意思是依賴於快照的構建,意思是依賴於快照的構建,當代碼有更新時就構建項目。
Build periodically和Poll SCM能夠設置定時自動構建。二者區別以下:

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

我這裏設置爲每12小時構建一次。

Maven構建設置

Pre Step

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

配置Root POM和Goals and options

由於是Maven項目,因此Build選項有Root POM和Goals and options的設置。Root POM:填寫你項目的pom.xml文件的位置,注意:是相對位置,若是該文件不存在,會有紅色字提示。
好比我這裏是:

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 10

# 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

配置阿里雲主機信任內網的這臺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郵件通知設置

配置jenkins自帶的郵件功能

1.找到系統設置

2.填寫系統管理員郵箱

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

4.勾選上」經過發送測試郵件測試配置」,而後輸入收件人賬號

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

安裝使用插件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處,輸入以下的配置:

構建通知:$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/>

點擊下面的保存。
而後去job配置頁面激活這個插件。找到須要發郵件的項目,點擊進去。

點擊配置,點擊」增長構建後操做步驟」,選擇Editable Email Notification。

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

配置Triggers:

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

sonar

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

sonar簡介

Sonar是一個用於代碼質量管理的開源平臺,用於管理Java源代碼的質量。經過插件機制,Sonar 能夠集成不一樣的測試工具,代碼分析工具,以及持續集成工具,好比pmd-cpd、checkstyle、findbugs、Jenkins。經過不一樣的插件對這些結果進行再加工處理,經過量化的方式度量代碼質量的變化,從而能夠方便地對不一樣規模和種類的工程進行代碼質量管理。
與持續集成工具(例如 Hudson/Jenkins 等)不一樣,Sonar 並非簡單地把不一樣的代碼檢查工具結果(例如 FindBugs,PMD 等)直接顯示在 Web 頁面上,而是經過不一樣的插件對這些結果進行再加工處理,經過量化的方式度量代碼質量的變化,從而能夠方便地對不一樣規模和種類的工程進行代碼質量管理。
在對其餘工具的支持方面,Sonar 不只提供了對 IDE 的支持,能夠在 Eclipse 和 IntelliJ IDEA 這些工具裏聯機查看結果;同時 Sonar 還對大量的持續集成工具提供了接口支持,能夠很方便地在持續集成中使用 Sonar。
此外,Sonar 的插件還能夠對 Java 之外的其餘編程語言提供支持,對國際化以及報告文檔化也有良好的支持。

環境要求

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

新建用戶

[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

安裝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)

安裝配置數據庫

[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;

安裝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

啓動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

能夠看到第一次啓動時,初始化語句:

關閉sonar

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

訪問sonar

瀏覽器輸入http://172.16.206.30:9003/
默認的管理員賬號和密碼爲:admin/admin。


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獲取代碼覆蓋率

與jenkins集成

能夠經過maven集成,也能夠直接與jenkins集成。我這裏選擇直接與jenkins集成。

經過maven集成

修改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

直接與Jenkins集成

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

1.安裝插件

2.系統配置添加sonar的配置
進入系統配置頁面對sonar插件進行配置,以下圖:


而後點擊下面的保存。

3.配置構建項目,增長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控制檯:

常見問題

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

解決:
卸載sonar的JavaScript插件。

Jenkins與Docker結合

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

部署流程

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

環境說明

主機名 操做系統版本 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

配置

因爲在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.

安裝插件

登陸Jenkins,點擊「系統管理」,點擊「管理插件」,搜索插件「SSH plugin」,進行安裝。
登陸Jenkins,點擊「Credentials」,點擊「Add domain」。



點擊「系統管理」,「系統配置」,找到「SSH remote hosts」。

配置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}
 
 
相關文章
相關標籤/搜索