Linux下应用GitLab的runner来主动部署Go我的项目
在我的项目开发过程中,咱们常常会应用GitLab的CI/CD来主动部署我的项目,明天就让咱们来实现一个在Linux下启用GItLab的CI/CD来实现Go我的项目的主动部署。
咱们须要在GitLab上有一个我的项目,这里就不做演示了,咱们间接开始先装置runners。
1 装置runners
GitLab有三种Runner,别离是:
- Shared runners are available to all groups and projects in a GitLab instance.
- Group runners are available to all projects and subgroups in a group.
- Specific runners are associated with specific projects. Typically, specific runners are used for one project at a time.
了解来说的话,就是:
- Shared runners是所有组和我的项目都能够应用共享流道,管理员来操作,通常只用在小团队中,GitLab中,默认是没有的。
- Group runners比拟罕用,能够反对团队内多个我的项目共享。 可复用的Runner,能够同时反对一类我的项目的CI,进步资源复用率。
- Specific runners则是与特定的我的项目关联,不能共享。 而且,对集体我的项目来说,没有Group这一层,应用Specific runners是比拟适合的。
Runner是由运行在服务器上的守护过程来治理,一个守护过程能够治理多个runner,多个runner之间是依据token和url,注册到指定的GitLab上。
上面的教程也是基于Specific runners来做演示,首先咱们先下载GitLab的runner,咱们先进入GitLab的runner下载页面:https://docs.gitlab.com/runne...,能够看到官网的装置教程。
我当初应用的机器是一台腾讯云的Linux服务器,因而我须要抉择Install on GNU/Linux,如下图所示:
如果大家应用的是别的零碎,能够抉择对应的下载方式即可。
而后能够依据提醒进入下载页面,也可间接看上面的例子,下载对应的安装包,演示的机器应用的是Centos,抉择上面的例子即可。
这时候会发现,这个命令里有一个${arch}的参数,咱们看正文:
# Replace ${arch} with any of the supported architectures, e.g. amd64, arm, arm64# A full list of architectures can be found here https://gitlab-runner-downloads.s3.amazonaws.com/latest/index.htmlcurl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_${arch}.rpm"
${arch}能够替换为任何反对的体系架构,也就是咱们须要改成这个样子:
curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpm"curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_arm64.rpm"curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_arm.rpm"
这个也要依据本人理论的机器的状况来做抉择,我以后应用的是amd64。咱们也能够应用uname -m 命令来查看机器的架构,如:
我的服务器是x86架构的,用m1的Mac查问,返回如下:
而后咱们也能够应用本人的电脑间接应用浏览器拜访curl的地址,查看链接是否失常,是否失常下载。
测试过后,间接在服务器上的终端里应用下面列出的curl命令来下载对应的rpm包。
因为服务器上下载较慢,我间接应用浏览器下载的,截图里做个示范。
而后应用rpm命令装置即可
rpm -ivh gitlab-runner_<arch>.rpm
装置gitlab-runner须要有git的环境,如果没有须要自行装置一下,Centos能够间接应用yum装置。
装置实现后,应用命令
gitlab-runner -v
查看版本,显示如下,阐明装置胜利。
2 在GitLab里获取token
在runner装置实现之后,咱们回到GitLab的我的项目的Settings页面,进入CI/CD后,点开Runners里的Expand按钮,如图所示:
点开后会看到 Specific runners用来注册的URL和token,这个咱们在注册runners的时候须要填写。
持续回到服务器里,应用gitlab-runner开始注册
[root@centos software]# gitlab-runner registerRuntime platform arch=amd64 os=linux pid=2502549 revision=e0218c92 version=14.3.2Running in system-mode. Enter the GitLab instance URL (for example, https://gitlab.com/):https://gitlab.com/Enter the registration token:NzE3jDif-xxxxxxxEnter a description for the runner:[centos]: runner1Enter tags for the runner (comma-separated):Registering runner... succeeded runner=NzE3jDifEnter an executor: custom, docker, parallels, docker+machine, docker-ssh+machine, kubernetes, docker-ssh, shell, ssh, virtualbox:shellRunner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
几个参数阐明:
- GitLab instance URL:写下面截图里CI/CD里注册用的那个地址;
- token:写下面截图里CI/CD里注册用的那个token
- description:填写相干形容
- tags:选填,也可在GitLab的网页上批改,和gitlab的.gitlab-ci.yml文件里配置的tags无关;比方对一个runner设置了某个标签后,对应的Job必须要设置这个标签,能力在这个runner上执行。
- executor:间接就选shell吧,应用shell命令,简略无效。
当咱们注册胜利后,就能够在GitLab的界面看到这个runner。
这样,一个runner就注册胜利了。
3 写.gitlab-ci.yml文件,实现主动部署
到目前为止,咱们曾经胜利装置了runner和实现了runner的注册,接写来,模仿一个简略的.gitlab-ci.yml文件,来实现Go我的项目的主动部署。
在job运行时,咱们从新打包的过程,须要重启,这时候咱们能够思考应用守护过程来启动我的项目,须要如何操作呢,首先在/etc/systemd/system目录下新建一个配置文件,
vim /etc/systemd/system/runner1.service
而后粘贴如下代码
[Unit]After=network.target[Service]User=rootGroup=rootExecStart=/opt/project/runner1/runner1Type=simple[Install]WantedBy=multi-user.target
- User和Group要填写对应的用户和组;
- ExecStart,是打包后的可执行文件的目录
.gitlab-ci.yml文件我给出了一个示例,具体的语法能够去参考GitLab的官网文档。
image: golangstages: - mainmain: stage: main script: - echo "Start to deploy!" - echo ${CI_PROJECT_DIR} - cd ${CI_PROJECT_DIR} # 设置go代理 - go env -w GO111MODULE=on - go env -w GOPROXY=https://goproxy.cn,direct # 打包到指定目录 - go build -o /opt/project/runner1/runner1 main.go # 重启过程 - systemctl restart runner1.service tags: - master only: - main
yml文件里的tags就是在注册runner的时候填写的tags,方才咱们留空了,是因为能够在GitLab的网页端进行批改,在网页端对应的runner处,点击编辑,进去后就能够批改了。
而后批改成在yml文件里配置的就能够了。
4 补充:gitlab-runner权限的问题
其实咱们应用了systemctl来守护过程,也会遇到一个问题就是,gitlab-runner在执行的时候,应用的是gitlab-runner用户,因而会导致权限有余,而们能够批改gitlab-runner的默认用户来解决这个问题,
vim /etc/systemd/system/gitlab-runner.service
而后将--user的参数从gitlab-runner改成root即可。
/usr/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--user" "root"
最初代码push下来之后,就能够在GitLab网页端的CI/CD里的jobs里看到job的状态了。
这样就实现了一个根底的CI/CD的流水线部署了。
如有问题,欢送留言,祝大家工作顺利~