之前想折腾 github 的 webhook 来实现自动部署,最后还是发现 gitlab 的 CI/CD 好使。
现在都是容器的时代,所以本文也是使用 docker 容器来部署。
可以免掉很多不必要的坑。
我也是刚刚才接触 gitlab 的 CI,还存在挺多疑惑的。
GitLab 文档的翻译,有需要的可以看看。
前言
现在的内存需求,起步大概需要3GB
。如果你的机子低于这个数,请谨慎安装gitlab
。
很可能因为内存的原因导致安装失败或者使用的时候过于卡顿。
而且官方是建议使用Docker
而不是Docker Toolbox
,并且对于 Windows 那边是没有官方支持的。
安装 gitlab
对于Gitlab
的安装,在dockerhub
上面是有官方支持的。但是我好像是没有找到现成全套的docker-compose
。
官方那边好像只有web的,而postgresql
和redis
都没有。
所以我觉得打算使用这个项目的 docker-compose.yml
这个直接把需要用到的web
、postgresql
和redis
都有了。
下载 先把这个 docker-compose 给下载回来。
1wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
然后再稍稍修改下,修改完下面的这些地方,基本就可以启动了。如果没有什么额外需求的话。
时区
1- TZ=Asia/Kolkata #默认 2- GITLAB_TIMEZONE=Kolkata #默认 3 4- TZ=Asia/Shanghai 5- GITLAB_TIMEZONE=Asia/Shanghai
主机名
1- GITLAB_HOST=localhost # 这个跟拉取时候的链接有关。可以通过配置本地DNS,弄出个域名来。 2 3ssh://git@localhost/root/myblog.git
三个 KEY
使用
pwgen -Bsv1 64
生成即可1- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string 2- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string 3- GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string
root 密码以及邮箱
root 密码是登入管理员账号时候用的密码,用户名为
root
1- GITLAB_ROOT_PASSWORD= 2- GITLAB_ROOT_EMAIL=
直接
docker-compose up
启动
安装 gitlab-runner
命令
gitlab-runner 的命令跟在 docker 时候的命令是基本差不多的。就是在执行命令的最后加下就是了。
1 2gitlab-runner [Runner command and options...] 3 4docker run [chosen docker options...] gitlab/gitlab-runner [Runner command and options...]
1docker run --rm -t -i gitlab/gitlab-runner --help 2 3NAME: 4 gitlab-runner - a GitLab Runner 5 6USAGE: 7 gitlab-runner [global options] command [command options] [arguments...] 8 9VERSION: 10 10.7.0 (7c273476) 11 12 (...)
先
docker run
1docker run -d --name gitlab-runner --restart always \ 2-v /srv/gitlab-runner/config:/etc/gitlab-runner \ 3-v /var/run/docker.sock:/var/run/docker.sock \ 4gitlab/gitlab-runner:latest
然后根据 gitlab 的 Runner 页面的提示来注册
docker exec -it gitlab-runner gitlab-ci-multi-runner register
根据提示输入就行了
编写.gitlab-ci.yml
这个文件放到项目的根目录,同时在 Auto DevOps
里面启用即可。
然后每次push
就会自己进行一系列操作。
下面的相关参数说明在这里。
当然也有官方的英文。
1stages:
2- deploy
3- deploy-cdn
4
5cache:
6paths:
7 - node_modules/
8
9hexo-generate:
10image: daocloud.io/zsnmwy/hexo-alpine-gulp
11stage: deploy
12script:
13 - ping "$HOST_IP" -c 2
14 - rm -rf public
15 - hexo clean
16 - source /etc/profile
17 - ls
18 - whoami
19 - pwd
20 - node -v
21 - npm install
22 - hexo clean
23 - hexo g
24 - source /etc/profile
25 - sh
26 - gulp
27 - ls -la
28 - ping "$HOST_IP" -c 2
29 - rsync -avrzPS --delete -e "sshpass -p $HOST_PASSWORD ssh -o StrictHostKeyChecking=no -p 22" --progress ./public/ ubuntu@"$HOST_IP":/home/ubuntu/www/blog/
30
31tags:
32 - deploy
33
34qshell-cdn:
35image: debian:9.5-slim
36stage: deploy-cdn
37script:
38 - chmod a+x qshell
39 - mv qshell /usr/local/bin
40 - bash
41 - qshell account "$QSEHLL_AK" "$QSEHLL_SK"
42 - qshell account
43 - qshell cdnrefresh -dirs url.txt
44tags:
45 - deploy
46 ```