一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

2021-05-21 17:17富士康質檢員張全蛋 服務器知識

這篇文章主要介紹了Docker Gitlab+Jenkins+Harbor構建持久化平臺操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

ci/cd概述

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

ci工作流程設計

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

git 代碼版本管理系統 只能命令行去管理git

gitlab 基于git做了圖形管理頁面,企業使用gitlab做私有的代碼管理倉庫

github 公共代碼管理倉庫

搭建gitlab

搭建gitlab先創建工作目錄,因為有些數據需要持久化

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@www ~]# mkdir -p /gitlab
[root@www ~]# cd /gitlab/
 
docker run -d \
 --name gitlab \
 -p 8443:443 \
 -p 9999:80 \
 -p 9998:22 \
 -v /gitlab/config:/etc/gitlab \
 -v /gitlab/logs:/var/log/gitlab \
 -v /gitlab/data:/var/opt/gitlab \
 -v /etc/localtime:/etc/localtime \
 --restart=always \
 lizhenliang/gitlab-ce-zh:latest

9999是web端口 8443web htpps端口 9998 ssh端口

將容器化的數據持久化到本地宿主機,這個鏡像是早期漢化后構建的,默認官方的鏡像是英文的,這個是英文的,這個鏡像比較大差不多1g,包括數據庫和消息隊列,里面封裝的內容很多。

?
1
2
3
[root@www gitlab]# docker logs 3396d5ccc518
  - execute /opt/gitlab/bin/gitlab-ctl start postgresql
+psql_host='/var/opt/gitlab/postgresql'

通過日志可以查看到有哪些組件如postgresql

初次訪問的時候可能有點慢,因為組件較多,可能要等待3-5分鐘

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

出現這個頁面說明gitlab服務是啟動起來了,可能里面其他組件還沒啟動成功。這里最好給到物理內存4g,如果只有2g是不能正常啟動的,差不多八分鐘之后如下所示

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

用戶名默認是root這里需要設置新密碼,新密碼最少8位可以設置為qwerasdf,然后更新完密碼就可以使用root用戶名 密碼qwerasdf去登入

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

創建一個私有項目java-demo

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

推送代碼到java-demo倉庫

在另外一臺機器上安裝git,將項目的源碼包上傳

[root@localhost ~]# yum install git -y

[root@localhost ~]# unzip tomcat-java-demo-master.zip

初始化git目錄

?
1
2
3
[root@localhost ~]# cd tomcat-java-demo-master
[root@localhost tomcat-java-demo-master]# git init
initialized empty git repository in /root/tomcat-java-demo-master/.git/

這個git目錄就會配置git相關的一些數據,初始化完成以后

?
1
2
3
[root@localhost tomcat-java-demo-master]# cd .git/
[root@localhost .git]# ls
branches config description head hooks info objects refs

配置git的配置文件

這條命令是將gitlab的地址寫到.git/config配置文件當中

?
1
2
3
4
5
6
7
8
9
10
11
[root@localhost tomcat-java-demo-master]# git remote add origin http://192.168.179.100:9999/root/java-demo.git
 
[root@localhost tomcat-java-demo-master]# cat .git/config  可以看到gitlab地址寫進去了,待會去提交代碼都會去讀取該配置文件
[core]
 repositoryformatversion = 0
 filemode = true
 bare = false
 logallrefupdates = true
