運維工程師面試
一、linux
1. linux系統啟動流程
- 第一步:開機自檢,載入BIOS
- 第二步:讀取MBR
- 第三步:Boot Loader grub引導選單
- 第四步:載入kernel核心
- 第五步:init程序依據inittab資料夾來設定執行級別
- 第六步:init程序執行rc.sysinit
- 第七步:啟動核心模組
- 第八步:執行不同執行級別的指令碼程式
- 第九步:執行/etc/rc.d/rc.lo
2. linux檔案型別
檔案屬性 | 檔案型別 |
---|---|
- | 常規檔案,即file |
d | 目錄檔案 |
b | block device 即塊裝置檔案,如硬碟;支援以block為單位進行隨機訪問 |
c | character device 即字元裝置檔案,如鍵盤支援以character為單位進行線性訪問 |
l | symbolic link 即符號連結檔案,又稱軟連結檔案 |
p | pipe 即命名管道檔案 |
s | socket 即套接字檔案,用於實現兩個程序進行通訊 |
3. centos6和7怎麼將原始碼安裝的程式新增到開機自啟動?
- 通用方法:編輯/etc/rc.d/rc.local檔案,在檔案末尾新增啟動服務命令
- centos6:①進入到/etc/rc.d/init.d目錄下,②新建一個服務啟動指令碼,指令碼中指定chkconfig引數,③新增執行許可權,④執行chkconfig --add 新增服務自啟動
- centos7:①進入到/usr/lib/systemd/system目錄下,②新建自定義服務檔案,檔案中包含[Unit] [Service] [Install]相關配置,然後新增下執行許可權,③執行systemctl enable 服務名稱
4. 簡述lvm,如何給使用lvm的/分割槽擴容?
- 功能:可以對磁碟進行動態管理。動態按需調整大小
- 概念:
①PV - 物理卷:物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬碟上的分割槽,也可以是整個物理硬碟,也可以是raid裝置。
②VG - 卷組:卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態新增物理捲到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。
③LV - 邏輯卷:邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴充套件和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。
- 給/分割槽擴容步驟:
①新增磁碟
②使用fdisk命令對新增加的磁碟進行分割槽
③分割槽完成後修改分割槽型別為lvm
④使用pvcreate建立物理卷
⑤使用vgextend命令將新增加的分割槽加入到根目錄分割槽中
⑥使用lvextend命令進行擴容
⑦使用xfs_growfs調整卷分割槽大小
5. 為何du和df統計結果不一致?
- 使用者刪除了大量的檔案被刪除後,在檔案系統目錄中已經不可見了,所以du就不會再統計它。
- 然而如果此時還有執行的程序持有這個已經被刪除的檔案控制代碼,那麼這個檔案就不會真正在磁碟中被刪除,分割槽超級塊中的資訊也就不會更改,df仍會統計這個被刪除的檔案。
- 可通過 lsof命令查詢處於deleted狀態的檔案,被刪除的檔案在系統中被標記為deleted。如果系統有大量deleted狀態的檔案,會導致du和df統計結果不一致。
6. 如何升級核心?
方法一 # 新增第三方yum源進行下載安裝。 Centos 6 YUM源:http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm Centos 7 YUM源:http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm # 先匯入elrepo的key,然後安裝elrepo的yum源: rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm # 檢視可用的核心相關包 yum --disablerepo="*" --enablerepo="elrepo-kernel" list available yum -y --enablerepo=elrepo-kernel install 方法二 # 通過下載kernel image的rpm包進行安裝。 官方 Centos 6: http://elrepo.org/linux/kernel/el6/x86_64/RPMS/ 官方 Centos 7: http://elrepo.org/linux/kernel/el7/x86_64/RPMS/ # 獲取下載連結進行下載安裝即可 wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-4.4.185-1.el7.elrepo.x86_64.rpm rpm -ivh kernel-lt-4.4.185-1.el7.elrepo.x86_64.rp # 檢視預設啟動順序 [root@localhost ~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg CentOS Linux (5.2.2-1.el7.elrepo.x86_64) 7 (Core) CentOS Linux (4.4.182-1.el7.elrepo.x86_64) 7 (Core) CentOS Linux (3.10.0-957.21.3.el7.x86_64) 7 (Core) CentOS Linux (3.10.0-957.10.1.el7.x86_64) 7 (Core) CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) CentOS Linux (0-rescue-e34fb4f1527b4f2d9fc75b77c016b6e7) 7 (Core) 由上面可以看出新核心(4.12.4)目前位置在0,原來的核心(3.10.0)目前位置在1 # 設定預設啟動 [root@localhost ~]# grub2-set-default 0 // 0代表當前第一行,也就是4.12.4版本 # 重啟驗證
7. nginx日誌訪問量前十的ip怎麼統計?
awk '{array[$1]++}END{for (ip in array)print ip,array[ip]}' access.log |sort -k2 -rn|head
8. 如何刪除/var/log/下.log結尾的30天前的日誌?
find /var/log/ -type f -name .*.log -mtime 30|xargs rm -f
9. ansible有哪些模組?功能是什麼?
模組 | 功能 |
---|---|
copy | 拷貝檔案到被控端 |
cron | 定時任務 |
fetch | 拷貝被控端檔案到本地 |
file | 檔案模組 |
group | 使用者組模組 |
user | 使用者模組 |
hostname | 主機名模組 |
script | 指令碼模組 |
service | 服務啟動模組 |
command | 遠端執行命令模組 |
shell | 遠端執行命令模組,command高階用法 |
yum | 安裝包組模組 |
setup | 檢視主機系統資訊 |
10. nginx為什麼比apache快?
- nginx採用epoll模型
- apache採用select模型
11. 四層負載和七層負載區別是什麼?
- 四層基於IP+埠進行轉發
- 七層就是基於URL等應用層資訊的負載均衡
12. lvs有哪些工作模式?哪個效能高?
-
dr:直接路由模式,請求由 LVS 接受,由真實提供服務的伺服器直接返回給使用者,返回的時候不經過 LVS。(效能最高)
-
tun:隧道模式,客戶端將訪問vip報文傳送給LVS伺服器。LVS伺服器將請求報文重新封裝,傳送給後端真實伺服器。後端真實伺服器將請求報文解封,在確認自身有vip之後進行請求處理。後端真實伺服器在處理完資料請求後,直接響應客戶端。
-
nat:網路報的進出都要經過 LVS 的處理。LVS 需要作為 RS 的閘道器。當包到達 LVS 時,LVS 做目標地址轉換(DNAT),將目標 IP 改為 RS 的 IP。RS 接收到包以後,彷彿是客戶端直接發給它的一樣。RS 處理完,返回響應時,源 IP 是 RS IP,目標 IP 是客戶端的 IP。這時 RS 的包通過閘道器(LVS)中轉,LVS 會做源地址轉換(SNAT),將包的源地址改為 VIP,這樣,這個包對客戶端看起來就彷彿是 LVS 直接返回給它的。客戶端無法感知到後端 RS 的存在。
-
fullnat模式:fullnat模式和nat模式相似,但是與nat不同的是nat模式只做了兩次地址轉換,fullnat模式卻做了四次。
13. lvs nginx haproxy keeplived區別,優缺點?
14. 如下url地址,各個部分的含義
https://www.baidu.com/s?word=123&ie=utf-8
- https: 使用https加密協議訪問
- www.baidu.com/s: 請求地址
- ?word&ie=utf-8: get請求的引數,多個引數&連線
15. tomcat各個目錄含義,如何修改埠,如何修改記憶體數?
- bin 存放tomcat命令
- conf 存放tomcat配置檔案
- lib 存放tomcat執行需要載入的jar包
- log 存在Tomcat執行產生的日誌
- temp 執行過程中產生的臨時檔案
- webapps 站點目錄
- work 存放tomcat執行時的編譯後的檔案
- conf/server.xml 修改埠號
- bin/catalina.sh 修改jvm記憶體
16. nginx反向代理時,如何使後端獲取真正的訪問來源ip?
在location配置段新增以下內容:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
17. nginx負載均衡演算法有哪些?
- rr 輪訓
- weight 加權輪訓
- ip_hash 靜態排程演算法
- fair 動態排程演算法
- url_hash url雜湊
- leat_conn 最小連線數
18. 如何進行壓力測試?
例如:模擬10個使用者,對百度首頁發起總共100次請求。
測試命令: ab -n 100 -c 10 https://www.baidu.com/index.htm
19. curl命令如何傳送https請求?如何檢視response頭資訊?如何傳送get和post表單資訊?
- 傳送https請求:curl --tlsv1 ‘https://www.bitstamp.net/api/v2/transactions/btcusd/’
- response頭資訊 :curl -I
- get:curl 請求地址?key1=value1&key2=value2&key3=value3
- post: curl -d “key1=value1&key2=value2&key3=value3”
二、mysql
1. 索引的為什麼使查詢加快?有啥缺點?
預設的方式是根據搜尋條件進行全表掃描,遇到匹配條件的就加入搜尋結果集合。如果我們對某一欄位增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度
缺點:
- 建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加
- 索引需要佔物理空間,除了資料表佔用資料空間之外,每一個索引還要佔用一定的物理空間,如果需要建立聚簇索引,那麼需要佔用的空間會更大
- 以表中的資料進行增、刪、改的時候,索引也要動態的維護,這就降低了整數的維護速度
2. sql語句左外連線 右外連線 內連線 全連線區別
3.mysql資料備份方式,如何恢復?你們的備份策略是什麼?
- 物理完全備份
備份所有資料庫檔案:/var/lib/mysql/*
備份所有binlog檔案: /var/lib/mysql/mysql-bin.*
備份選項檔案: /etc/my.cnf
- mysqldump邏輯備份
mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db
- 物理備份恢復
mv /var/lib/mysql /var/lib/mysql.old #先把原來的資料目錄改名
cp -a /backups/mysql /var/lib
- 邏輯備份資料恢復
mysql > use db_name
mysql > source /backup/mysqldump/db_name.db
4.如何配置資料庫主從同步,實際工作中是否遇到資料不一致問題?如何解決?
為每個伺服器配置唯一值的server-id
- 主庫
開啟binlog日誌
建立主從複製使用者
檢視master的狀態
- 從庫
change master to設定主庫資訊
start slave開始複製
5.二進位制日誌(binlog)用途?
BINLOG記錄資料庫的變更過程。例如建立資料庫、建表、修改表等DDL操作、以及資料表的相關DML操作,這些操作會導致資料庫產生變化,開啟binlog以後導致資料庫產生變化的操作會按照時間順序以“事件”的形式記錄到binlog二進位制檔案中
6.mysql資料引擎有哪些?
- 常用的 myisam、innodb
- 區別:
InnoDB 支援事務,MyISAM 不支援,這一點是非常之重要。事務是一種高階的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原,而 MyISAM就不可以了;
MyISAM 適合查詢以及插入為主的應用,InnoDB 適合頻繁修改以及涉及到安全性較高的應用;
InnoDB 支援外來鍵,MyISAM 不支援;
MyISAM 是預設引擎,InnoDB 需要指定;
InnoDB 不支援 FULLTEXT 型別的索引;
InnoDB 中不儲存表的行數,如 select count() from table 時,InnoDB;需要掃描一遍整個表來計算有多少行,但是 MyISAM 只要簡單的讀出儲存好的行數即可。注意的是,當 count()語句包含 where 條件時 MyISAM 也需要掃描整個表;
對於自增長的欄位,InnoDB 中必須包含只有該欄位的索引,但是在 MyISAM表中可以和其他欄位一起建立聯合索引;
清空整個表時,InnoDB 是一行一行的刪除,效率非常慢。MyISAM 則會重建表;
InnoDB 支援行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like ‘%lee%’
7.如何查詢mysql資料庫存放路徑?
mysql> show variables like 'datadir%';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| datadir | /usr/local/mysql/data/ |
+---------------+------------------------+
1 row in set (0.00 sec)
8.mysql資料庫檔案字尾名有哪些?用途什麼?
- myisam
.frm檔案:保護表的定義
.myd:儲存表的資料
.myi:表的索引檔案
- innodb
.frm:儲存表的定義
.ibd:表空間
9.如何修改資料庫使用者的密碼?
mysql8之前 set password for 使用者名稱@localhost = password('新密碼'); mysqladmin -u使用者名稱 -p舊密碼 password 新密碼 update user set password=password('123') where user='root' and host='localhost'; mysql8之後 # mysql8初始對密碼要求高,簡單的字串不讓改。先改成:MyNewPass@123; alter user 'root'@'localhost' identified by 'MyNewPass@123'; # 降低密碼難度 set global validate_password.policy=0; set global validate_password.length=4; # 修改成簡易密碼 alter user 'root'@'localhost'IDENTIFIED BY '1111';
10.如何修改使用者許可權?如何檢視?
- 授權:
grant all on *.* to user@'%' identified by 'passwd'
- 檢視許可權
show grants for user@'%';
redis如何進行資料備份與恢復?
- 備份
redis 127.0.0.1:6379> SAVE
建立 redis 備份檔案也可以使用命令 BGSAVE,該命令在後臺執行。
- 還原
只需將備份檔案 (dump.rdb) 移動到 redis 安裝目錄並啟動服務即可
redis 127.0.0.1:6379> CONFIG GET dir
- “dir”
- “/usr/local/redis/bin”
容器相關
1. dockerfile有哪些關鍵字?用途是什麼?
2. 如何減小dockerfile生成映象體積?
- 儘量選取滿足需求但較小的基礎系統映象,例如大部分時候可以選擇debian:wheezy或debian:jessie映象,僅有不足百兆大小;
- 清理編譯生成檔案、安裝包的快取等臨時檔案;
- 安裝各個軟體時候要指定準確的版本號,並避免引入不需要的依賴;
- 從安全形度考慮,應用要儘量使用系統的庫和依賴;
- 如果安裝應用時候需要配置一些特殊的環境變數,在安裝後要還原不需要保持的變數值;
3. dockerfile中CMD與ENTRYPOINT區別是什麼?
- CMD 和 ENTRYPOINT 指令都是用來指定容器啟動時執行的命令。
- 指定 ENTRYPOINT 指令為 exec 模式時,CMD指定的引數會作為引數新增到 ENTRYPOINT 指定命令的引數列表中。
4. dockerfile中COPY和ADD區別是什麼?
- COPY指令和ADD指令都可以將主機上的資源複製或加入到容器映象中
- 區別是ADD可以從 遠端URL中的資源不會被解壓縮。
- 如果是本地的壓縮包ADD進去會被解壓縮
5. docker的cs架構元件有哪些?
6. docker網路型別有哪些?
- host模式
- container模式
- none模式
- bridge模式
7.命令相關:匯入匯出映象,進入容器,設定重啟容器策略,檢視映象環境變數,檢視容器佔用資源
- 匯入映象 docker load -i xx.tar
- 匯出映象docker save -o xx.tar image_name
- 進入容器docker exec -it 容器命令 /bin/bash
- 設定容器重啟策略啟動時 --restart選項
- 檢視容器環境變數 docker exec {containerID} env
- 檢視容器資源佔用docker stats test2
8.docker和vmware虛擬化區別?
9.k8s的叢集元件有哪些?功能是什麼?
10.kubectl命令相關:如何修改副本數,如何滾動更新和回滾,如何檢視pod的詳細資訊,如何進入pod互動?
- 修改副本數 kubectl scale deployment redis --replicas=3
- 活動更新 kubectl set image deployments myapp-deploy myapp=myapp:v2
- 回滾 kubectl rollout undo deployments myapp-deploy
- 檢視pod詳細資訊 kubectl describe pods/<pod-name>
- 進入pod互動 kubectl exec -it <pod-name> -c <container-name> bash
11.etcd資料如何備份?
- etcdctl --endpoints=“https://192.168.32.129:2379,https://192.168.32.130:2379,192.168.32.128:2379” --cacert=/etc/kubernetes/cert/ca.pem --key=/etc/etcd/cert/etcd-key.pem --cert=/etc/etcd/cert/etcd.pem snapshot save snashot1.db
- Snapshot saved at snashot1.db
12.k8s控制器有哪些?
- 副本集(ReplicaSet)
- 部署(Deployment)
- 狀態集(StatefulSet)
- Daemon集(DaemonSet)
- 一次任務(Job)
- 計劃任務(CronJob)
- 有狀態集(StatefulSet)
13.哪些是叢集級別的資源?
- Namespace
- Node
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
14.pod狀態有哪些?
- Pending 等待中
- Running 執行中
- Succeeded 正常終止
- Failed 異常停止
- Unkonwn 未知狀態
15.pod建立過程是什麼?
16.pod重啟策略有哪些?
Pod的重啟策略有3種,預設值為Always。
- Always : 容器失效時,kubelet 自動重啟該容器;
- OnFailure : 容器終止執行且退出碼不為0時重啟;
- Never : 不論狀態為何, kubelet 都不重啟該容器
17.資源探針有哪些?
- ExecAction:在容器中執行一個命令,並根據其返回的狀態碼進行診斷的操作稱為Exec探測,狀態碼為0表示成功,否則即為不健康狀態。
- TCPSocketAction:通過與容器的某TCP埠嘗試建立連線進行診斷,埠能夠成功開啟即為正常,否則為不健康狀態。
- HTTPGetAction:通過向容器IP地址的某指定埠的指定path發起HTTP GET請求進行診斷,響應碼為2xx或3xx時即為成功,否則為失敗。
18.requests和limits用途是什麼?
- “requests”屬性定義其請求的確保可用值,即容器執行可能用不到這些額度的資源,但用到時必須要確保有如此多的資源可用
- ”limits”屬性則用於限制資源可用的最大值,即硬限制
19.kubeconfig檔案包含什麼內容,用途是什麼?
包含叢集引數(CA證書、API Server地址),客戶端引數(上面生成的證書和私鑰),叢集context 資訊(叢集名稱、使用者名稱)。
20. RBAC中role和clusterrole區別,rolebinding和 clusterrolebinding區別?
- Role 可以定義在一個 namespace 中,如果想要跨 namespace則可以建立ClusterRole,ClusterRole 具有與 Role相同的許可權角色控制能力,不同的是 ClusterRole 是叢集級別的
- RoleBinding 適用於某個名稱空間內授權,而 ClusterRoleBinding 適用於叢集範圍內的授權
21.ipvs為啥比iptables效率高?
IPVS模式與iptables同樣基於Netfilter,但是ipvs採用的hash表,iptables採用一條條的規則列表。iptables又是為了防火牆設計的,叢集數量越多iptables規則就越多,而iptables規則是從上到下匹配,所以效率就越是低下。因此當service數量達到一定規模時,hash查表的速度優勢就會顯現出來,從而提高service的服務效能
22.sc pv pvc用途,容器掛載儲存整個流程是什麼?
- PVC:Pod 想要使用的持久化儲存的屬性,比如儲存的大小、讀寫許可權等。
- PV :具體的 Volume 的屬性,比如 Volume 的型別、掛載目錄、遠端儲存伺服器地址等。
- StorageClass:充當 PV 的模板。並且,只有同屬於一個 StorageClass 的 PV 和 PVC,才可以繫結在一起。當然,StorageClass 的另一個重要作用,是指定 PV 的 Provisioner(儲存外掛)。這時候,如果你的儲存外掛支援 Dynamic Provisioning 的話,Kubernetes 就可以自動為你建立 PV 了。
23.nginx ingress的原理本質是什麼?
- ngress controller通過和kubernetes api互動,動態的去感知叢集中ingress規則變化,
- 然後讀取它,按照自定義的規則,規則就是寫明瞭哪個域名對應哪個service,生成一段nginx配置,
- 再寫到nginx-ingress-controller的pod裡,這個Ingress
controller的pod裡執行著一個Nginx服務,控制器會把生成的nginx配置寫入/etc/nginx.conf檔案中, - 然後reload一下使配置生效。以此達到域名分配置和動態更新的問題。
24.描述不同node上的Pod之間的通訊流程
25.k8s叢集節點需要關機維護,需要怎麼操作
- 進行pod驅逐:kubelet drain <node_name>
- 檢查node上是否無pod執行,切被驅逐的pod已經在其他節點執行正常
- 關機維護
- 開機啟動相關服務(注意啟動順序)
- 解除node節點不可排程:kubectl uncordon node
- 建立測試pod,並使用節點標籤測試節點可以被正常排程
26.canal和flannel區別
- Flannel(簡單、使用居多):基於Vxlan技術(疊加網路+二層隧道),不支援網路策略
- Calico(較複雜,使用率少於Flannel):也可以支援隧道網路,但是是三層隧道(IPIP),支援網路策略
- Calico專案既能夠獨立地為Kubernetes叢集提供網路解決方案和網路策略,也能與flannel結合在一起,由flannel提供網路解決方案,而Calico此時僅用於提供網路策略。
27.prometheus對比zabbix有哪些優勢?
https://blog.csdn.net/wangyiyungw/article/details/85774969**
28.prometheus元件有哪些,功能是什麼?
29.簡述從新增節點監控到grafana成圖的整個流程
- 被監控節點安裝exporter
- prometheus服務端新增監控項
- 檢視prometheus web介面——status——targets
- grafana建立圖表
30.在工作中用到了哪些exporter
- node-exporter監控linux主機
- cAdvisor監控容器
- MySQLD Exporter監控mysql
- Blackbox Exporter網路探測
- Pushgateway採集自定義指標監控
- process exporter程序監控
三、其他
1. Elasticsearch的資料如何備份與恢復?
https://www.cnblogs.com/tcy1/p/13492361.html
https://blog.csdn.net/moxiaomomo/article/details/78401400?locationNum=8&fps=1
2. 你們專案中使用的logstash過濾器外掛是什麼?實現哪些功能?
- date 日期解析
- grok 正則匹配解析
- overwrite 寫某個欄位
- dissect 分隔符解析
- mutate 對欄位做處理
- json 解析
- geoip 地理位置解析
- ruby 修改logstash event
3. elasticsearch分片副本是什麼?你們配置的引數是多少?
4.備份系統中所有容器映象
#備份映象列表 docker images|awk 'NR>1{print $1":"$2}'|sort > images.list。 #匯出所有映象為當前目錄下檔案: while read img; do echo $img file="${img/\//-}" sudo docker save --output $file.tar $img done < images.list #將本地映象檔案匯入為Docker映象: while read img; do echo $img file="${img/\//-}" docker load < $file.tar done < images.list
4.批量獲取所有主機的系統資訊
- 使用python的paramiko庫,ssh登陸主機執行查詢操作
- 使用shell指令碼批量ssh登陸主機並執行命令
- 使用ansible的setup模組獲取主機資訊
- prometheus的node_exporter收集主機資源資訊
5.django的mtv模式流程
6. python建立,進入,退出,檢視虛擬環境
- 安裝軟體包
pip3 install virtualenv
- 檢測安裝是否成功
virtualenv --version
- 建立虛擬環境
- cd到要建立虛擬環境的目錄
cd github/test/venv/
- 建立虛擬環境
virtualenv test
- 啟用虛擬環境
source test/bin/activate(activate路徑)
- 退出虛擬環境
deactivate
7. python如何匯出、匯入環境依賴包
- 匯出環境
pip freeze >> requirements.txt
- 匯入環境
pip install -r requirement.txt
8. 列舉常用的git命令
- $ git init
- $ git config
- $ git add
- $ git commit
- $ git branch
- $ git checkout
- $ git tag
- $ git push
- $ git status
- $ git log
9. git gitlab jenkins的CICD流程如何配置
- 開發者git提交程式碼至gitlab倉庫
- jenkins從gitlab拉取程式碼,觸發映象構建
- 映象上傳至harbor私有倉庫
- 映象下載至執行機器
- 映象執行