文章目錄
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 tai
l # 查看日誌
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
回收簽名