[remote "origin"]
 url = http://192.168.179.100:9999/root/java-demo.git
 fetch = +refs/heads/*:refs/remotes/origin/*

這個.代表所有,將當前代碼目錄提交到暫存區

?
1
2
3
[root@localhost tomcat-java-demo-master]# git add .
[root@localhost tomcat-java-demo-master]# ls
db dockerfile license pom.xml readme.md src

提交到當前git倉庫里面,因為本身其就是一個git倉庫了(本地也是一個git倉庫)

[root@localhost tomcat-java-demo-master]# git commit -m 'all'

推送到遠程倉庫,這個就會讀取之前的配置文件了

?
1
2
3
4
5
6
7
8
9
10
[root@localhost tomcat-java-demo-master]# git push origin master
username for 'http://192.168.179.100:9999': root
password for 'http://[email protected]:9999':
counting objects: 179, done.
compressing objects: 100% (166/166), done.
writing objects: 100% (179/179), 1.12 mib | 0 bytes/s, done.
total 179 (delta 4), reused 0 (delta 0)
remote: resolving deltas: 100% (4/4), done.
to http://192.168.179.100:9999/root/java-demo.git
 * [new branch]   master -> master

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

部署jenkins

?
1
2
3
4
5
[root@localhost jenkins]# ls
apache-maven-3.5.0-bin.tar.gz jdk-8u45-linux-x64.tar.gz
[root@localhost jenkins]# tar xf apache-maven-3.5.0-bin.tar.gz;tar xf jdk-8u45-linux-x64.tar.gz
[root@localhost jenkins]# mv jdk1.8.0_45 /usr/local/jdk
[root@localhost jenkins]# mv apache-maven-3.5.0 /usr/local/maven

這兩個工具包的作用是讓jenkins去用,jenkins是用容器部署的,所以宿主機上面的兩個環境就可以掛載進去。要將maven jdk掛載進去。

因為要在jenkins里面去做鏡像的構建,要使用docker build,所以這里有docker in docker,即在jenkins里面再構建docker,這里不需要研究如何在容器里面再安裝docker。可以直接將宿主機的命令和socket直接掛載進去就可以直接在容器里面使用docker命令。

-v是將jenkins的數據持久化到目錄下,jenkins官方將jenkins產生的數據文件都放在

/var/jenkins_home

目錄下面,所以只需要將這個目錄進行持久化就行,即使jenkins容器被刪除了,那么數據還是可以恢復過來。

使用的鏡像就是最新版,長期維護的鏡像

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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/jdk:/usr/local/jdk \
  -v /etc/localtime:/etc/localtime \
  --restart=always \
  --name jenkins jenkins/jenkins
 
[root@localhost jenkins]# docker ps
container id    image        command         created       status       ports                      names
566d2ec85fe0    jenkins/jenkins   "/sbin/tini -- /usr/…"  3 minutes ago    up 3 minutes    0.0.0.0:50000->50000/tcp, 0.0.0.0:80->8080/tcp  jenkins

5000端口是master slave端口

[root@localhost jenkins]# docker logs 566d2ec85fe0 查看日志

點擊選擇插件安裝,這里選擇無不安裝插件,先安裝jenkins以后插件需要什么就安裝什么

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

jenkins pipeline概念

• jenkins pipeline是一套插件,支持在jenkins中實現集成和持續交付管道;

• pipeline通過特定語法對簡單到復雜的傳輸管道進行建模;

• 聲明式:遵循與groovy相同語法。pipeline { }

• 腳本式:支持groovy大部分功能,也是非常表達和靈活的工具。node { }

• jenkins pipeline的定義被寫入一個文本文件,稱為jenkinsfile

先要安裝pipeline插件然后寫文本,對pipeline去建模,現在主要使用聲明式語法,文本文件長什么樣

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

在這個文件當中告訴jenkins要做什么事情,在一個大的stage里面分為了很多小的stage,通過這種流水線的形式分好了這幾個階段,在這幾個stage組成了pipeline的流水線。按照從上到下的順序執行,直到執行完成。

pipeline寫法大致是下面這些流程

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

pipeline實現之后有一個案板

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

這個案板根據pipeline的每個步驟會輸出每個步驟案板。如消耗了多長時間和日志。這樣容易定位問題方便查看。

jenkins pipeline插件的安裝和pipeline使用

在安裝插件的時候會很慢,如何提速?jenkins下載插件的時候是有一些源的,可以修改位國內的源,在插件高級里面修改其實是沒有用的

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost jenkins]# cd /opt/jenkins_home/
[root@localhost jenkins_home]# ls
config.xml                   nodemonitors.xml
copy_reference_file.log             nodes
hudson.model.updatecenter.xml          plugins
identity.key.enc                secret.key
jenkins.install.installutil.lastexecversion   secret.key.not-so-secret
jenkins.install.upgradewizard.state       secrets
jenkins.model.jenkinslocationconfiguration.xml updates
jenkins.telemetry.correlator.xml        usercontent
jobs                      users
logs                      war
[root@localhost jenkins_home]# cd updates/
[root@localhost updates]# pwd
/opt/jenkins_home/updates
 
[root@localhost updates]# ls

default.json 這里其實寫了插件的源 hudson.tasks.maven.maveninstaller 使用sed進行修改

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && \

sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

修改為清華源,然后重啟生效

[root@localhost updates]# docker restart jenkins

jenkins

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

把git和pipeline都安裝上,有個別安裝失敗可以,只要核心主鍵安裝好就行

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

替換插件源之后安裝插件明顯變快了,可以看到新建項目多了流水線的選擇,這里選擇流水線構建

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pipeline {
  agent any
 
  stages {
    stage('1.拉取拉取代碼') {
      steps {
        echo '拉取代碼'
      }
    }
        stage('2.代碼代碼代碼編譯') {
      steps {
        echo '編譯'
      }
    }
        stage('3.代碼部署') {
      steps {
        echo '部署'
      }
    }
  }
}

可以看到看板

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

這里是控制臺輸出,也可以指定從某個階段運行構建

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

下面使用pipeline來完成流程設計

從git拉取代碼,構建鏡像。推送到harbor再部署到docker當中。這個腳本可以復用

?
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env groovy
 
def registry = "reg.harbor.com"
def project = "welcome"
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${branch}-${build_number}"
def git_address = "http://192.168.179.100:9999/root/java-demo.git"
def docker_registry_auth = "c91491d9-91cd-4248-96c8-fc8cc00f7db4"
def git_auth = "86ebc99d-d3fc-4e6e-b938-db1f5a1f3642"
 
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 lizhenliang
          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}
       """
      }
    }
  }
}

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

可以看到這里要你輸入分支

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

參數化構建,變量的名稱可以在shell腳本或者pipeline當中去引用

?
1
2
3
steps {
  echo '${branch}'
}

創建harbor的憑據,即使用jenkin要訪問docker harbor倉庫需要知道用戶名和密碼

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

可以看到這里多了一個憑據 c91491d9-91cd-4248-96c8-fc8cc00f7db4,pipeline腳本當中就定義了憑據def docker_registry_auth = "c91491d9-91cd-4248-96c8-fc8cc00f7db4" 這是jenkins的憑據

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

還需要插件git憑據 86ebc99d-d3fc-4e6e-b938-db1f5a1f3642 在pipeline里面定義def git_auth = "86ebc99d-d3fc-4e6e-b938-db1f5a1f3642"

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

pipeline有些語句可以自動生成,比如生成拉從取代碼

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

知道pipeline大概的框架 套進去就行

checkout([$class: 'gitscm', branches: [[name: '*/master']], dogeneratesubmoduleconfigurations: false, extensions: [], submodulecfg: [], userremoteconfigs: [[credentialsid: '86ebc99d-d3fc-4e6e-b938-db1f5a1f3642', url: 'http://192.168.179.100:9999/root/java-demo.git']]])

