gitlab-runner 是与 GitLab CI / CD一起使用的应用程序,用于自动构建、测试、部署等操作。本文主要介绍如何使用 gitlab-runner 来实现项目的自动化部署,并且分两种情况:安装在本机与服务器。

将 gitlab-runner 安装在本机(Mac)

sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64"sudo chmod +x /usr/local/bin/gitlab-runner

启动

cd ~
gitlab-runner install
gitlab-runner start

注册

gitlab-runner register

在终端输入上面的命令后会弹出一个交互语句,具体如下图所示:

总共需要交互五次:

  1. 输入 gitlab 项目的 URL
  2. 要进行自动部署的项目 token
  3. 输入描述
  4. 输入 tag,如果没有特殊要求,建议为空。
  5. 执行脚本的运行器,这里输入 shell

上面第一、第二项的 URL 和 token 请按照下面的指示获取:

在 gitlab 上打开项目 -> settings -> CI/CD -> Runners settings

选择 Runners settings 后就能看到下图,在 Specific Runners 里面有所需的 URL 和 token。

创建成功后还需要运行

gitlab-runner start

进行激活,看到 gitlab-runner 左边的圆点变成绿色就代表激活了。

注意事项:创建的 gitlab-runner 是运行在本机上的,如果你的电脑关机了,其他人推送代码就没有 gitlab-runner 去执行自动部署任务。所以建议项目相关人员都创建一个 gitlab-runner。

.gitlab-ci.yml 文件

创建 gitlab-runner 后,还需要在项目根目录下创建一个 .gitlab-ci.yml 文件。这样只要执行 push 操作,gitlab 就会自动调用 gitlab-runner 去执行 .gitlab-ci.yml 文件。下面来看一个简单的示例:

stages: # 总共有两个阶段,分别是 build 和 deploy。- build- deploy# 构建阶段
build: # 这是一个 job,名称为 buildstage: buildscript:- npm install- npm run build:h5-${CI_COMMIT_REF_NAME} # CI_COMMIT_REF_NAME 分支名称- cp -a dist/build/h5/ ${CI_PROJECT_NAME} # 这行命令是将打包后的文件,复制到项目根目录下,并用项目名称重新全名。CI_PROJECT_NAME是一个变量,即项目名称only: - dev # dev 表示只有 dev 分支推送的时候才触发这个 job- testartifacts: # 将打包后的文件上传到 GitLab,可以在其他地方使用。name: ${CI_PROJECT_NAME}paths:- ${CI_PROJECT_NAME}# 部署阶段
deploy_dev: # 这是一个 job,名称为 deploy_devstage: deployscript:- ls- scp -r ${CI_PROJECT_NAME} xxx@1.2.7.135:/usr/local/nginx/html/ # 将上一阶段上传的文件传到 nginx 服务器。这里需要写 nginx 服务器的用户名和地址,为了安全需要,这里是乱填的only: - devdeploy_test:stage: deployscript:- ls- scp -r ${CI_PROJECT_NAME} xxx@1.2.6.6:/usr/local/nginx/html/only: - test

这个 yml 脚本做了两件事情:build 和 deploy,也就是构建项目,然后将构建的文件发部到 nginx 服务器。

stages

stages 表示这个脚本总共有几个阶段,上面写了 build 和 deploy。脚本将会按照顺序串行的执行不同的阶段,也就是先执行 build 再执行 deploy。

job

每个 job 都有一个 stage 属性,表示这是什么阶段。如果有多个同阶段的 job,则会并行执行。

script

script 里面的语句就是要执行的脚本。

only

only 表示在符合条件的情况执行这个 job。

还有更多的 yml 命令可以看一下官方文档。

部署

将文件发布到 nginx,是需要密码的,如果你不知道密码,可以找运维要。通常情况下,每次将文件发布到 nginx 都需要账号密码。为了减少这种繁琐的操作,可以使用 ssh-keygen -t rsa 生成一对密钥,然后将公钥上传到服务器(如果你不确定电脑上有没有,可以在终端上执行 cd ~/.sshls 看一下有没有 id_rsa.pub 文件)。这样每次传文件都不需要密码了。

如果没有密钥对,在执行 ssh-keygen -t rsa 命令后不停回车就可以了。

将公钥上传到服务器

执行下面的命令将你的公钥上传到服务器:

scp ~/.ssh/id_rsa.pub user@1.2.6.6:~

然后通过 ssh 远程登录服务器:

ssh user@1.2.6.6

以上两个操作都需要密码。登录服务器后再次执行:

cd ~
cat id_rsa.pub >> .ssh/authorized_keys

将公钥的内容追加到 authorized_keys 文件,这时再次部署就不需要带上密码了。

gitlab-runner 与服务器是同一机器

安装 gitlab-runner

# For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bashyum install gitlab-runner
# 注册要加 sudo
sudo gitlab-runner register

安装 node

# 下载
wget https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.gz
# 解压
tar -zxvf node-v14.16.1-linux-x64.tar.gz
#重命名并移动到 /usr/local/
mv node-v14.16.1-linux-x64 /usr/local/node
# 设置系统路径
echo 'export PATH=$PATH:/usr/local/node/bin' >> /etc/profile
source /etc/profile
# 测试
node -v
npm -v

如果提示报错,则先卸载 node,重新安装一遍。

