jenkins部署

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用戶

1

2

3

4

5

[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

1

2

3

4

5

[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

如果啓動時報錯:

1

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

解決:

1

2

3

[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存放的目錄,輸入如下命令:

1

$ java -jar jenkins.war

可以修改啓動端口

1

$ 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。

1

2

3

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

1

2

# mvn –version

-bash: mvn: command not found

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

 

a.CentOS 安裝maven

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

[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 [email protected] '/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 [email protected] '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 [email protected] '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 [email protected] '/usr/bin/cp -f /usr/local/apache-tomcat-7.0.65/webapps/*.war /backups/*war'
ssh [email protected] '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 [email protected]:/usr/local/apache-tomcat-7.0.65/webapps/godseye.war &>/dev/null

# Start the tomcat.
ssh [email protected] '/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。

1

2

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

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

 

四、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需要點開“高級設置”後才能看到,必須輸入用戶名和密碼,否則郵件發不出去。

 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. 新建用戶

1

2

3

4

5

[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

1

2

3

4

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

1

2

3

4

5

6

[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用戶的家目錄下。

1

2

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

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

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

1

2

3

4

5

6

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端口被其他程序佔用了。

1

2

3

[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

查看日誌:

1

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

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

 

8. 關閉sonar

1

[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服務地址,添加如下配置:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<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命令。

1

2

[root@osb30 ~]# visudo

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

另外在Jenkins機器上配置:

1

2

3

4

5

# 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

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

1

2

3

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 [email protected] 172.16.206.32

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

在172.16.206.32機器上配置:

1

2

3

4

# visudo

#

#Defaults    requiretty

Defaults:root !requiretty

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

1

2

3

[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新建好。

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

# 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='[email protected]'

 

# 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

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

# 拉取鏡像,發佈

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}

 

分類: Docker,持續集成

標籤: JenkinsDocker

好文要頂 關注我 收藏該文  

暴走小騷年
關注 - 13
粉絲 - 52

+加關注

4

0

« 上一篇:企業級Docker Registry —— Harbor搭建和使用
» 下一篇:二進制方式部署Kubernetes 1.6.0集羣(開啓TLS)

posted @ 2017-11-15 09:02 暴走小騷年 閱讀(28160) 評論(6) 編輯 收藏

評論列表

  

#1樓 2018-07-29 10:41 科興科學園首席科學家  

這是我寫的關於自動化部署企業jenkins實戰集成部署視頻教程,可以參考下https://blog.csdn.net/u012201811/article/details/81266370

支持(0)反對(0)

  

#2樓[樓主] 2018-08-02 09:22 暴走小騷年  

@ 科興科學園首席科學家
可以可以

支持(0)反對(0)

  

#3樓 2018-08-17 23:43 農夫山泉有點鹹  

用到了你寫的腳本!感謝

支持(0)反對(0)

  

#4樓[樓主] 2018-08-30 14:56 暴走小騷年  

@ 農夫山泉有點鹹
不客氣,互相學習!

支持(0)反對(0)

  

#5樓 2018-09-12 20:33 憤怒的大鳥2016  

cd ${DOCKERFILE_HOME} ;dockerfile麻煩能給出一下嗎?

支持(0)反對(0)

  

#6樓[樓主] 2018-09-18 15:34 暴走小騷年  

@ 憤怒的大鳥2016
# This dockerfile is for godseye app.
# Version 1.0

# Base images. 
FROM tomcat:8.0.36-alpine

# Author.
MAINTAINER jkzhao <[email protected]>

# Add war.
ADD godseye.war /usr/local/tomcat/webapps/

# Define working directory.
#WORKDIR /usr/local/tomcat/bin/

# Define environment variables.
#ENV PATH /usr/local/tomcat/bin:$PATH

# Define default command. 
CMD ["catalina.sh", "run"]

# Expose ports.
EXPOSE 8080

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章