jenkins+docker+portainer搭建持續集成環境


該demo基於centos7環境

說明:

  •   准備2台以上服務器,該demo准備了master和node兩台服務器192.168.10.17(master) 192.168.10.16(node)
  1.   所有服務器均安裝docke
  2.   jenkins portainer安裝在master節點上
  3.   eureka和zuul網關部署在master節點上
  4.   springboot-service-a/springboot-service-b/springboot-service-c部署在node節點上
  5.   網關作為同一的訪問入口,springboot-service-b通過feign組件調用springboot-service-a的方法
  6.   網關作為同一的訪問入口,springboot-service-b通過feign組件調用springboot-service-a的方法
  1.   spring-eureka-server 注冊中心,端口7001
  2.   springboot-service-a 服務a,端口7005
  3.   spring-cloud-zuul 網關,端口7000
  4.   springboot-service-b 服務b,端口7006,部署shell和springboot-service-a一樣
  5.   springboot-service-c 服務c,端口7007,部署shell和springboot-service-a一樣
  •   原理
  1.   所有springboot jar包構建通過安裝在master節點的jenkins來完成
  2.   jenkins所在節點(master節點)上docker部署直接通過jenkins執行shell來完成docker鏡像構建和運行命令
  3.   通過jenkins Publish over SSH插件將構建好的jar包和Dockerfile發送到node節點上執行鏡像構建和運行命令

  

一、安裝docker

#安裝依賴(docker依賴於系統的一些必要的工具,可以提前安裝)
yum install -y yum-utils device-mapper-persistent-data lvm2
#添加軟件源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安裝docke-ce
yum list docker-ce --showduplicates | sort -r #查看所有docker-ce版本
yum install -ysyst     docker-ce-18.06.3.ce
#啟動服務
systemctl start/stop docker
systemctl enable/disable docker #開機啟動

#配置docker加速鏡像
/etc/docker/daemon.json
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
#使配置生效
systemctl daemon-reload 
systemctl restart docker

二、安裝java環境

  #如果系統中已經安裝了jdk,需要先卸載
  rpm -qa grep | java #查找
  rpm -e --nodeps java-1.6.0xxxxxx #卸載
  java -version

1.在線安裝
yum install -y java       #安裝jre
yum install -y java-devel #原生安裝,包含JDK

2.本地安裝
1.下載linux jdk版本
    "最新版本下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html"
    "歷史版本下載地址:  http://www.oracle.com/technetwork/java/javase/archive-139210.html"
2.上傳解壓
    mkdir -p /user/local/java
    tar zxvf jdk-8u161-linux-x64.tar.gz -C /user/local/java
3.安裝jdk依賴環境glibc,不安裝后期容易出問題
   安裝命令 yum install glibc.i686
"報錯cannot file file /usr/local/jdk1.7.0_79/lib/java......" "注:出現error 一個.so文件not found (未找到)那可能你的Linux版本 glibc版本還未達到2.4" "原因分析:linux 上安裝jdk 1.7版本必須要配合 glibc 核心源碼版本在2.4或以上" 4.配置環境 vim /etc/profile #最后加入 export JAVA_HOME=/usr/local/java/jdk1.8.0_161 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin #加載配置 source /etc/profile 5.如果識別不到java建立軟連接 ln -s /usr/local/jdk1.8.0_121/jdk/bin/java /usr/bin/java

 

三、安裝jenkins

