gitlab ci/cd拉取代码失败
使用gitlab cicd 构建自动化部署时,runner拉取代码失败了,突然想到是ip变更了(用的虚拟机,nat模式改成了桥接模式,然后导致ip变更了),拉取代码的时候去找了上一次ip地址,所以拉取代码超时失败了。
报了一个错误:
unable to access 'http://gitlab-ci-token:[MASKED]@192.168.23.131/dev/.....
192.168.23.131是上一个gitlab的ip,这次变了,但是还是去23.131去拉代码了!
解决方案
第一步,修改gitlab.yml文件
在/opt/gitlab/embedded/service/gitlab-rails/config目录下有一个gitlab.yml
文件
cd /opt/gitlab/embedded/service/gitlab-rails/config
vim gitlab.yml
第二步 修改gitlab.rb文件
vim /etc/gitlab/gitlab.rb
重新配置gitlab,并且重新启动gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
顺利拉取代码
gitlab runner执行shell脚本失败
记录一次runner执行shell脚本时,程序起不来的问题。。
有一springboot项目,自动化部署的时候执行完了,shell脚本也执行了,但是springboot项目没有启动起来。。
.gitlab-ci.yml
文件
最后是执行的restart.sh
一个脚本文件
stages:- buildvariables:PROGRAME_DIR:"/root/cloud-demo"build_maven:stage: buildonly:- /^dev-\d{8}$/tags:- devscript:- echo "============$PWD============"- echo "============开始打包构建============"- mvn clean- mvn package- echo "============打包构建完成============"- echo "============开始拷贝文件============"- rm-rf ${PROGRAME_DIR}/cloud-demo.jar- cp demo/target/demo-1.0-SNAPSHOT.jar ${PROGRAME_DIR}/cloud-demo.jar- echo "============拷贝文件完成============"- echo "============$PWD============"- echo "============开始部署============"- chmod a+x ${PROGRAME_DIR}/restart.sh- ${PROGRAME_DIR}/restart.sh- echo "============部署完成============"
restart.sh
脚本如下
#!/bin/bashsource /etc/profilecd /root/cloud-demoecho"Begin Execute Shell"
pid=`ps -ef|grep cloud-demo.jar|grep -vgrep|awk'{print$2}'`echo"$pid"if[ -n"$pid"]thenecho"Kill SpringBoot Application"kill -9$pidsleep 3fiecho"Start SpringBoot Application"nohup java -jar cloud-demo.jar>/dev/null 2>&1&
看runner执行的日志也没发现问题,一路正常执行,shell文件也执行了,打印的信息也都打印了,进程也毫无疑问正常杀掉了,但是最后一步nohup
死活不成功。。
反复调试,后来发现nohup
、java
命令也没问题,毕竟source /etc/profile
了,环境啥的都加载进来了
问题原因及解决
最后发现是>/dev/null 2>&1 &
的问题,在服务器上启动restart.sh
脚本文件一点问题都没有,一切正常,但是使用 runner执行的时候死活不成功,程序起不来。
后改成nohup java -jar cloud-demo.jar > /root/cloud-demo/error.log &
,把日志打印到 error.log文件里。 runner终于正常执行了。。程序也启动了。。
这样仍然存在问题
我用nohup java -jar cloud-demo.jar > /root/cloud-demo/error.log &
启动,这种在runner里执行后程序不会以守护进程来执行,也就是。。runner的执行状态一直在running中,无法变成success…
解决方案
后来,专门去学了下supervisor进程管理工具,安装在了服务器上,配合gitlab runner使用,问题解决
supervisor进程管理工具使用起来很方便,建议学一下,上手也比较容易的,可以去supervisor进程管理工具学习一下
.gitlab-ci.yml
文件
stages:- buildvariables:PROGRAME_DIR:"/root/cloud-demo"build_maven:stage: buildonly:- /^dev-\d{8}$/tags:- devscript:- echo "============$PWD============"- echo "============开始打包构建============"- mvn clean- mvn package- echo "============打包构建完成============"- echo "============开始拷贝文件============"- rm-rf ${PROGRAME_DIR}/cloud-demo.jar- cp demo/target/demo-1.0-SNAPSHOT.jar ${PROGRAME_DIR}/cloud-demo.jar- echo "============拷贝文件完成============"- echo "============$PWD============"- echo "============开始部署============"- supervisorctl restart cloud-demo- echo "============部署完成============"