【Tool】Gitlab CI Runner 配置过程中的若干问题( yml 中因 host key 问题无法执行 git clone、yml invalid、backspace 键不能用 等)

最近工作中希望能实现 CI / CD,于是让我做个探索。从网上找了一堆资料,发现 Jenkins 不错。但经同公司不同部门同事建议,Gitlab runner 更简单直接。于是,就在其文档和相关博文的指导下搞了个基于 Gitlab runner 的 CI 工程。该文并非指导性博文,只是对配置 CI 工程过程中的若干琐碎问题的一个整理,因网上的相关教程,并未提及这些不太容易解决的问题。

GitLab-Runner 的安装

如果只参考官网的 GitLab Runner 安装文档,则有很大可能会陷入一个 curl 无法执行的 bug 中,bug 描述建议确认 curl 的安装是否正确。此外,官网的这种安装方法也比较繁琐,不够快捷。

实际上,在 Ubuntu 上,apt-get install 命令就能够正常安装 GitLab-Runner,具体命令是:

sudo apt-get install gitlab-ci-multi-runner

至于这里为啥要用这么复杂的名字,好像使用 sudo apt-get install gitlab-runner 也能正常安装。我是在执行了第一个命令之后,再执行第二个命令时,echo 表示系统早已安装该程序,因此 0 newly installed。

backspace 键在 linux 某些状态下不能使用

