持續集成與持續交付(git工具+gitlab私有倉庫+jenkins持續集成)+配置企業級鏡像倉庫harbor

1.git工具使用

實驗環境:
server1:172.25.0.1(4G內存)

1.1 git介紹

Git特點:
• 速度
• 簡單的設計
• 對非線性開發模式的強力支持(允許成千上萬個並行開發的分支)
• 完全分佈式
• 有能力高效管理類似 Linux 內核一樣的超大規模項目(速度和數據量)
• 自誕生於 2005 年以來,Git 日臻成熟完善,在高度易用的同時,仍然保留着初期設定的 目標。 它的速度飛快,極其適合管理大項目,有着令人難以置信的非線性分支管理系統。
• Git必看祕籍:https://git-scm.com/book/zh/v2

Git 有三種狀態:已提交(committed)、已修改(modified) 和 已暫存(staged)。
• 已修改表示修改了文件,但還沒保存到數據庫中。
• 已暫存表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。
• 已提交表示數據已經安全地保存在本地數據庫中。
• 這會讓我們的 Git 項目擁有三個階段:工作區、暫存區以及 Git 目錄。
在這裏插入圖片描述


1.2 git版本控制系統介紹

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


1.3 git安裝

安裝git:yum install -y git
初始化版本庫:
mkdir demo
git init
ls .git/ .git目錄是git跟蹤管理版本庫的

在這裏插入圖片描述
在這裏插入圖片描述

獲取Git 倉庫通常有兩種方式:
• 將尚未進行版本控制的本地目錄轉換爲 Git 倉庫。
• 從其它服務器克隆 一個已存在的 Git 倉庫。比如:git clone


1.4 gif的使用命令

用戶信息
git config --global user.name "red"
git config --global user.email [email protected]

檢查當前文件狀態
git status
git status -s //簡化輸出

新添加的未跟蹤文件前面有 ?? 標記,新添加到暫存區中的文件前面有 A 標記,修改過的文件前面有 M 標記。輸出中有兩欄,左欄指明瞭暫存區的狀態,右欄指明瞭工作區的狀態。

跟蹤新文件
git add README

忽略文件
一般我們總會有些文件無需納入 Git 的管理,也不希望它們總出現在未跟蹤文件列表。
通常都是些自動生成的文件,比如日誌文件,或者編譯過程中創建的臨時文件等。
在這種情況下,我們可以創建一個名爲 .gitignore 的文件,列出要忽略的文件的模式。

cat .gitignore

.*  ##忽略所有隱藏文件 
/test ##只忽略當前目錄下的test文件
 build/ ##忽略任何目錄下名爲 build 的文件夾 

文件 .gitignore 的格式規範如下:
所有空行或者以 # 開頭的行都會被 Git 忽略。
可以使用標準的 glob 模式匹配,它會遞歸地應用在整個工作區中。
匹配模式可以以(/)開頭防止遞歸。
匹配模式可以以(/)結尾指定目錄。
要忽略指定模式以外的文件或目錄,可以在模式前加上歎號(!)取反。
所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式。
星號(*)匹配零個或多個任意字符;[abc] 匹配任何一個列在方括號中的字符

查看已暫存和未暫存的修改
git diff

提交更新
git commit
此命令比較的是工作目錄中當前文件和暫存區域快照之間的差異。也就是修改之後還沒有暫存起來的變化內容。

跳過使用暫存區域
git commit -a -m 'added new benchmarks'

移除文件
要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除(確切地說,是從暫存區域移除),然後提交。可以用 git rm 命令完成此項工作,並連帶從工作目錄中刪除指定的文件,這樣以後就不會出現在未跟蹤文件清單中了。
git rm PROJECTS.md
git rm --cached README

重命名文件
git mv README.md README其實,運行 git mv 就相當於運行了下面三條命令:
mv README.md README
git rm README.md
git add README

