编写.gitlab-ci.yml 在项目根目录下编写.gitlab-ci.yml这样在push之后,gitlab-ci就会自动识别来解析了。
stages: - deploy deploy: stage: deploy script: - deploy Example_Group Example_Project only: - master tags: - shell |
这里我们只有一个stage是deploy。only指定了只有在master分支push的时候才会被执行。tags是shell,对应了刚才注册runner的时候的tags。 最重要的script部分deploy Example_Group Example_Project,这里是一条shell指令,为了方便通用性,deploy是我在服务器上编写的一个脚本,传入参数是Example_Group Example_Project分别是项目组名和项目名。执行这一条指令就能够自动部署到/xxx/Example_Group/Example_Project的服务器目录下。那么随便什么项目都用这个格式去套就好了,这样新项目的自动部署也不需要登录到服务器上去修改了。 编写deploy脚本 在gitlab-runner的~/.local/bin/目录下新建deploy文件
$ su gitlab-runner $ mkdir ~/.local/bin $ cd ~/.local/bin $ touch deploy
并编辑成如下内容
#!/bin/bash if [ $# -ne 2 ] then echo "arguments error!" exit 1 else deploy_path="/var/www/$1/$2" if [ ! -d "$deploy_path" ] then git clone $project_path $deploy_path else cd $deploy_path git pull fi fi |
这个脚本的大意就是,如果目录不存在,那么就git clone一个,如果存在了就git pull一个到指定目录下。这样就达到了自动部署的目的。记得修改里面的 gitlab.example.com的地址哦。 加上执行权限,然后把这个脚本放在gitlab-runner的~/.local/bin下就可以生效了(为了不用写难看的./deploy) $ chmod +x ~/.local/bin/deploy 并且把/.local/bin加到$PATH路径中(用户执行命令时候能够查找到这个目录),只要在/.profile末尾加入这一句话 PATH="$HOME/.local/bin  PATH" 配置ssh登录 上面的deploy脚本是用ssh方式来和gitlab联系的。所以要给gitlab-runner这个用户配置一个gitlab上能ssh的用户。首先在gitlab-runner下生成一个密钥对 $ mkdir ~/.ssh $ cd ~/.ssh $ ssh-keygen # 提示输入一直按回车默认就可以了 $ cat id_rsa.pub 用cat查看公钥,然后复制这一串公钥。在gitlab中新建一个账号比如叫gitlab-runner,把这个账号添加到你的项目成员中,然后在这个账号的user_profile里面,把公钥粘贴进去就好了。总之就是把这个账号配置成能用ssh登录的。 移交部署目录权限 有些同学可能说脚本执行失败了,有一个原因是/var/example的所有者是root,gitlab-runner并没有权限新建文件。所以我们把/var/example目录的所有者交给gitlab-runner
$ chown -hR gitlab-runner:gitlab-runner /var/www 如果还是不成功,可以在服务器上手工deploy XX XX一次,第一次访问这个服务器的时候,有个命令行提示是要把sign添加进已知服务器列表,需要手工输入个yes。如果在服务器上能够正常deploy,那么 这样就大功告成了。 尝试一下git push到相应项目,然后到服务器上的目录看一下是不是有了呢。 |