程序語言:
# vim hello.c
#include <stdio.h>
int main(void){
printf("Hello World!\n");
return 0;
}
# gcc -o hello hello.c
# ./hello
graph LR
dev(程序員)--推送-->git(git server)
ci(jenkins)--拉取-->git
app(應用服務器)--拉取-->ci
主機規劃:
全部在192.168.4.5上實現。
SCM:軟件配置管理,如git / svn
# 基本配置
[[email protected] ~]# yum install -y git
# 環境基本配置
[[email protected] ~]# git config --global user.name "Mr.Zhang"
[[email protected] ~]# git config --global user.email "[email protected]"
[[email protected] ~]# git config --global core.editor vim
[[email protected] ~]# git config --list
[[email protected] ~]# cat ~/.gitconfig
git的三個重要區域
graph LR
work(工作區)--git add-->stage(暫存區)
stage--git commit-->ver(版本庫)
[[email protected] ~]# git init mytest
初始化空的 Git 版本庫於 /root/mytest/.git/
[[email protected] ~]# ls -A mytest/
.git
[[email protected] ~]# mkdir myweb
[[email protected] ~]# cd myweb/
[[email protected] myweb]# echo '<h1>my web site</h1>' > index.html
[[email protected] myweb]# ls
index.html
[[email protected] myweb]# git init .
初始化空的 Git 版本庫於 /root/myweb/.git/
[[email protected] myweb]# ls -A
.git index.html
加入跟蹤
[[email protected] myweb]# git status
# 位於分支 master
#
# 初始提交
#
# 未跟蹤的文件:
# (使用 "git add <file>..." 以包含要提交的內容)
#
# index.html
提交為空,但是存在尚未跟蹤的文件(使用 "git add" 建立跟蹤)
[[email protected] myweb]# git status -s
?? index.html # 問號表示狀態未知
# 創建.gitignore忽略不想加入版本庫的文件
[[email protected] myweb]# vim .gitignore
*.swp
.gitignore
# 將目錄下所有文件加入跟蹤
[[email protected] myweb]# git add .
[[email protected] myweb]# git status
# 位於分支 master
#
# 初始提交
#
# 要提交的變更:
# (使用 "git rm --cached <file>..." 撤出暫存區)
#
# 新文件: index.html
#
[[email protected] myweb]# git status -s
A index.html
撤出暫存區
[[email protected] myweb]# git rm --cached index.html
rm 'index.html'
[[email protected] myweb]# git status -s
?? index.html
確認至版本庫
[[email protected] myweb]# git add .
[[email protected] myweb]# git status -s
A index.html
[[email protected] myweb]# git commit
[[email protected] myweb]# git status
# 位於分支 master
無文件要提交,干淨的工作區
修改文件,繼續提交
[[email protected] myweb]# echo '<h2>2nd version</h2>' >> index.html
[[email protected] myweb]# git status
# 位於分支 master
# 尚未暫存以備提交的變更:
# (使用 "git add <file>..." 更新要提交的內容)
# (使用 "git checkout -- <file>..." 丟棄工作區的改動)
#
# 修改: index.html
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[[email protected] myweb]# git status -s
M index.html
[[email protected] myweb]# git add .
[[email protected] myweb]# git commit -m "2nd version"
[[email protected] myweb]# git status
# 位於分支 master
無文件要提交,干淨的工作區
刪除工作區文件並恢復
[[email protected] myweb]# cp /etc/hosts .
[[email protected] myweb]# git status -s
?? hosts
[[email protected] myweb]# git add .
[[email protected] myweb]# git commit -m "add hosts"
[master 3145cda] add hosts
[[email protected] myweb]# git status
# 位於分支 master
無文件要提交,干淨的工作區
[[email protected] myweb]# rm -rf *
[[email protected] myweb]# git status
# 位於分支 master
# 尚未暫存以備提交的變更:
# (使用 "git add/rm <file>..." 更新要提交的內容)
# (使用 "git checkout -- <file>..." 丟棄工作區的改動)
#
# 刪除: hosts
# 刪除: index.html
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[[email protected] myweb]# git checkout -- *
[[email protected] myweb]# ls
hosts index.html
改名、刪除版本庫中文件
[[email protected] myweb]# cp /etc/passwd .
[[email protected] myweb]# git add .
[[email protected] myweb]# git commit -m "add passwd"
[[email protected] myweb]# git mv passwd mima
[[email protected] myweb]# git status
# 位於分支 master
# 要提交的變更:
# (使用 "git reset HEAD <file>..." 撤出暫存區)
#
# 重命名: passwd -> mima
#
[[email protected] myweb]# git commit -m "mv passwd mima"
[master e84a1ea] mv passwd mima
1 file changed, 0 insertions(+), 0 deletions(-)
rename passwd => mima (100%)
[[email protected] myweb]# git rm hosts
rm 'hosts'
[[email protected] myweb]# ls
index.html mima
[[email protected] myweb]# git status
# 位於分支 master
# 要提交的變更:
# (使用 "git reset HEAD <file>..." 撤出暫存區)
#
# 刪除: hosts
#
[[email protected] myweb]# git commit -m "rm hosts"
[master 3c281fc] rm hosts
1 file changed, 260 deletions(-)
delete mode 100644 hosts
[[email protected] myweb]# git status
切換到指定提交位置
[[email protected] myweb]# git log # 查看提交歷史
# 切換到歷史提交
[[email protected] myweb]# git checkout 92385f5778c954d683c5d32537cf41d4da8c07e6
# 返回到最近的位置
[[email protected] myweb]# git checkout master
分支管理
# 查看所有分支
[[email protected] myweb]# git branch
* master
# 創建分支,確保工作區是干淨的
[[email protected] myweb]# git branch b1
[[email protected] myweb]# git branch
b1
* master # *號表示目前所處分支
# 切換分支
[[email protected] myweb]# git checkout b1
切換到分支 'b1'
[[email protected] myweb]# git branch
* b1
master
# 在當前分支執行提交
[[email protected] myweb]# cp /etc/motd /etc/redhat-release .
[[email protected] myweb]# git add .
[[email protected] myweb]# git commit -m "add motd rh-release"
# 合並分支
[[email protected] myweb]# git checkout master
切換到分支 'master'
[[email protected] myweb]# ls
index.html mima
[[email protected] myweb]# git merge b1
[[email protected] myweb]# ls
index.html mima motd redhat-release
# 刪除分支
[[email protected] myweb]# git branch -d b1
已刪除分支 b1(曾為 0639c44)。
---創建虛擬機完成後,安裝docker後重啟服務
# systemctl start docker
# systemctl enable docker
# docker load < gitlab_zh.tar #導入gitlab中文鏡像
因為gitlab容器需要用22端口,修改虛擬機的ssh端口
[[email protected] ~]# vim /etc/ssh/sshd_config
Port 2022
[[email protected] ~]# systemctl restart sshd
# 退出登陸再次連接時,需要指定端口號
[[email protected] phase5]# ssh -p2022 192.168.1.137
啟動容器
[[email protected] ~]# docker run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab_zh:latest
# gitlab容器需要的資源比較多,所以需要較長的啟動時間
[[email protected] ~]# docker ps # 狀態顯示為healthy時才可用,需要等幾分鐘
創建名為devops的組,類型公開。
創建用戶。新建用戶時不能設置密碼,但是點擊編輯用戶界面可以設置密碼。
創建項目myweb,類型公開,為組devops創建。授權新建用戶是其主程序員。
[[email protected] myweb]# ssh-keygen -t rsa -C "[email protected]" -b 4096
[[email protected] myweb]# cat ~/.ssh/id_rsa.pub
#點擊gitlab用戶頭像的個人設置中,左邊的導航欄中有SSH密鑰,將生成的公鑰碼粘貼進去,在上傳代碼時就可以免密上傳。
# 推送代碼
[[email protected] myweb]# git remote rename origin old-origin
# 出現以下錯誤可以忽略
error: 不能重命名配置小節 'remote.origin' 到 'remote.old-origin'
[[email protected] myweb]# git remote add origin [email protected]:devops/myweb.git
[[email protected] myweb]# git push -u origin --all
[[email protected] myweb]# git push -u origin --tags
tag標記
[[email protected] myweb]# git tag 1.0
[[email protected] myweb]# cp /etc/selinux/config .
[[email protected] myweb]# git add .
[[email protected] myweb]# git commit -m "add selinux config"
[[email protected] myweb]# git tag 2.0
[[email protected] myweb]# git tag
1.0
2.0
[[email protected] myweb]# git push
[[email protected] myweb]# git push --tag
下載代碼
[[email protected] tmp]# git clone http://192.168.1.137/devops/myweb.git