查看提交歷史
git log
git log -p -2
git log --stat
git log --pretty=oneline
git reflog

取消暫存的文件
git reset HEAD README.md

撤消對文件的修改
git checkout -- README.md

版本回退
git reflog
git reset --hard efa267a

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


1.5 遠程倉庫的使用

遠程倉庫:註冊github帳號,並新建一個倉庫:
在這裏插入圖片描述
在這裏插入圖片描述
使用https方式推送每次需要輸入用戶名和密碼,如果不想麻煩的話採用ssh方式:
ssh-keygen -t rsa -b 4096 -C "[email protected]生成本地密鑰,並上傳公鑰到github:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
推送本地倉庫內容到github:
cd demo需要進入工作目錄
git remote add origin https://github.com/aimee-red/demo.git

關聯遠程倉庫
git push -u origin master //第一次推送需要加 -u參數

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
**

2.gitlab代碼倉庫

2.1 GitLab的安裝

官網:https://about.gitlab.com/install

軟件下載(官方下載慢,推薦使用國內鏡像站點) :https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

軟件安裝: (官方推薦至少4G內存)
yum install -y curl policycoreutils-python openssh-server 解決依賴性
yum install -y gitlab-ce-12.8.5-ce.0.el7.x86_64.rpm 安裝gitlab
vim /etc/gitlab/gitlab.rb

external_url 'http://172.25.0.1' //訪問gitlab的地址

gitlab-ctl reconfigure 重載服務
登錄gitlab: http://172.25.0.1 注意:用戶:root 第一次登錄需要強制修改密碼

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


2. gitlab常用命令:

gitlab-ctl start # 啓動所有gitlab 組件
gitlab-ctl stop # 停止所有 gitlab 組件
gitlab-ctl restart # 重啓所有 gitlab 組件
gitlab-ctl status # 查看服務狀態
gitlab-ctl reconfigure重載服務
gitlab-ctl tail # 查看日誌


2.3 GitLab的使用

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

上傳文件到私有倉庫:
rm -fr demo刪除原有文件
git clone [email protected]:root/demo.git遠程登錄私有倉庫
cd demo/
git remote -v查看遠程登錄倉庫信息
vim index.html
git add index.html
git commit -m "add index.html"
git push -u origin master上傳

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.jenkins持續集成

實驗環境:
server2:172.25.0.2(2G內存)

3.1 Jenkins的介紹

1.Jenkins是開源CI&CD軟件領導者, 提供超過1000個插件來支持構建、部署、 自動化, 滿足任何項目的需要。

2.Jenkins用Java語言編寫,可在Tomcat等流行的servlet容器中運行,也可獨立運行。

3.CI(Continuous integration持續集成)持續集成強調開發人員提交了新代碼之後, 立刻進行構建、(單元)測試。
在這裏插入圖片描述
4.CD(Continuous Delivery持續交付) 是在持續集成的基礎上,將集成後的代碼部 署到更貼近真實運行環境(類生產環境)中。
在這裏插入圖片描述


3.2 Jenkins的安裝

軟件下載:https://jenkins.io/zh/download
國內鏡像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat
安裝jenkins:
rpm -ivh jdk-8u171-linux-x64.rpm
rpm -ivh jenkins-2.225-1.1.noarch.rpm
systemctl start jenkins

在這裏插入圖片描述
在這裏插入圖片描述
訪問: http://172.25.0.12:8080
使用初始密碼登錄:cat /var/lib/jenkins/secrets/initialAdminPassword安裝默認插件即可,使用admin用戶,登錄後修改密碼。

在這裏插入圖片描述
在這裏插入圖片描述
更新插件源:
vim /var/lib/jenkins/hudson.model.UpdateCenter.xml

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>

cd /var/lib/jenkins/update
sed -i.bak 's/http:\/\/updates.jenkinsci.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
systemctl restart jenkins重啓後下載纔會變快

