基於docker構建cicd平台


務器規划:

 

角色

ip

loadbalance-master,gitlab

192.168.31.61

loadbalance-master,jenkins

192.168.31.62

harbor

192.168.31.70

image.png

配置aliyun鏡像倉庫

用來保存一些學習鏡像

阿里雲鏡像倉庫控制台:https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

 

1. 登錄阿里雲Docker Registry

$ sudo docker login --username=benjamin7788 registry.cn-hangzhou.aliyuncs.com

用於登錄的用戶名為阿里雲賬號全名,密碼為開通服務時設置的密碼。

您可以在訪問憑證頁面修改憑證密碼。

2. 從Registry中拉取鏡像

sudo docker pull registry.cn-hangzhou.aliyuncs.com/benjamin-learn/[鏡像名稱]:[鏡像版本號]

3. 將鏡像推送到Registry

sudo docker login --username=benjamin7788 registry.cn-hangzhou.aliyuncs.com sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/benjamin-learn/[鏡像名稱]:[鏡像版本號] sudo docker push registry.cn-hangzhou.aliyuncs.com/benjamin-learn/[鏡像名稱]:[鏡像版本號]

實例:

 

上傳 [root@loadbalancer1 ~]# sudo docker login --username=benjamin7788 registry.cn-hangzhou.aliyuncs.com [root@loadbalancer1 ~]# sudo docker tag 18da462b5ff5 registry.cn-hangzhou.aliyuncs.com/benjamin-learn/gitlab-ce-zh:latest [root@loadbalancer1 ~]# docker push registry.cn-hangzhou.aliyuncs.com/benjamin-learn/gitlab-ce-zh:latest 下載 [root@loadbalancer2 ~]# sudo docker pull registry.cn-hangzhou.aliyuncs.com/benjamin-learn/gitlab-ce-zh:latest

 

image.png

 

harbor安裝

harbor官方地址:https://github.com/goharbor/harbor

點擊relase選擇要下載的版本

這邊用離線包安裝:

image.png

包有點大 600MB 建議上github 下載

 

安裝docker

略。。。。

安裝docker-compose

由於FQ不便,這邊直接保存了 docker-compose的二進制包

📎docker-compose-Linux-x86_64.zip

unzip docker-compose-Linux-x86_64.zip mv docker-compose-Linux-x86_64 /usr/bin/docker-compose

部署harbor

根據下載好的harbor離線包部署harbor

 

tar zxvf harbor-offline-installer-v1.9.1.tgz cd harbor sed -i s/reg.mydomain.com/192.168.31.70/g harbor.yml ./prepare ./install.sh

image.png

默認端口 80訪問   瀏覽器192.168.31.70 訪問harbor控制台

默認登錄口令  admin/Harbor12345

image.png

登錄會有個默認library項目

image.png

上傳已經構建的鏡像

image.png

在上傳之前需要注意docker默認不支持http的請求方式

除非。。。。。

手動添加ip地址的信任,這樣就可以使用http方式操作私有registry

image.png

[root@harbor harbor]# docker login 192.168.31.70 --username=admin --password=Harbor12345 [root@harbor harbor]# docker tag php:v1 192.168.31.70/library/php:v1 [root@harbor harbor]# docker tag nginx:v1 192.168.31.70/library/nginx:v1 [root@harbor harbor]# docker tag tomcat:v1 192.168.31.70/library/tomcat:v1 [root@harbor harbor]# docker push 192.168.31.70/library/php:v1 [root@harbor harbor]# docker push 192.168.31.70/library/nginx:v1 [root@harbor harbor]# docker push 192.168.31.70/library/tomcat:v1

image.png

如何pull私有倉庫鏡像

docker login 192.168.31.70 --username=admin --password=Harbor12345 docker pull 192.168.31.70/library/nginx:v1

 

docker部署gitlab

部署gitlab

docker run -d \ --name gitlab \ -p 8443:443 \ -p 9999:80 \ -p 9998:22 \ -v $PWD/gitlab/config:/etc/gitlab \ -v $PWD/gitlab/logs:/var/log/gitlab \ -v $PWD/gitlab/data:/var/opt/gitlab \ -v /etc/localtime:/etc/localtime \ registry.cn-hangzhou.aliyuncs.com/benjamin-learn/gitlab-ce-zh:latest

image.png

 

通過 192.168.31.61:9999   訪問gitlab

登錄后會提示修改密碼   默認用戶是 root

創建項目,命名為java-demo  其他默認(類型為私有)即可

image.png

提交java-demo的代碼

📎tomcat-java-demo-master.zip

 

yum install git -y git clone http://192.168.31.61:9999/root/java-demo.git unzip tomcat-java-demo-master.zip cd tomcat-java-demo-master mv * ../java-demo/ && cd ../java-demo git add . git config --global user.email "you@example.com" git config --global user.name "Your Name" git commit -m 'all' git push origin master

image.png

docker部署jenkins

