使用 docker 部署 gitlab + gitlab-runner

快速配置應(yīng)用

docker-compose.yml

使用 docker-compose 對(duì) docker 容器集群進(jìn)行快速編排

獲取 docker-gitlabdocker-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)體中文。

設(shè)置語(yǔ)言

注冊(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 為例:

runner列表

比如

  1. 進(jìn)入 runner 容器
$ docker exec -it 容器ID bash
  1. 注冊(cè) runner
$ gitlab-runner register
  1. 輸入 gitlab 示例的 url
 $ Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ):
 http://192.168.2.192:10080/
  1. 輸入用來注冊(cè) runnertoken
$ Please enter the gitlab-ci token for this runner:
yrErncrc8XY_e5-g7bU8
  1. 輸入 runner 的描述痹仙,隨后可在 gitlab 界面中修改
$ Please enter the gitlab-ci description for this runner:
gitlab-ci
  1. 輸入與 runner 綁定的標(biāo)簽(可修改)
$ Please enter the gitlab-ci tags for this runner (comma separated):
gitlab-ci
  1. 選擇 runner 的執(zhí)行方式(推薦docker
 $ Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
 docker

  1. 如果選擇的執(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

激活的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)目保存即可脚乡。

配置runner共享

可持續(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 功能稽莉。

關(guān)閉默認(rèn)

.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

提交代碼
運(yùn)行通過

這樣我們就實(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è)置肘习,保存即可。

身份認(rèn)證

在對(duì) gitlab 倉(cāng)庫(kù)使用 git 命令的時(shí)候坡倔,如果出現(xiàn)提示沒有權(quán)限的話漂佩,多半是因?yàn)?git 混淆了 githubgitlabssh 密鑰,解決方法看下一步罪塔。

github與gitlab共存

假設(shè)我們之前就已經(jīng)生成了 githubssh 密匙:

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基本操作

  1. 拉取倉(cāng)庫(kù)
$ git clone ssh://git@192.168.2.192:10022/jwchan/blog.git
  1. 進(jìn)入倉(cāng)庫(kù)貢獻(xiàn)代碼
$ cd /blog/
  1. 查看倉(cāng)庫(kù)代碼修改狀態(tài)
$ git status
  1. 添加代碼緩沖區(qū)
$ git add .
  1. 提交代碼并注釋
$ git commit -m "[fix]: bug"
  1. 推送代碼到遠(yuǎn)程倉(cāng)庫(kù)
$ git push 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末佃蚜,一起剝皮案震驚了整個(gè)濱河市咳榜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌爽锥,老刑警劉巖涌韩,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異氯夷,居然都是意外死亡臣樱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門腮考,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雇毫,“玉大人,你說我怎么就攤上這事踩蔚∨锓牛” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵馅闽,是天一觀的道長(zhǎng)飘蚯。 經(jīng)常有香客問我馍迄,道長(zhǎng),這世上最難降的妖魔是什么局骤? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任攀圈,我火速辦了婚禮,結(jié)果婚禮上峦甩,老公的妹妹穿的比我還像新娘赘来。我一直安慰自己,他們只是感情好凯傲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布犬辰。 她就那樣靜靜地躺著,像睡著了一般冰单。 火紅的嫁衣襯著肌膚如雪忧风。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天球凰,我揣著相機(jī)與錄音,去河邊找鬼腿宰。 笑死呕诉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吃度。 我是一名探鬼主播甩挫,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼椿每!你這毒婦竟也來了伊者?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤间护,失蹤者是張志新(化名)和其女友劉穎亦渗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汁尺,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡法精,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痴突。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搂蜓。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辽装,靈堂內(nèi)的尸體忽然破棺而出帮碰,到底是詐尸還是另有隱情,我是刑警寧澤拾积,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布殉挽,位于F島的核電站丰涉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏此再。R本人自食惡果不足惜昔搂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望输拇。 院中可真熱鬧摘符,春花似錦、人聲如沸策吠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)猴抹。三九已至带族,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蟀给,已是汗流浹背蝙砌。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跋理,地道東北人择克。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像前普,于是被迫代替她去往敵國(guó)和親肚邢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353