在這裏插入圖片描述
在這裏插入圖片描述

3.3 Jenkins的使用

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
添加訪問git倉庫的私鑰 在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
定義輪詢間隔,有更新時觸發jinkens構建
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
Git提交代碼到gitlab,jinkens輪詢檢測到代碼倉庫的變更,觸發構建。在這裏插入圖片描述
在這裏插入圖片描述


3.4 Jenkins自動構建docker鏡像

在Jenkins主機中安裝docker
yum install -y containerd.io-1.2.5-3.1.el7.x86_64.rpm docker-ce-18.09.6-3.el7.x86_64.rpm container-selinux-2.21-1.el7.noarch.rpm docker-ce-cli-18.09.6-3.el7.x86_64.rpm
vim /etc/sysctl.d/bridge.conf

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

sysctl --system
systemctl start docker
docker load -i nginx.tar

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
修改docker.sock權限,不然jenkins無法直接執行docker命令在這裏插入圖片描述
在gitlab主機編寫dockerfile
cd demo/
vim Dockerfile

FROM nginx
COPY index.html /usr/share/nginx/html

git add Dockerfile
git commit -m "add Dockerfile"
git push -u origin master

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


在Jenkins中設置
刪除之前的構建
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
代碼提交,鏡像構建等一系列動作都自動完成


3.5 gitlab自動觸發jenkins(添加gitlab插件)

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

手動觸發
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
配置實時觸發
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.6 Jenkins使用tls方式連接docker構建主機

使用環境:
增加主機server3:172.25.0.3

server3安裝docker,作爲docker主機被遠程構建
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
Jenkins使用tls方式連接docker構建主機
1.生成key和ca證書
cd /etc/docker
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
2.生成server-key和csr文件(server3爲dcker主機名)
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=server3" -sha256 -new -key server-key.pem -out server.csr

在這裏插入圖片描述

3.可以使用ip地址方式進行tls連接
echo subjectAltName = DNS:server3,IP:172.25.0.13,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
在這裏插入圖片描述
在這裏插入圖片描述

4.安裝docker證書:
cp /usr/lib/systemd/system/docker.service /etc/systemd/system/docker.service
vim /etc/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H fd:// -containerd=/run/containerd/containerd.sock --tlsverify 
--tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2375 

systemctl daemon-reload
systemctl restart docker
netstat -antlp |grep :2375

在這裏插入圖片描述
在這裏插入圖片描述
5.生成客戶端key和證書
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
測試
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


6.添加ssh插件,配置server4使工作交付到server4
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


完整測試
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
git—>gitLab(server1)—>jenkins(server2)—>build host(server3)—>harbor—>deliver(server4)


3.7 Jenkins+ansible

實驗環境:
server4作爲ansible交付
server5:172.25.0.5作爲
在這裏插入圖片描述
添加ansible交付任務:
• Jenkins服務器提前部署好到目標主機的ssh免密,並安裝ansible軟件包。
• 由於是以jenkins用戶調用ansible命令,所以需要設置jenkins用戶到目標主機的免密。
• 新建playbook代碼倉庫

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

vim playbook/ansible.cfg

[defaults] 
command_warnings = False 
remote_user = ansible

[privilege_escalation] 
become = True 
become_method = sudo 
become_user = root 
become_ask_pass = False

在這裏插入圖片描述
mkdir inventory
cd inventory/
vim test

[test]
172.25.0.4

vim proc

[proc]
172.25.0.5

在這裏插入圖片描述
vim playbook.yml

---
- hosts: all
  tasks:
    - name: install apache
      yum:
        name: httpd
        state: present
        
    - name: start apache
      service: 
        name: httpd
        state: started

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


4.配置企業級鏡像倉庫harbor

實驗環境:
harbor:172.25.0.10
官方下載:https://github.com/goharbor/harbor/releases

4.1 安裝配置harbor