📎apache-maven-3.5.0-bin.tar.gz

image.png jdk 官網下載即可。。。包太大 165MB

准備JDK和Maven環境

tar zxvf jdk-8u45-linux-x64.tar.gz mv jdk1.8.0_45 /usr/local/jdk tar zxf apache-maven-3.5.0-bin.tar.gz mv apache-maven-3.5.0 /usr/local/maven  # 部署jenkins docker run -d --name jenkins -p 80:8080 -p 50000:50000 -u root \  -v /opt/jenkins_home:/var/jenkins_home \  -v /var/run/docker.sock:/var/run/docker.sock \  -v /usr/bin/docker:/usr/bin/docker \  -v /usr/local/maven:/usr/local/maven \  -v /usr/local/maven/bin/mvn:/usr/bin/mvn \  -v /usr/local/jdk:/usr/local/jdk \  -v /etc/localtime:/etc/localtime \  --name jenkins registry.cn-hangzhou.aliyuncs.com/benjamin-learn/jenkins:lts

image.png

獲取密碼

根據volume 映射規則  -v /opt/jenkins_home:/var/jenkins_home

 

[root@loadbalancer2 opt]# cat /opt/jenkins_home/secrets/initialAdminPassword 0b23bee2709049cc886f928b81f5b3b7

進入后跳過插件安裝

image.png

所有插件都不要勾選,然后點擊安裝

image.png

創建一個管理員

admin,保存 來到開始頁面

image.png

替換jenkins的插件源

由於默認jenkins的源是國外的下載速度較慢,換成國內的源

 

 cd /opt/jenkins_home/updates/  sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.g oogle.com/https:\/\/www.baidu.com/g' default.json

重啟jenkins容器

image.png

有選擇性的安裝插件

 

manage jenkins---》manage plugin

image.png

點擊available 插件 ,分別搜索git  pipline兩個插件

image.png

image.png

image.png

創建job

image.png

選擇流水線

image.png

pipeline腳本

這個腳本完成 工作

  • 從 gitlab 拉取代碼
  • 使用maven 構建war包
  • 構建鏡像
  • 部署docker
#!/usr/bin/env groovy  def registry = "192.168.31.70" def project = "welcome" def app_name = "demo" def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}" def git_address = "http://192.168.31.61:9999/root/java-demo.git" def docker_registry_auth = "4add8c05-bfdb-48bd-8b74-6b9a2c4b6af6" def git_auth = "7c36059c-cb02-461f-999d-32c713962413"  pipeline {  agent any  stages {  stage('拉取代碼'){  steps {  checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])  }  }   stage('代碼編譯'){  steps {  sh """  JAVA_HOME=/usr/local/jdk  PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH  mvn clean package -Dmaven.test.skip=true  """  }  }   stage('構建鏡像'){  steps {  withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {  sh """  echo '  FROM ${registry}/library/tomcat:v1  LABEL maitainer benjamin  RUN rm -rf /usr/local/tomcat/webapps/*  ADD target/*.war /usr/local/tomcat/webapps/ROOT.war  ' > Dockerfile  docker build -t ${image_name} .  docker login -u ${username} -p '${password}' ${registry}  docker push ${image_name}  """  }  }  }   stage('部署到Docker'){  steps {  sh """  docker rm -f tomcat-java-demo |true  docker container run -d --name tomcat-java-demo -p 88:8080 ${image_name}  """  }  }  } }

harbor添加welcome項目

image.png

由於腳本內定義的 project 在harbor 不存在所以需要提前創建,否則構建鏡像push到倉庫時會失敗

image.png

添加參數化構建

image.png

上圖  registry project app_name 都已經定義 而Branch變量需要手動定義  BUILD_NUMBER由jenkins自身維護,構建一次代碼自增一次

image.png

生成憑據

添加憑據

image.png

harbor憑據

image.png

更新生成harbor的 憑證 id

image.png

image.png

同上生成gitlab的憑證

image.png

替換maven源為aliyun的源

 

 cat /usr/local/maven/conf/settings.xml  <?xml version="1.0" encoding="UTF-8"?>  <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  <pluginGroups>   </pluginGroups>   <proxies>   </proxies>   <servers>   </servers>   <mirrors>  <mirror>  <id>central</id>  <mirrorOf>central</mirrorOf>  <name>aliyun maven</name>  <url>https://maven.aliyun.com/repository/public</url>  </mirror>  </mirrors>  <profiles>  </profiles> </settings> 

 

任務構建

image.png

選擇默認的master分支

image.png

查看日志輸出

查看整體控制台日志

image.png

image.png

根據代碼編輯的logs   發現已經使用了 配置的aliyun maven源

image.png

 

部署結束驗證

全部顯示綠色 表示 構建結束

image.png

 

鏡像已經推送到harbor

image.png

容器成功部署到 jenkins所在節點

image.png

 

瀏覽器訪問  192.168.31.62:88 

image.png

 
 


免責聲明!

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



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