需求概述:公司的Jakins需要开账号,给人申请无比麻烦,且不好自定义具体需求,万一他们的node版本过低呢?
解决方案概述:众所周知,新一代 based on web 的 git 代码库,包括但不限于 GitHub、GitLab 等都集成了 CI/CD 的功能,而大部分公司用的都是自己白嫖的 GitLab,我们可以将其 CI/CD 功能利用起来。其提供了在特定主机与特定操作系统下自动建立虚拟环境,执行自定义脚本的运行时,可以供我们快速地开发扩展自己所需要的 CI/CD 功能。
问题难点:没错,GitLab Runner 是提供了不错的运行时,但是其基于特定环境,特定系统,特定账户,也就是其指令行为与 GitLab Runner 的运行时相关。于 Microsoft Windows 下,当我需要使用 SSH 的公钥的时候,我没有办法访问我账户下的公钥。(Linux 下直接切到 GitLab 账户可以解决这个问题,Windows 下则使用的是 System 账户,不好切换)。其还有 SSH-Agent 的解决方案,但是 Windows 下虽然有 SSH-Agent,会遇到各种权限问题,意味着我们还需要模拟 System 账户操作 SSH-Key 文件,总之这里问题虽然并不复杂,但是非常难以操作,为此使用下面的奇技淫巧来解决这个奇怪的问题。
难点解决方案:使用 services.msc,也就是 Windows 的服务管理器来修改 GitLab Runner 服务的执行者为自己的账户,这样 Runner 就可以使用自己的 SSH-Key 了(想不到吧.jpg)。
具体行为:
第一步:安装 GitLab Runner for Windows
若希望使用 GitLab 的 CI/CD 功能,则应当为其提供一个 Runtime,对于 Windows,具体行为是下载其提供的 GitLab Runner for MS™Windows noarch,位于:https://docs.gitlab.com/runner/install/index.html。然后放置其至文件系统某一文件夹,例如:E:gitlab-runner.exe
第二步:同步操作 GitLab 仓库与 Windows 上的 GitLab Runner,将 Runner 注册至具体仓库。
打开 Windows 的 Shell,例如 powershell.exe 或者 cmd.exe(我比较习惯 cmd,当然 是挂了 Windows Terminal 的)。按照 https://docs.gitlab.com/runner/register/ 手把手操作,就可以注册 GitLab Runner 到具体仓库,当然,前提是你的仓库启用了 CI/CD 功能。
第三步:修改 GitLab Runner 服务至个人账户。
运行服务管理器 services.msc,找到 gitlab-runner,双击然后选择登录选项卡,剩下的操作自己猜。
第四步:配置 SSH public key 到你的特定 server host,具体教程自己搜,到处是。
第五步:在项目中编写 .gitlab-ci.yml 脚本文件,如何编写参照 https://docs.gitlab.com/ee/ci/yaml/gitlab_ci_yaml.html 总之和 Shell 脚本一样的,只不过 Windows runtime 是 PowerShell,Linux 则可能是 Bash,其他容器环境则对应其 Shell。
第六步:在 Web 端打开仓库,点击 pipeline 就可以在每次 push 后看到其 CI/CD job 了。