/usr/local/node/lib/node_modules/npm/bin/npm-cli.js:87let notifier = require('update-notifier')({pkg})^^^^^^^^
SyntaxError: Unexpected identifierat Module._compile (module.js:439:25)at Object.Module._extensions..js (module.js:474:10)at Module.load (module.js:356:32)at Function.Module._load (module.js:312:12)at Function.Module.runMain (module.js:497:10)at startup (node.js:119:16)at node.js:945:3
yum remove nodejs npm -y

修改 nginx 访问权限

 chmod -R 777 /usr/local/nginx/html

.gitlab-ci.yml 文件

与安装在本机上的脚本差不多,只是部署阶段的命令有所不同:

- scp -r ${CI_PROJECT_NAME} xxx@1.2.7.135:/usr/local/nginx/html/
# 将上面的命令改成下面的命令
- cp -fr ${CI_PROJECT_NAME} /usr/local/nginx/html/

gitlab 自动化部署相关推荐

  1. Jenkins集成GitLab自动化部署

    一.申请一台linux系统 二.搭建docker环境 参考:Install docker 三.搭建Jenkins环境 参考:Install Jenkins 使用docker搭建完Jenkins环境后, ...

  2. Jenkins + Generic Webhook Trigger + GitLab自动化部署流程配置

    Jenkins 插件安装与配置 登录Jenkis 进入插件管理并下载插件Generic Webhook Trigger jenkins系统配置中给GitLab授权 进入系统配置 找到并启用gitlab ...

  3. jenkins新版本+gitlab配置自动化部署报错Hook executed successfully but returned HTTP 403,没有CSRF选项

    问题: 配置jenkins+gitlab自动化部署报错: 错误内容: Hook executed successfully but returned HTTP 403 <html> < ...

  4. gitlab与jenkins的自动化部署(通过webhook与ansible)

    gitlab与jenkins的自动化部署(通过webhook与ansilble) 1.部署介绍 gitlab服务器:192.168.1.49:80 jenkins服务器:192.168.1.49:81 ...

  5. 基于 Docker 和 GitLab 的前端自动化部署实践笔记

    基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...

  6. gitlab ci 自动化部署_前端gitLab加jenkins自动化构建和部署,以及服务器常用的linux命令行操作,免密登录...

    常用的linux命令行操作 将项目部署到服务器后,需要查看文件是否已经部署成功,已经对文件进行增删改查操作,就需要用到命令行操作,常用操作如下: ll 罗列出当前文件或目录的详细信息,含有时间.读写权 ...

  7. gogs可以自动化部署吗_Git-WebHook 自动化部署工具 - 支持Github / GitLab / Gogs / GitOsc...

    一.背景 我个人是在线这边的测试开发,主要工作是开发一些工具,辅助测试和开发,规范流程等等,这些内网的工具,一般不存在什么并发,性能瓶颈,上线部署其实非常简单,在需要更新上线的时候,提交最新代码到 r ...

  8. 使用GitLab CI和Docker进行容器应用自动化部署

    容器 Docker 越来越受开发者和运维人员的喜爱,更是作为实践 DevOps 的一个中要工具.同时 Gitlab 提供了免费的代码管理服务,其 gitlab-ci 更是提供了强大的自动化 CI/CD ...

  9. 基于Jenkins+Gitlab的自动化部署实战

    故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称"人肉部署",这简直是无 ...

最新文章

  1. 2009下半年网络管理员试题及答案
  2. 产品工作中保持饥饿感,保持拒绝90%以上的伪需求你就不会错过下一个微信
  3. 2009网络视频监控业务分析及市场发展研究报告
  4. 腾讯的敌人只有傲慢的自己
  5. 自然语言处理——词嵌入
  6. Python3 casefold() 方法
  7. 数值计算原理_JavaScript策略设计时数值计算精度问题解决方案
  8. jdk8官方下载路径
  9. 11 wifi6速率_使用高端的WIFI6路由器是什么体验?Orbi RBK752
  10. 湘潭大学java实验
  11. 企企通持续助力全球管道预制先行者「迈科管道」,二期项目逐步启动
  12. 中国石油大学(北京)本科毕业论文答辩和论文选题PPT模板
  13. 安的广厦千万间 天下寒士尽欢颜
  14. The first day。
  15. C语言实现统计整数出现次数
  16. 测试资源:63个国外优秀测试站点链接
  17. 智慧风电:数字孪生 3D 风机智能设备运维
  18. Saber软件和其它软件的接口
  19. 三星电子 CEO 敲定,三人联席架构继续,李尚勋将任董事会主席
  20. asp.net 中 HttpRequest 中跟URL path 有关的方法和属性 (摘自用怪异的眼光去研究blog)

热门文章

  1. 知识管理——企业数字化转型的新挑战
  2. undertow 怎么创建线程_SpringBoot使用Undertow做服务器
  3. [转]秀下我的瓦伦西亚
  4. 深入理解前馈神经网络
  5. 11月4日,壳乐派crowpi2编程学习机将于淘宝众筹平台开启国内首发!
  6. 高端小米,雷军求“稳”
  7. C++ 实现2048小游戏
  8. 动态规划求解01背包问题
  9. Linux下去掉^M的方法
  10. 新萝卜家园GHOST XP Sp3装机版V2012.10下载