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:
- build
variables:
PROGRAME_DIR: "/root/cloud-demo"
build_maven:
stage: build
only:
- /^dev-\d{8}$/
tags:
- dev
script:
- 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/bash
source /etc/profile
cd /root/cloud-demo
echo "Begin Execute Shell"
pid=`ps -ef | grep cloud-demo.jar | grep -v grep | awk '{print $2}'`
echo "$pid"
if [ -n "$pid" ]
then
echo "Kill SpringBoot Application"
kill -9 $pid
sleep 3
fi
echo "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:
- build
variables:
PROGRAME_DIR: "/root/cloud-demo"
build_maven:
stage: build
only:
- /^dev-\d{8}$/
tags:
- dev
script:
- 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 "============部署完成============"