1.背景
公司使用GitLab
作为代码版本管理平台,使用GitLab
自带的CI/CD
做持续集成。今天我需要重新部署一个新项目的环境,然后利用CI/CD进行发布。但是gitlab-runner
执行过程中报了如下错误。
2.解决
我们是使用ssh
公私钥方式认证来远程执行脚本的,这里的报错是说远程连接不上目标服务器,然后我去这个gitlab-runner
所在的服务器手动使用ssh
连接nginx
服务器是可以连接上的,如下。
既然直接在gitilab-runner
所在服务器上使用ssh
命令可以连接上,那说明ssh
公私钥登录的配置是没有问题的。那么问题应该是出在gitlab
的CI/CD
配置上,我去其他项目进行了一下打包发布,发现是可以执行成功的(其他项目的发布流程都是使用tag
为deploy
的gitlab-runner
,脚本内容也基本一致)。那感觉配置的.gitlab-ci.yml
应该内容也没有问题。因此我猜测是项目的配置出了错,于是我在脚本里打印了$NGINX_REMOTE
这个变量,发现并没有打印出内容,说明没有获取到这个变量的内容。但是我看项目中是配置了这个变量的,并且编辑这个变量也有值。
但是发现这个变量是一个保护变量。受保护的变量只有在受保护的分支或者tag上才能获取到。因为我是打tag的方式运行的CI/CD
,然后去
设置-仓库-Protected tags中设置受保护分支的匹配规则,再按照这个匹配规则建立新的分支,就可以在CI/CD
中获取这个变量了