当前位置: 首页 > news >正文

老毛子固件做网站服务器蚌埠网络推广

老毛子固件做网站服务器,蚌埠网络推广,成都网站建设常见问题,中国建设积分商城网站由于公司没有运维,写go服务时各个环境编译部署还是略显麻烦,由于代码管理使用的是 gitlab,所以决定使用 gitlab 自带的 CI/CD 来做自动编译和部署,这样每次提交代码以后就可以自动部署到服务器上了。 gitlab 本身只有 CI/CD 的接…

由于公司没有运维,写go服务时各个环境编译部署还是略显麻烦,由于代码管理使用的是 gitlab,所以决定使用 gitlab 自带的 CI/CD 来做自动编译和部署,这样每次提交代码以后就可以自动部署到服务器上了。

gitlab 本身只有 CI/CD 的接口,真正执行 CI/CD 任务的是 gilab runner,它负责与 gitlab 通信,接受 CI/CD 任务,并交给 Executor 执行,Executor 有7种类型:

  • Docker
  • Shell
  • Kubernetes
  • SSH
  • VirtualBox
  • Parallels
  • Custom

Executor的类型在注册 Runner 的时候确定,比较常用的是 Docker 和 SSH。GitLab,Runner 和 Executor 之间的关系如下图所示(图片来自GitLab官方文档)。
在这里插入图片描述

安装gitlab-runner

gitlab 的CI/CD 任务是通过 runner 来运行的,runner 也是 go 语言实现的。我们需要单独安装 runner,而且可以在任意位置安装。

runner 有 docker 版和可执行程序版,这里我选择的是可执行程序版,安装方式可以参考官网。

我的服务器是 linux,使用官方提供的脚本安装:

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash

可执行程序名叫 gitlab-runner ,被放在 /usr/bin/ 目录下。

注册runner

runner 需要注册到 gitlab,其实就是把 runner 的信息告诉 gitlab,这样 gitlab 才知道把 CI/CD 任务交给谁运行。

注册 runner 的命令是 gitlab-runner register ,回车后会以交互式的方式注册 runner,其中比较重要的几个参数是:

  • executor:运行流水线的环境,也就是前面说的7种 Executor 类型,我使用本地 shell 运行流水线,所以输入 shell

  • url 和 registration-token:runner 和项目是挂钩的,所谓的注册,其实也就是把 runner 和某个项目关联起来。打开项目的 setting→CI/CD,找到 Runners 点击展开,在 Specific runners 栏下面就是我们需要的 url 和 token。如下图所示

    在这里插入图片描述

当然,为每个项目注册一个 runner 也不太合适,我们可以为一个组注册一个 runner,点开某个组,url 和 token 可以在同样的地方找到。这样组内每个项目就都能使用这个 runner 了。此外,也可以给整个 gitlab 注册 runner,但是这需要 root 账号。

另外,同样的 url 和 token 可以注册多个runner,然后通过 tag 来决定项目使用哪个 runner。
注册 runner 和安装 runner 是两个概念,也就是说即便我们只安装了一个 runner,也能注册多个 runner。安装 runner 是下载可执行程序,而注册只是往 gitlab 设置一些配置信息,它和 runner 本身其实没太大关系,注意此时我们的 runner 还没有开始运行。

除了使用交互式注册,还可以使用非交互方式,命令如下:

gitlab-runner register \--non-interactive \--url "https://gitlab.com/" \--registration-token "$PROJECT_REGISTRATION_TOKEN" \--executor "shell" \--description "share-runner" \--maintenance-note "Free-form maintainer notes about this runner" \--tag-list "shell,share" \--run-untagged="true" \--locked="false" \--access-level="not_protected"

注意到 --run-untagged 选项,它表示是否运行在没有标签的的分支上运行流水线。如果没有设置这个参数,也可以在 gitlab 页面上设置。就在我们查看 url 和 registration token 的地方,如果 runner 注册成功的话,可以看到下面的信息:

在这里插入图片描述

点击那个铅笔图标,可以设置 runner,在这里我们也可以勾选 run untagged jobs,如下图所示。

在这里插入图片描述