1.添加Jenkins庫到yum庫,Jenkins將從這里下載安裝。
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum install -y jenkins
2.如果不能安裝就到官網下載jenkis的rmp包,官網地址(http://pkg.jenkins-ci.org/redhat-stable/)
wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.7.3-1.1.noarch.rpm
rpm -ivh jenkins-2.7.3-1.1.noarch.rpm

#配置jenkis的端口
vi /etc/sysconfig/jenkins
#啟動jenkins
service jenkins start/stop/restart

#將jenkins用戶加入root組合docker組,以免以后執行時權限不足
gpasswd -a jenkins root
gpasswd -a jenkins docker

systemctl restart jenkins
#安裝成功后Jenkins將作為一個守護進程隨系統啟動 #系統會創建一個“jenkins”用戶來允許這個服務,如果改變服務所有者,同時需要修改/var/log/jenkins, #/var/lib/jenkins, 和/var/cache/jenkins的所有者 #啟動的時候將從/etc/sysconfig/jenkins獲取配置參數 #默認情況下,Jenkins運行在8080端口,在瀏覽器中直接訪問該端進行服務配置 #Jenkins的RPM倉庫配置被加到/etc/yum.repos.d/jenkins.repo #初始密碼在:/var/lib/jenkins/secrets/initialAdminPassword #安裝maven插件 Maven Integration "常見問題1" #如果缺少對應權限將jenkins用戶加入對應用戶組,否者構建時會報權限不足無法執行 gpasswd -a jenkins root #將用戶jenkins加入到root組 gpasswd -a jenkins dockr #將用戶jenkins加入到root組 "常見問題2" #構建maven項目時報找不到java環境,但在終端上java環境是可見的,解決辦法 #1.簡歷軟連接 ln -s /usr/local/jdk1.8.0_121/jdk/bin/java /usr/bin/java #2.在jenkins服務中配置java環境變量 vim /etc/init.d/jenkins #將正確的java路徑填寫到下面,重啟服務 candidates=" /etc/alternatives/java /usr/lib/jvm/java-1.8.0/bin/java /usr/lib/jvm/jre-1.8.0/bin/java /usr/lib/jvm/java-1.7.0/bin/java /usr/lib/jvm/jre-1.7.0/bin/java /usr/lib/jvm/java-11.0/bin/java /usr/lib/jvm/jre-11.0/bin/java /usr/lib/jvm/java-11-openjdk-amd64 /usr/bin/java "  systemctl restart jenkins

#安裝插件

 #手動安裝插件下載地址http://updates.jenkins-ci.org/download/plugins/
 #如果在線找找不到插件,從上面的下載地址 ctrl+f查找的插件下載后通過插件管理中心高級上傳安裝
 1.jenkins安裝maven插件
   系統管理->插件管理->可選插件->Maven Integration plugin
 2.jenkins安裝Publish over SSH
  系統管理->插件管理->可選插件->Publish over SSH

四、安裝maven

wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
tar -zxvf  apache-maven-3.1.1-bin.tar.gz
設置環境變量
vi /etc/profile 
#maven 安裝的路徑
export M2_HOME=/maven/maven
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
#使環境變量生效
source /etc/profile
mvn -version

五、創建springCloud項目部署

  master節點jenkins工程配置

  注冊中心spring-eureka-server配置

  1.源碼管理 Subversion(SVN) svn://gitee.com/zhangsike/springboot-learn/spring-eureka-server

  

 

 

       2.構建觸發器:選擇輪詢 SCM 配置 * * * * * 每分鍾查詢構建

  

 

  3.構建環境:選擇 Add timestamps to the Console Output

 

    4. Pre Steps:POM:pom.xml,參數:clean package -Dmaven.test.skip=true

  

 

 

    5.Post Steps

  

 

 

    命令內容如下:

    prjName=spring-cloud-zuul
    if docker ps -a | grep -i $prjName; then
      docker stop $prjName
      docker rm -v -f $prjName
    fi
    if docker images | grep -i $prjName; then
      docker rmi -f $prjName
    fi
    \cp 'target/'$prjName-'0.0.1-SNAPSHOT.jar' $prjName'-0.0.1-SNAPSHOT.jar'
    docker build -t $prjName .
    docker run -d --expose=7000 -p 7000:7000 --name $prjName $prjName':latest' --server.port=7001

  如果docker中不存在對應容器,這段shell會執行失敗(docker stop會error,后面就無法構建鏡像和創建容器了),所以第一次構建前先手動創建好容器后續執行就正常了,

  也可以用shell判斷下容器如果存在再停止刪除,但暫時不會寫這樣的shell,正在學習中。

  該shell邏輯如下 停止容器-》刪除容器-》刪除鏡像-》將jar包和Dockerfile復制到同一個目錄中-》在jar包目錄中構建鏡像-》創建容器

 

 

 

   jenkins項目創建完成,正常執行完畢后就可以看見容器中已經有運行的實例了

[root@slave2 spring-cloud-zuul]# docker ps -a
CONTAINER ID        IMAGE                         COMMAND                CREATED             STATUS              PORTS                    NAMES
2b43514c10bc        spring-cloud-zuul:latest      "java -jar /app.jar"   4 hours ago         Up 4 hours          0.0.0.0:7000->7000/tcp   spring-cloud-zuul
bffb0834de15 spring-eureka-server:latest   "java -jar /app.jar"   6 hours ago         Up 5 hours          0.0.0.0:7001->7001/tcp   spring-eureka-server
08326db2cbd7        springboot-demo:latest        "java -jar /app.jar"   3 days ago          Up 3 days           0.0.0.0:8081->8080/tcp   springboot-demo
b56abd94c813        portainer/portainer           "/portainer"           6 days ago          Up 3 days           0.0.0.0:9000->9000/tcp   prtainer-test

    spring-cloud-zuul項目創建jenkins工程和spring-eureka-server一致,只需修改源碼和構建shell

    shell改成下面即可

    prjName=spring-cloud-zuul
    if docker ps -a | grep -i $prjName; then
      docker stop $prjName
      docker rm -v -f $prjName
    fi
    if docker images | grep -i $prjName; then
      docker rmi -f $prjName
    fi
    \cp 'target/'$prjName-'0.0.1-SNAPSHOT.jar' $prjName'-0.0.1-SNAPSHOT.jar'
    docker build -t $prjName .
    docker run -d --expose=7000 -p 7000:7000 --name $prjName $prjName':latest' --server.port=7000

    

  node節點jenkins工程配置

    除了Post steps不一致之外,其余配置均一致

    執行邏輯:通過Publish over SSH插件 將構建好的springboot jar包和Dockerfile發送到遠程主機構建鏡像並啟動

    

注意:由於運行在docker中的項目ip是容器ip,外網無法訪問,所以在配置eureka客戶端時要以主機ip注冊,否則注冊中心無法提供識別

  yml文件如下

eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://admin:admin@192.168.10.17:7001/eureka/
  instance:
    prefer-ip-address: true
    ip-address: 192.168.10.16
    instance-id: 192.168.10.16:${server.port}

  最終注冊中心效果


免責聲明!

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



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