【每日一记11】+第1天:GitLab通过gitlab-ci/gitlab-runner实现自动话发布(4)
  

marco 1000

{{ttag.title}}
  • 编写.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
                project_path="git@gitlab.example.com:"$1/$2".git"
                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/binPATH"
配置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到相应项目,然后到服务器上的目录看一下是不是有了呢。

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

gqce 发表于 2020-9-7 15:02
  
感谢分享
发表新帖
热门标签
全部标签>
【 社区to talk】
每日一问
新版本体验
高手请过招
标准化排查
社区新周刊
产品连连看
GIF动图学习
功能体验
纪元平台
平台使用
信服课堂视频
技术笔记
网络基础知识
安全效果
安装部署配置
运维工具
排障笔记本
答题自测
解决方案
VPN 对接
2023技术争霸赛专题
云化安全能力
关键解决方案
专家问答
技术圆桌
设备维护
存储
迁移
秒懂零信任
文档捉虫
华北区交付直播
每周精选
西北区每日一问
产品解析
畅聊IT
在线直播
MVP
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
用户认证
原创分享
sangfor周刊
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
资源访问
地址转换
虚拟机
产品预警公告
玩转零信任
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
卧龙计划
华北区拉练
天逸直播
以战代练
技术晨报
技术盲盒
山东区技术晨报
齐鲁TV
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
升级&主动服务
高频问题集锦
POC测试案例
全能先锋系列
专家说
热门活动
产品动态
行业实践

本版版主

461
248
13

发帖

粉丝

关注

本版达人

feeling

本周分享达人

新手29676...

本周提问达人