上面我的 runner 前面小圆点是绿色的,那是因为我的 runner 已经运行起来了。

注册完 runner 会生成配置文件 /etc/gitlab-runner/config.toml ,可以打开查看,我们配置的信息都在里面。

启动runner

在启动 runner 之前,我们可以先创建一个专门的用户来运行 runner,比如:

useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

这里我们添加的用户叫 gitlab-runner ,你也可以使用被的用户,甚至 root ,或者为了方便部署,使用部署的用户。
然后安装并启动 gitlab 服务:

gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
gitlab-runner start

所谓安装就是设置为系统服务,它会在 /etc/systemd/system/ 目录下生成 gitlab-runner.service 文件。
其他命令:

  • gitlab-runner stop 停止 gitlab-runner 服务。
  • gitlab-runner start 启动 gitlab-runner 服务。
  • gitlab-runner restart 重启 gitlab-runner 服务。
  • gitlab-runner status 查看 gitlab-runner 服务状态。
  • gitlab-runner uninstall 卸载 gitlab-runner 服务。
  • gitlab-runner list 列出所有注册的 runner。

编写流水线

我们通过在项目根目录下创建一个叫 .gitlab-ci.yml 的文件来定义流水线,也就是 CI/CD 如何执行。

流水线分为阶段和作业,阶段通过 stages 关键字定义,阶段是作业的容器,每个阶段内可以定义多个作业。阶段之间是串行执行的,阶段内的多个作业是并行执行的。

关于流水线的编写,可以参看官方文档,或者《GitLab CI/CD 从入门到实战》这本书。当然 gitlab 官方也提供了很多示例,各种语言都有,如果不知到如何开始,可以参考官方示例。

基本结构如下:

stages: # 定义阶段- test    # 阶段名- build   # 阶段名- deploy  # 阶段名unit_test:    # 作业名stage: test # 作业属于 test 阶段script:     # 作业执行的命令- echo "unit test"compile:        # 作业名stage: build  # 作业属于 build 阶段script:       # 作业执行的命令- echo "build"deploy_test:     # 作业名stage: deploy  # 作业属于 deploy 阶段secipt:        # 作业执行的命令- echo "deploy test"

我用的是 go 语言,使用 shell 运行和部署,只有测试环境和正式环境。