安装完 GitLab-Runner 之后,我们就需要注册了。在注册过程中,需要输入一些信息,其中有一个是 tags,后面有个括号说使用逗号分隔开(comma separated),然而我第一次输入时直接用了空格隔开,然后才看到用逗号隔开的括号。这就想删掉,却发现按下键盘上的 Backspace 键时,写错的内容并未被删除,反而新增了两个字符 ^H。想着用向左的方向键把光标移动过去然后按 delete 键删除,结果也并不如我所愿,反而新增了四个字符 ^[[D
在这里插入图片描述

在请教前同事之后得知,此时需要使用 ctrl + backspace 进行删除。

yaml invalid / jobs config should contain at least one visible job

终于注册完了,于是跟随指导,在 windows VSCode ssh 连到 Linux 开发机上的 workspace 里,在代码库的根目录下,新建了文件 .gitlab-ci.yml 跑了个 Hello world 的测试,内容如下:

stages:
  - test

test:
  stage: test
  script:
    - echo "Hello world!"

然后 push 到 origin 的 ci_test 分支上去,却发现,pipeline 失败,甚至没有运行,提示是 yaml invalid
在这里插入图片描述
通过点前面的 failed 可以进一步看到提示 jobs config should contain at least one visible job
在这里插入图片描述
当时也是看了很久,各种该 yml 文件尝试都不成功,才发现底下还有一行提示性小字 You can also test your .gitlab-ci.yml in CI Lint
于是就打开了位于 GitLab–>CI/CD–>Pipeline 页面右上角的 CI Lint 进行测试,把代码复制粘贴进去,按下 validate 完全成功。
在这里插入图片描述
这就很纳闷了,为什么在这里写、运行,就能成功,但是在代码里 push 到 origin 自动触发 GitLab Runner 的时候却说 yml 有问题呢?
有查找了一堆资料,才在 stackoverflow 上发现类似的问题。
于是通过 GitLab 网页直接打开 .gitlab-ci.yml 这个文件,Edit,发现竟然在文本的最开始的位置,有一个被红色标注了的点号。真是太坑了!
在这里插入图片描述
于是直接从网页上删掉那个点号,保存、commit,再看,Pipeline 里的任务就执行成功了!

在 shell 命令中输入用户名和密码等

这个问题是为了解决 git clone 没权限导致的。因为业务中的一个项目需要依赖另一个项目进行编译,所以,自动集成时需要 clone 另一个项目的代码到本项目目录下。
原本使用的是 ssh 的 git clone 命令,但是由于要添加 ssh_key 等操作,因此选择使用 https 的 git clone 命令。而在使用 https 的 git clone 命令时,却需要输入用户名和密码,因此寻找在 shell 命令中输入用户名和密码的方法,以便于 shell 可以在自动运行时一路自动执行下去。
通过请教前同事,得知,这样的问题需要使用 Shell + Expect 来实现,具体细节可以参考文章:自动化脚本实践(Shell + Expect),不再赘述。

git clone 没有权限

后来感觉如果要用 Expect 来输入 https 拷贝时的账户密码,仍然不是一个很理想的解决方案。这样需要把一个账户密码保存在文本文件里,导致泄密的可能性增加。所以,最好还是实现 ssh git clone。经过查资料发现,可以将一个已经添加到 gitlab 上的 id_rsa.pub 复制拷贝到 gitlab-runner 所在的 Home 文件夹下。
但是,不知道什么原因,我们的 /home/ 目录下并没有 gitlab-runner 这个用户。ls -a 也没有这个用户。所以,要解决这个问题。后来想到,gitlab 网页上的 pipeline 执行过程是可以看到相关 log 的,于是在 yml 里添加了一个 pwd 的语句,发现,我在 Ubuntu 18 上安装的 Gitlab-ci-multi-runner 所在的目录是 /var/lib/gitlab-runner/... 这个目录下,所以我就尝试把我的用户的 .ssh 文件夹下的所有文件拷贝到 /var/lib/gitlab-runner/.ssh 这个目录下。竟然成功解决了使用 ssh git clone 没有权限的问题。
在这里插入图片描述

邮件通知

Gitlab CI Runner 貌似并没有默认的邮件通知功能,只在 pipeline 执行失败时会发邮件通知。我们希望,在 Gitlab CI 中集成自动单元测试,并且将测试结果通过邮件或者其他形式第一时间告知开发者。
这里简单提一下解决思路,Linux 是有发送邮件功能的,所以,当 pipeline 中的任务成功后执行一个自动发送邮件的脚本即可。具体的可以安装配置 sendmail 这个程序来实现。但是 sendEmail 这个程序看起来更好用。
这两个的区别在于,sendmail 是直接从 Linux 发送邮件,域名、用户名都可以自定义,具体过程可参考文章 Ubuntu 中sendmail 的安装、配置与发送邮件的具体实现。但是我在实现时,用 uuencode 命令带附件发送邮件时容易产生乱码,另外,某些邮箱会认为是垃圾邮件。
sendEmail 更像是一个极其简单好用的傻瓜式发送邮件的服务,但是,需要一个普通的邮件账户、密码和具体的邮件域名,例如 enoch.liu@aliyun.com,则需要在 sendEmail 里配置用户名、密码、aliyun.com 这个域名和 STMP 这个服务类型,然后发送邮件时,是从 enoch.liu@aliyun.com 这个邮件发送出去的。

gitlab-runner 没权限,或者 sudo: no tty present and askpass program specified

gitlab-runner 也是 Linux 中的一个普通用户,因此,有些脚本或者目录并不是它一定有权限,于是,有事会用 sudo 开头来保证能执行。但是,使用 sudo 语句时,又会有上述报错:sudo: no tty present and ...这是由于账号没有开启免密码导致的,因此要在 /etc/sudoers 中添加免密码。如添加以下一行 gitlab-runner ALL = NOPASSWD: ALL

sudo: no valid sudoers source found, quitting

这个问题是由于,没有事先切换到 root 用户对 /etc/sudoers 进行修改,而是使用命令 sudo chmod 0666 之后对其进行了修改。导致无法 /etc/sudoers 成为了非只读文件之后,就成了 invalid sudoers source 了,所以会有上述报错。而这时再用 sudo chmod 0440 时由于上述报错,所以该命令无法正常执行。这就陷入了一个死循环。
所以,需要使用 su 切换到 root 用户,对其进行修改即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海Enoch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值