之前想折腾 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 给下载回来。
wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
然后再稍稍修改下,修改完下面的这些地方,基本就可以启动了。如果没有什么额外需求的话。
时区
- TZ=Asia/Kolkata #默认 - GITLAB_TIMEZONE=Kolkata #默认 - TZ=Asia/Shanghai - GITLAB_TIMEZONE=Asia/Shanghai
主机名
- GITLAB_HOST=localhost # 这个跟拉取时候的链接有关。可以通过配置本地DNS,弄出个域名来。 ssh://git@localhost/root/myblog.git
三个 KEY
使用
pwgen -Bsv1 64
生成即可- 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
root 密码以及邮箱
root 密码是登入管理员账号时候用的密码,用户名为
root
- GITLAB_ROOT_PASSWORD= - GITLAB_ROOT_EMAIL=
直接
docker-compose up
启动
安装 gitlab-runner
命令
gitlab-runner 的命令跟在 docker 时候的命令是基本差不多的。就是在执行命令的最后加下就是了。
gitlab-runner [Runner command and options...] docker run [chosen docker options...] gitlab/gitlab-runner [Runner command and options...]
docker run --rm -t -i gitlab/gitlab-runner --help NAME: gitlab-runner - a GitLab Runner USAGE: gitlab-runner [global options] command [command options] [arguments...] VERSION: 10.7.0 (7c273476) (...)
先
docker run
docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest
然后根据 gitlab 的 Runner 页面的提示来注册
docker exec -it gitlab-runner gitlab-ci-multi-runner register
根据提示输入就行了
编写.gitlab-ci.yml
这个文件放到项目的根目录,同时在 Auto DevOps
里面启用即可。
然后每次push
就会自己进行一系列操作。
下面的相关参数说明在这里。
当然也有官方的英文。
stages:
- deploy
- deploy-cdn
cache:
paths:
- node_modules/
hexo-generate:
image: daocloud.io/zsnmwy/hexo-alpine-gulp
stage: deploy
script:
- ping "$HOST_IP" -c 2
- rm -rf public
- hexo clean
- source /etc/profile
- ls
- whoami
- pwd
- node -v
- npm install
- hexo clean
- hexo g
- source /etc/profile
- sh
- gulp
- ls -la
- ping "$HOST_IP" -c 2
- rsync -avrzPS --delete -e "sshpass -p $HOST_PASSWORD ssh -o StrictHostKeyChecking=no -p 22" --progress ./public/ ubuntu@"$HOST_IP":/home/ubuntu/www/blog/
tags:
- deploy
qshell-cdn:
image: debian:9.5-slim
stage: deploy-cdn
script:
- chmod a+x qshell
- mv qshell /usr/local/bin
- bash
- qshell account "$QSEHLL_AK" "$QSEHLL_SK"
- qshell account
- qshell cdnrefresh -dirs url.txt
tags:
- deploy
```