default:interruptible: true # 允许打断流水线variables:GOBIN: "/usr/local/go/bin/go"GOINSECURE: git.i****d.comGOPRIVATE: git.i****d.comGOPROXY: https://goproxy.cn,directimage: golang:lateststages:- test- build- deployformat:stage: testscript:- echo "单元测试"- pwd- echo ~- echo $CI_COMMIT_BRANCH- echo $CI_DEFAULT_BRANCE- export GOINSECURE=$GOINSECURE- export GOPRIVATE=$GOPRIVATE- export GOPROXY=$GOPROXY- $GOBIN version- $GOBIN mod tidy- $GOBIN test -v 2>&1 | go-junit-report -set-exit-code > report.xmlartifacts:when: alwaysreports:junit: report.xmlcompile:stage: buildscript:- echo "编译"- pwd- echo ~- export GOINSECURE=$GOINSECURE- export GOPRIVATE=$GOPRIVATE- export GOPROXY=$GOPROXY- $GOBIN version- $GOBIN mod tidy- mkdir -p _build- $GOBIN build -o _build/$CI_PROJECT_NAME main.goartifacts:expire_in: 1 hourpaths:- _build# 部署生产环境(仅release分支)
deploy_prod:stage: deployvariables:SERVER_IP: "1**.**.**.*"script: - echo "部署生产环境"- ssh z**j@$SERVER_IP mkdir -p /data/z**j/$CI_PROJECT_NAME # 创建项目文件夹- ssh z**j@$SERVER_IP mkdir -p /data/z**j/$CI_PROJECT_NAME/config # 创建配置文件夹- ssh z**j@$SERVER_IP "cd /data/z**j/$CI_PROJECT_NAME/ && [ -f run.sh ] && ./run.sh stop || :" # 停止服务- scp _build/$CI_PROJECT_NAME z**j@$SERVER_IP:/data/z**j/$CI_PROJECT_NAME/ # 拷贝可执行文件- scp run.sh z**j@$SERVER_IP:/data/z**j/$CI_PROJECT_NAME/ # 拷贝run.sh- scp config/application.prod.toml z**j@$SERVER_IP:/data/z**j/$CI_PROJECT_NAME/config/application.toml # 拷贝配置文件- ssh z**j@$SERVER_IP "cd /data/z**j/$CI_PROJECT_NAME/ && chmod +x run.sh"- ssh z**j@$SERVER_IP "cd /data/z**j/$CI_PROJECT_NAME/ && ./run.sh start" # 重启服务only:- release # 仅release分支部署到生产环境environment: production# 部署测试环境(非main和release分支)
deplog_test:stage: deployvariables:SERVER_IP: "1**.**.**.*"script:- echo "部署测试环境"- ssh z**j@$SERVER_IP mkdir -p /data/z**j/$CI_PROJECT_NAME # 创建项目文件夹- ssh z**j@$SERVER_IP mkdir -p /data/z**j/$CI_PROJECT_NAME/config # 创建配置文件夹- ssh z**j@$SERVER_IP "cd /data/z**j/$CI_PROJECT_NAME/ && [ -f run.sh ] && ./run.sh stop || :" # 停止服务- scp _build/$CI_PROJECT_NAME z**j@$SERVER_IP:/data/z**j/$CI_PROJECT_NAME/ # 拷贝可执行文件- scp run.sh z**j@$SERVER_IP:/data/z**j/$CI_PROJECT_NAME/ # 拷贝run.sh- scp config/application.test.toml z**j@$SERVER_IP:/data/z**j/$CI_PROJECT_NAME/config/application.toml # 拷贝配置文件- ssh z**j@$SERVER_IP "cd /data/z**j/$CI_PROJECT_NAME/ && chmod +x run.sh"- ssh z**j@$SERVER_IP "cd /data/z**j/$CI_PROJECT_NAME/ && ./run.sh start" # 重启服务except:- $CI_DEFAULT_BRANCH- releaseenvironment: test

多环境部署通过不同的分支来实现, .gitlab-ci.yml 中的 environment 关键字只是对部署任务做一个记录和分类,方便管理和查询部署任务,并无实际区分部署环境的功能。

http://www.tj-hxxt.cn/news/34106.html

相关文章:

  • 校园网站群建设线上宣传渠道和宣传方式
  • 在线手机客服系统seo博客推广
  • 专业做医院网站建设徐州网站设计
  • 网站功能简介seo搜索引擎优化试题
  • 自己电脑做网站域名备案域名访问网站入口
  • 山西网站推广公司个人网站制作
  • 有什么做兼职的好的网站吗杭州网络推广
  • 开一家网站建设公司要多少钱培训网站制作
  • 网络工程毕设做网站百度云盘资源共享链接群组链接
  • 大屏网站做响应热搜在哪里可以看
  • 做的比较好的旅行网站百度地图导航
  • 建设雅马哈电动车官方网站网址域名ip查询
  • 简要说明网站建设的基本流程搜狗网页版入口
  • 2网站建设公司域名查询站长之家
  • 阳江做网站seo网站推广找客户
  • 做门窗投标网站游戏推广代理平台
  • 农产品电子商务网站建设十大微商推广平台
  • wordpress如何删除你好和设置菜单东莞关键词seo优化
  • wordpress 自助广告插件discuz论坛seo设置
  • 建网站视频教程全域seo
  • app开发公司哪家好 求推荐荆州seo推广
  • 拼多多网站建设的目的2022最新时事新闻及点评
  • 在哪家网站上可以找到加工活做徐州seo推广优化
  • 广州网站优化网站建设大数据营销名词解释
  • 网站维护需要多长时间百度搜索引擎优化公司哪家强
  • 龙岗区住房和建设局官方网站windows7优化大师下载
  • 新乡营销型网站建设一份完整的营销策划书
  • 织梦网站2个模型百度推广账号登陆入口
  • 建站的方式有哪些免费友情链接网
  • 门户网站建设情况总结广州新一期lpr