拉取編譯好之后的war包放到環境鏡像里面

現在配置maven的源

downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-war-plugin/3.1.0/maven-war-plugin-3.1.0.jar (91 kb at 5.3 kb/s)

downloading: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-web/2.0.1.release/spring-boot-starter-web-2.0.1.release.pom

在后臺輸出可以看到這些東西,在編譯構建的時候maven的源是默認的網絡比較慢,現在要修改源確保拉取速度快一些宿主機上修改,這里面定義了從那個源拉取相應的依賴包

?
1
2
3
4
5
6
7
[root@localhost ~]# vim /usr/local/maven/conf/settings.xml
  <mirror>
   <id>central</id>
   <mirrorof>central</mirrorof>
   <name>aliyun maven</name>
   <url>https://maven.aliyun.com/repository/public</url>
  </mirror>

修改完之后不需要重啟容器直重新構建,可以看到構建出來的包

[root@localhost ~]# ls /opt/jenkins_home/workspace/test-pipeline/target/ classes generated-sources ly-simple-tomcat-0.0.1-snapshot ly-simple-tomcat-0.0.1-snapshot.war maven-archiver maven-status

job存放的是數據源信息

[root@localhost ~]# ls /opt/jenkins_home/jobs/

test test-pipeline

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

如果需要在其他dcker主機上部署可以使用ssh插件的ssh命令或者使用ansible別的機器上啟動執行docker命令創建容器

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

題外話

Docker Gitlab+Jenkins+Harbor構建持久化平臺操作

提供了如果你的harbor提供了https認證,那么請在你的jenkins這臺主機將證書拷貝到相應的目錄下面。確保jenkins主機能夠登入進docker harbor倉庫

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# mkdir -p /etc/docker/certs.d/reg.harbor.com
[root@localhost ~]# ls
anaconda-ks.cfg  reg.harbor.com.pem
 
[root@localhost ~]# cp reg.harbor.com.pem /etc/docker/certs.d/reg.harbor.com/reg.harbor.com.crt
 
[root@localhost ~]# cat /etc/hosts
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.179.102 reg.harbor.com
 
[root@localhost ~]# docker login reg.harbor.com
authenticating with existing credentials...
warning! your password will be stored unencrypted in /root/.docker/config.json.
configure a credential helper to remove this warning. see
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 
login succeeded

以上這篇docker gitlab+jenkins+harbor構建持久化平臺操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_34556414/article/details/109716291

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品国产一区二区三区国产馆 | 精品国产视频 | 国产自精品 | 日本激情网站 | 2022最新国产在线不卡a | 99九九成人免费视频精品 | 国产清纯91天堂在线观看 | 三极片在线观看 | 亚洲国产第一区二区三区 | 人人澡人 | 日本sss在线高清观看 | chinese456老人gay| 关晓彤一级做a爰片性色毛片 | 四虎影在线永久免费观看 | 韩国日本在线观看 | 免费观看一级特黄三大片视频 | 女人是男人的未来1分49分 | 色妞女女女女女bbbb | 成人区精品一区二区毛片不卡 | 国产亚洲人成网站在线观看不卡 | 亚洲国产精品免费在线观看 | xxxxx性中国hd | 久久偷拍国2017的 | 四虎精品免费视频 | 国产精品第页 | 十大网站免费货源 | 精品无人区麻豆乱码无限制 | 亚洲视频在线免费 | 羞羞答答免费人成黄页在线观看国产 | 久久免费资源福利资源站 | 午夜国产精品视频 | 欧美一级片免费看 | 国产成人精选免费视频 | 天美传媒在线视频 | china外卖员gay帮口 | 护士被多人调教到失禁h | 亚洲同性男男gay1069 | 农村脱精光一级 | 午夜欧美精品 | 国产专区一va亚洲v天堂 | 日本中文字幕在线视频 |