安裝docker
·yum install -y containerd.io-1.2.5-3.1.el7.x86_64.rpm container-selinux-2.21-1.el7.noarch.rpm docker-ce-18.09.6-3.el7.x86_64.rpm docker-ce-cli-18.09.6-3.el7.x86_64.rpm安裝docker
vim /etc/sysctl.d/bridge.conf

net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

systemctl enable docker --now啓動docker

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
安裝harbor
cp docker-compose-Linux-x86_64-1.24.1 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
mkdir -p /data/certs
cd /data/certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout red.org.key -x509 -days 365 -out red.org.crt Generating a 4096 bit RSA private key生成https加密證書

..++
..................................................++
writing new private key to 'red.org.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn  
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:red
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:reg.red.org
Email Address []:[email protected]

tar zxf harbor-offline-installer-v1.10.1.tgz解壓包
cd harbor/
vim harbor.yml配置harbor

hostname: reg.red.org

https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/certs/red.org.crt ##設置證書位置
  private_key: /data/certs/red.org.key

harbor_admin_password: redhat ##設置密碼

vim /etc/hosts做地址解析

172.25.0.10  localhost reg.red.com

./install.sh安裝harbor

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


4.2 配置本地上傳文件

mkdir -p /etc/docker/certs.d/reg.red.org
cp /data/certs/red.org.crt /etc/docker/certs.d/reg.red.org/ca.crt拷貝證書到docker主機
docker load -i nginx.tar
docker tag nginx:latest reg.red.org/library/nginx:latest
docker login localhost
docker push reg.red.org/library/nginx

在這裏插入圖片描述
在這裏插入圖片描述

4.3 配置遠程上傳文件

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
也可以設置私有倉庫
vim /etc/docker/daemon.json

{  
   "registry-mirrors": ["https://reg.red.org"]  
} 

systemctl restart docker
docker rmi reg.red.org/library/nginx:latest刪除之前的鏡像
docker pull nginx直接從私有倉庫下載

在這裏插入圖片描述


4.4 設置harbor私有倉庫

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


開發人員具備上傳文件的權利
docker tag busybox:latest reg.red.org/private/busybox:latest
docker login reg.red.org
docker push reg.red.org/private/busybox

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
私有倉庫公開以後可以匿名下載


4.5 增加harbor倉庫鏡像掃描、簽名功能

參考官網:https://goharbor.io/docs/1.10/working-with-projects/working-with-images/pulling-pushing-images/
cd harbor/
docker-compose stop
./prepare

在這裏插入圖片描述
在這裏插入圖片描述
鏡像檢測
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


鏡像信任
參考官方文檔:https://docs.docker.com/engine/security/trust/content_trust/

在這裏插入圖片描述
在這裏插入圖片描述

1.部署根證書: (使docker引擎和操作系統都可以識別到證書)

/etc/docker/certs.d/reg.westos.org/ca.crt 給docker引擎使用
 ~/.docker/tls/reg.westos.org:4443/ca.crt 給操作系統使用

mkdir -p .docker/tls/reg.red.org:4443
cp /etc/docker/certs.d/reg.red.org/ca.crt .docker/tls/reg.red.org:4443
在這裏插入圖片描述
2.啓用docker內容信任:
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://reg.red.org:4443
在這裏插入圖片描述
在這裏插入圖片描述
3.上傳鏡像:
docker tag game2048:latest reg.red.org/private/game2048:latest
docker push reg.red.org/private/game2048上傳沒有打標籤的鏡像

docker tag game2048:latest reg.red.org/private/game2048:v1
docker push reg.red.org/private/game2048:v1上傳沒有打標籤的鏡像,這裏簽名和標籤是綁定的

docker tag game2048:latest reg.red.org/private/game2048:v2
docker push reg.red.org/private/game2048:v2

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


4.刪除簽名:
docker trust revoke reg.westos.org/library/nginx:latest回收簽名

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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