快速配置應(yīng)用
docker-compose.yml
使用 docker-compose
對(duì) docker
容器集群進(jìn)行快速編排
獲取 docker-gitlab
的 docker-compose.yml
配置文件纺且,進(jìn)行快速構(gòu)建
$ wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
獲取 docker-compose.yml
文件后剖煌,進(jìn)行自定義配置。
配置環(huán)境
打開 docker-compose.yml
文件创南,針對(duì) gitlab
進(jìn)行環(huán)境配置
version: '2.3'
services:
...
# 省略顯示其他服務(wù)
...
gitlab:
restart: always
image: sameersbn/gitlab:13.0.6
depends_on:
- redis
- postgresql
ports:
- "10080:80"
- "10022:22"
volumes:
- gitlab-data:/home/git/data:Z
healthcheck:
test: ["CMD", "/usr/local/sbin/healthcheck"]
interval: 5m
timeout: 10s
retries: 3
start_period: 5m
environment:
- DEBUG=false
- DB_ADAPTER=postgresql
- DB_HOST=postgresql
- DB_PORT=5432
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- REDIS_HOST=redis
- REDIS_PORT=6379
- TZ=Asia/Kolkata
- GITLAB_TIMEZONE=Kolkata
- GITLAB_HTTPS=false
- SSL_SELF_SIGNED=false
- GITLAB_HOST=localhost
- GITLAB_PORT=10080
- GITLAB_SSH_PORT=10022
- GITLAB_RELATIVE_URL_ROOT=
- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string
...
# 省略其他配置
...
參考配置文檔,我們需要將時(shí)區(qū)設(shè)置為東八時(shí)區(qū)逢唤,設(shè)置數(shù)據(jù)混淆密匙肆氓,設(shè)置服務(wù)地址。
environment:
- TZ=Asia/Shanghai
- GITLAB_TIMEZONE=Asia/Shanghai
- GITLAB_HOST=192.168.2.192
設(shè)置混淆密匙怖辆,一般推薦 64
位隨機(jī)字符串,可以用 pwgen
生成删顶,可以安裝 pwgen
服務(wù)竖螃,然后運(yùn)行 pwgen -Bsv1 64
即可生成隨機(jī)字符串。
environment:
- GITLAB_SECRETS_DB_KEY_BASE=nvqgzJdgrmr3tqsC4F9gKVNhKvTq3N7cJPjNggR93qthNhJ3MWkc7jNmNTLRXdhX
- GITLAB_SECRETS_SECRET_KEY_BASE=pcrf73fX4rM7bKxc7tcq3kwKWdtKKtrmmsHwT3J9rwCLMsK37PxCnXbMgnRpqJbk
- GITLAB_SECRETS_OTP_KEY_BASE=3d9tPCzpv7rfmVgnjN9McbztRVbp4rjxWWqFbNLTCbRz9mKkpvqqWgxMq7NM7c9w
同理逗余,docker-compose.yml
的其他服務(wù)也需要配置東八時(shí)區(qū)特咆。
數(shù)據(jù)卷掛載
數(shù)據(jù)卷掛載可對(duì)數(shù)據(jù)進(jìn)行持久化保存,不會(huì)因?yàn)槿萜鞯膭h除而刪除录粱,數(shù)據(jù)掛載的目錄數(shù)據(jù)會(huì)自動(dòng)與容器內(nèi)的數(shù)據(jù)同步腻格,數(shù)據(jù)掛載的目錄數(shù)據(jù)優(yōu)先于容器內(nèi)數(shù)據(jù),即修改數(shù)據(jù)卷數(shù)據(jù)啥繁,會(huì)自動(dòng)同步到容器內(nèi)數(shù)據(jù)菜职。
version: '2.3'
services:
redis:
restart: always
image: redis:5.0.9
command:
- --loglevel warning
volumes:
- redis-data:/var/lib/redis:Z
environment:
- TZ=Asia/Shanghai
postgresql:
restart: always
image: sameersbn/postgresql:11-20200524
volumes:
- postgresql-data:/var/lib/postgresql:Z
environment:
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm
- TZ=Asia/Shanghai
gitlab:
restart: always
image: sameersbn/gitlab:13.0.6
depends_on:
- redis
- postgresql
ports:
- "10080:80"
- "10022:22"
volumes:
- gitlab-data:/home/git/data:Z
healthcheck:
test: ["CMD", "/usr/local/sbin/healthcheck"]
interval: 5m
timeout: 10s
retries: 3
start_period: 5m
注意:數(shù)據(jù)卷的掛載,需要在宿主機(jī)提前創(chuàng)建好對(duì)應(yīng)的目錄旗闽。
手動(dòng)創(chuàng)建以下目錄:
/app/volumes/gitlab/gitlab/
/app/volumes/gitlab/postgresql/
/app/volumes/gitlab/redis/
修改對(duì)應(yīng)數(shù)據(jù)卷配置:
redis:
restart: always
image: redis:5.0.9
command:
- --loglevel warning
volumes:
- /app/volumes/gitlab/redis:/var/lib/redis:Z
postgresql:
restart: always
image: sameersbn/postgresql:11-20200524
volumes:
- /app/volumes/gitlab/postgresql:/var/lib/postgresql:Z
gitlab:
restart: always
image: sameersbn/gitlab:13.0.6
depends_on:
- redis
- postgresql
ports:
- "10080:80"
- "10022:22"
volumes:
- /app/volumes/gitlab/gitlab:/home/git/data:Z
gitlab-runner
拉下來的 docker-compose.yml
文件默認(rèn)是沒有 gitlab-runner
的酬核,我們需要將 gitlab-runner
寫到 docker-compose.yml
配置上來蜜另。
也要先創(chuàng)建數(shù)據(jù)卷掛載文件目錄:
/app/volumes/gitlab-runner/config/
gitlab-runner:
restart: always
image: gitlab/gitlab-runner
depends_on:
- gitlab
volumes:
- /app/volumes/gitlab-runner/config:/etc/gitlab-runner:Z
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
快速構(gòu)建應(yīng)用
將配置好的 docker-compose.yml
文件放到 /app/docker/gitlab/
下,執(zhí)行以下命令:
$ cd /app/docker/gitlab/
$ docker-compose up
docker-compose
會(huì)自動(dòng)管理 docker
容器集群嫡意,包括對(duì)鏡像進(jìn)行拉取举瑰、創(chuàng)建以及啟動(dòng)。
稍等片刻蔬螟,我們即可通過 http://192.168.2.192:10080/
打開 gitlab
頁(yè)面嘶居,第一次打開是直接設(shè)置 root
賬號(hào)的密碼,設(shè)置密碼后即可登錄進(jìn)入 gitlab
內(nèi)頁(yè)促煮。
英文不好的同學(xué)可以進(jìn)入個(gè)人設(shè)置那里設(shè)置 language
為簡(jiǎn)體中文。
注冊(cè)runner
什么是 runner
整袁,runner
就是 gitlab
進(jìn)行可持續(xù)集成與可持續(xù)交付過程所跑的環(huán)境容器服務(wù)菠齿。
為了進(jìn)行 ci/cd
=> 可持續(xù)集成/可持續(xù)部署,我們需要注冊(cè) runner
坐昙,一般我們注冊(cè)的是共享 runner
绳匀,也就是任何倉(cāng)庫(kù)的 ci/cd
都可以在上面跑。當(dāng)然炸客,我們也可以創(chuàng)建多個(gè) runner
服務(wù)疾棵,為特定倉(cāng)庫(kù)指定 runner
。
下面以注冊(cè)共享 runner
為例:
比如
- 進(jìn)入
runner
容器
$ docker exec -it 容器ID bash
- 注冊(cè)
runner
$ gitlab-runner register
- 輸入
gitlab
示例的url
$ Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ):
http://192.168.2.192:10080/
- 輸入用來注冊(cè)
runner
的token
$ Please enter the gitlab-ci token for this runner:
yrErncrc8XY_e5-g7bU8
- 輸入
runner
的描述痹仙,隨后可在gitlab
界面中修改
$ Please enter the gitlab-ci description for this runner:
gitlab-ci
- 輸入與
runner
綁定的標(biāo)簽(可修改)
$ Please enter the gitlab-ci tags for this runner (comma separated):
gitlab-ci
- 選擇
runner
的執(zhí)行方式(推薦docker
)
$ Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
- 如果選擇的執(zhí)行方式是
docker
是尔,會(huì)要求填寫默認(rèn)的鏡像
$ Please enter the Docker image (eg. ruby:2.1):
alpine:latest
注冊(cè)成功后會(huì)在 runner
容器 ~/etc/gitlab-runner/
目錄下生成 config.toml
配置文件,這時(shí)候就可以在 gitlab
的管理頁(yè)面中看到激活的 runner
然后开仰,對(duì) runner
進(jìn)行修改拟枚,勾選 runner 可以選擇無標(biāo)簽的項(xiàng)目
(默認(rèn)是同樣標(biāo)簽的項(xiàng)目才能使用對(duì)應(yīng)標(biāo)簽的 runner
)。這樣众弓,runner
就可以變?yōu)楣蚕?runner
了恩溅。
當(dāng)我們需要專門為某個(gè)項(xiàng)目跑的 runner
時(shí),那就不需要勾選 runner
可選擇無標(biāo)簽選項(xiàng)谓娃,在下面配置添加 runner
服務(wù)的項(xiàng)目保存即可脚乡。
可持續(xù)集成/部署
可持續(xù)集成與部署需要配置 .gitlab-ci.yml
文件,gitlab
會(huì)檢查每個(gè)倉(cāng)庫(kù)根目錄是否存在 .gitlab-ci.yml
文件滨达,有的話 runner
則自動(dòng)跑起來奶稠。
gitlab
默認(rèn)開啟 auto devops
功能,如果沒有 .gitlab-ci.yml
文件弦悉,則會(huì)自動(dòng)運(yùn)行 auto devops
窒典,如果沒有配置 Auto DevOps
功能與 Kubernetes
集成的話,建議關(guān)閉默認(rèn)的 auto devops
功能稽莉。
.gitlab-ci.yml
這是一個(gè)自動(dòng)編譯前端代碼并發(fā)布到 gitlab page
的配置文件:
building:
image: node:alpine # 指定運(yùn)行環(huán)境
stage: build # 當(dāng)前stage階段為build
script: # build階段運(yùn)行的腳本
- yarn --registry=https://registry.npm.taobao.org
- yarn docs:build
artifacts: # 工件瀑志,可以緩存在gitlab的流水線記錄中,供直接下載
expire_in: 3 days # 工件緩存的有效時(shí)間
paths: # 路徑
- docs/.vuepress/dist/ # 工件指向的目錄,這里指整個(gè)dist目錄
cache: # 緩存
paths: # 路徑
- node_modules/ # 緩存node_mudules將大大提高ci運(yùn)行的速度
deploying:
stage: deploy # 當(dāng)前階段為deploy
script: # deploy階段運(yùn)行的命令
- rm -rf public/* # linux命令劈猪,遞歸無詢問刪除public目錄下所有文件- mv dist/* public //將dist目錄下的所有文件都移動(dòng)到public目錄下
artifacts: # 工件緩存
expire_in: 3 days # 時(shí)效為3天
paths: # 路徑
- public # 緩存整個(gè)public目錄的文件
only:
- master # ceate pages下的所有操作只在 master 分支上進(jìn)行
自動(dòng)化
當(dāng)我們提交我們的代碼后昧甘,gitlab
會(huì)自動(dòng)根據(jù) .gitlab-ci.yml
的配置運(yùn)行 runner
。
這樣我們就實(shí)現(xiàn)自動(dòng)化集成與部署了战得,大大的提高了我們的開發(fā)效率充边。
身份認(rèn)證
我們?cè)?gitlab
上注冊(cè)了自己的賬號(hào)后,為了方便身份認(rèn)證常侦,一般需要用 ssh
生成身份認(rèn)證密匙浇冰,這樣就不需要每次訪問都要輸入賬號(hào)密碼。
配置SHH密匙
在我們的電腦 git bash
輸入:
$ ssh-keygen -t rsa -C "我們?cè)趃itlab注冊(cè)的郵箱" -f ~/.ssh/gitlab_id_rsa
此時(shí)會(huì)在我們電腦用戶根目錄的 /.ssh
下生成私匙跟公匙:
gitlab_id_rsa
gitlab_id_rsa.pub
打開 pub
后綴的公匙聋亡,復(fù)制粘貼到 gitlab
用戶設(shè)置肘习,保存即可。
在對(duì) gitlab
倉(cāng)庫(kù)使用 git
命令的時(shí)候坡倔,如果出現(xiàn)提示沒有權(quán)限的話漂佩,多半是因?yàn)?git
混淆了 github
與 gitlab
的 ssh
密鑰,解決方法看下一步罪塔。
github與gitlab共存
假設(shè)我們之前就已經(jīng)生成了 github
的 ssh
密匙:
github_id_rsa
github_id_rsa.pub
在我們電腦的用戶目錄 /.ssh/
下創(chuàng)建 config
文件投蝉,配置如下,保存即可:
#github
Host github.com
HostName github.com
IdentityFile C:/Users/jwchan/.ssh/github_id_rsa
#gitlab
Host 192.168.2.192
HostName 192.168.2.192
IdentityFile C:/Users/jwchan/.ssh/gitlab_id_rsa
這樣征堪,我們?cè)谔峤淮a的時(shí)候瘩缆,會(huì)自動(dòng)區(qū)分目標(biāo)服務(wù)器從而使用對(duì)應(yīng)的 ssh
密匙。
git基本操作
- 拉取倉(cāng)庫(kù)
$ git clone ssh://git@192.168.2.192:10022/jwchan/blog.git
- 進(jìn)入倉(cāng)庫(kù)貢獻(xiàn)代碼
$ cd /blog/
- 查看倉(cāng)庫(kù)代碼修改狀態(tài)
$ git status
- 添加代碼緩沖區(qū)
$ git add .
- 提交代碼并注釋
$ git commit -m "[fix]: bug"
- 推送代碼到遠(yuǎn)程倉(cāng)庫(kù)
$ git push