Back
Featured image of post 使用gitlab CI/CD 自动化部署hexo

使用gitlab CI/CD 自动化部署hexo

之前想折腾 github 的 webhook 来实现自动部署,最后还是发现 gitlab 的 CI/CD 好使。

现在都是容器的时代,所以本文也是使用 docker 容器来部署。

可以免掉很多不必要的坑。

我也是刚刚才接触 gitlab 的 CI,还存在挺多疑惑的。

GitLab 文档的翻译,有需要的可以看看。

前言

现在的内存需求,起步大概需要3GB。如果你的机子低于这个数,请谨慎安装gitlab

很可能因为内存的原因导致安装失败或者使用的时候过于卡顿。

而且官方是建议使用Docker而不是Docker Toolbox,并且对于 Windows 那边是没有官方支持的。

安装 gitlab

对于Gitlab的安装,在dockerhub上面是有官方支持的。但是我好像是没有找到现成全套的docker-compose

官方那边好像只有web的,而postgresqlredis都没有。

所以我觉得打算使用这个项目的 docker-compose.yml

这个直接把需要用到的webpostgresqlredis都有了。

  • 下载 先把这个 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 页面的提示来注册

    jpg

    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
    ```
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus