1 gitlab-runner

我们要使用 gitlab-runner 作为执行者,帮助我们在服务器上部署项目。

首先我们需要在服务器上安装好 gitlab-runner。

# 我使用的是 Unbuntu 16.04
# 添加源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash

# 安装
sudo apt install gitlab-runner

更多请参考官方安装方法:Install GitLab Runner using the official GitLab repositories

这里有一个小坑,就是要以你运行项目的用户进行启动 gitlab-runner。

这样有什么好处呢?通常情况下,我们的软件环境变量都是基于用户的,所以基本不会导致环境问题。

# 把 $your_user_name 替换成你的用户名
sudo gitlab-runner install --working-directory /home/$your_user_name -u $your_user_name

注意!在服务器重启后可能导致启动用户的改变,进一步引发诸多问题。解决办法如下:

sudo service gitlab-runner stop
# 直接编辑 service 的启动命令
sudo vi /etc/systemd/system/gitlab-runner.service
# 修改 working-directory 和 user 的 gitlab-runner 为 $your_user_name
sudo systemctl daemon-reload

2 认证

我们需要 gitlab 和服务器上 gitlab-runner 互相认证才行,也就是说 gitlab 在收到部署命令后需要知道该把它转发给谁来执行。

打开 Gitlab,找到你要部署的项目,然后依次点开 Settings –> CI/CD –> Runners,找到左边的 Specific Runners 的 Set up a specific Runner manually。

记录一下序号 2 和序号 3 的值,等下要用。

打开服务器命令行,准备注册 gitlab-runner 服务。

sudo gitlab-runner register
# 输入序号 2 的值,是一个 URL,这个相当于认证的地址
# 输入序号 3 的值,是一个 Token,这里相当于认证的密钥
# 输入描述,随便介绍一下就行
# 输入标签,这个非常重要,因为一个项目中可能有很多服务,在配置文件中特别声明标签,可以错误防止启动其他服务。
# 一般我们用 shell,因此输入 shell 即可


# 查看当前所有运行的服务
sudo gitlab-runner list
# 可以看到下面有我们刚刚注册的服务

3 添加部署脚本

上述工作完成后,开始准备部署脚本。

在项目根目录下添加一个.gitlab-ci.yml 文件。

内容为:

stages:
    - deploy
deploy:
    stage: deploy
    script:
      - cd /$your_workspace
      - git pull
      - build
    only:
      - master
    tags:
      - build
  • script: 写部署脚本
  • only: 指定触发分支
  • tags: 指定触发 runner

更详细配置请参考:通过 .gitlab-ci.yml配置任务

完成后,push 一下吧!

4 其他

1. git 如何保存账号密码

git config --global credential.helper store

下一次输入账号密码后会自动保存到 $HOME 下的 .git-credentials。

2. 出现错误:”cannot open .git/FETCH_HEAD: Permission denied”

  1. 首先检查 .git/FETCH_HEAD 的权限,如果问题请修改。
  2. 其次修改 gitlab-runner 的用户为当前用户,如何修改请查看本文第一部分。
  3. 最后不要忘记重启服务。
sudo service gitlab-runner restart

3. 如果本次提交不想部署怎么办?

在 commit 的提交信息中加入 [ci skip] 即可。