awe*_*oon 6 gitlab spring-boot gitlab-ci-runner
我将使用GitLab CI服务器部署简单的Spring Boot应用程序.我的.gitlab-ci.yml情况如下:
stages:
- build_and_test
- deploy
web_server_build_and_test:
stage: build_and_test
script:
- mvn clean package
web_server_deploy:
stage: deploy
script:
- mvn clean package -Pprod
- service gitlab-runner-test stop
- cp target/*.war /var/gitlab-runner-test/gitlab-runner-test.war
- chmod +x /var/gitlab-runner-test/gitlab-runner-test.war
- service gitlab-runner-test start
Run Code Online (Sandbox Code Playgroud)
并且deploy舞台产生以下输出:
$ service gitlab-runner-test stop
Stopped [13247]
$ cp target/*.war /var/gitlab-runner-test/gitlab-runner-test.war
$ chmod +x /var/gitlab-runner-test/gitlab-runner-test.war
$ service gitlab-runner-test start
Started [21177]
Run Code Online (Sandbox Code Playgroud)
但是,我无法加载应用程序,因为一旦跑步者完成阶段,服务已经停止:
$ service gitlab-runner-test status
Not running (process 21177 not found)
Run Code Online (Sandbox Code Playgroud)
我的服务脚本将实际工作委托给组装的war包:
#!/usr/bin/env bash
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/bin/java
export MODE=service
export APP_NAME=gitlab-runner-test
export PID_FOLDER=/var/run/gitlab-runner-test
/var/gitlab-runner-test/gitlab-runner-test.war $*
Run Code Online (Sandbox Code Playgroud)
此外,当我开始通过hands(service gitlab-runner-test start)服务时,即使在用户会话关闭后它仍然在运行.
我不确定,问题的根源是什么 - Spring Boot启动脚本,GitLab配置,我的服务脚本还是别的什么?
我正在使用GitLab CI多跑者版本0.5.0(c38415a)运行Ubuntu 14.04.
UPD:
将跑步者升级到版本1.0.1(cffb5c7)并不能解决问题.
Gre*_*cki 12
正如其文档明确指出的那样,GitLab Runner "运行测试并将结果发送给GitLab".
并且由于测试应该及时启动和停止,因此运行器旨在在完成每个构建后终止所有创建的进程.
所以这不是你的服务被杀死的错误,它是一个功能.;)
GitLab CI文档建议使用dpl进行部署.
dpl是一个项目,使您能够在各种PaaS提供商(如Google App Engine,Heroku或Elastic Beanstalk)上部署您的应用程序.
因此,它会向某些REST API发出一些请求,或者通过互联网推送其他一些数据,并且它的进程可以很好地退出.
所以做你想做的事实际上需要一些黑客攻击 - 覆盖默认的跑步者行为.你不应该把它作为一个长期的解决方案,因为它可能会停止使用一些runner/gitlab更新.
在您的情况下,当您想要在跑步者的主机上实际部署和运行应用程序时,我们需要使用两个黑客:
shell执行程序,而是ssh让执行程序ssh自己(灵感来自迈克尔对这个问题的解决方案(如果赞成我的话,也请提出他的答案!),好的,所以这里有说明:
确保您可以在/root/.ssh/id_rsa没有密码的情况下使用SSH私钥从您的运行者主机SSH到自身,而无需确认指纹.ssh localhostrun by root应该以非交互方式工作.
编辑你的gitlab-runner的配置文件,/etc/gitlab-runner/config.toml使它看起来像这样:
[[runners]]
name = "your-runner-name"
url = "https://<your_gitlab_instance_fqdn>/ci"
token = "<your_project_CI_token>"
tls-ca-file = ""
executor = "ssh"
[runners.ssh]
user = "root"
password = ""
host = "localhost"
port = "22"
identity_file = "/root/.ssh/id_rsa"
Run Code Online (Sandbox Code Playgroud)(保存配置文件后,运行器将重新加载)
编辑您的服务脚本,以便它将创建的进程不是init脚本的子进程,它不会打开stdin,stdout和stderr:
#!/usr/bin/env bash
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre/bin/java
export MODE=service
export APP_NAME=gitlab-runner-test
export PID_FOLDER=/var/run/gitlab-runner-test
/var/gitlab-runner-test/gitlab-runner-test.war $* <&- >&- 2>&- & disown
Run Code Online (Sandbox Code Playgroud)通过重试上一次构建或对项目仓库进行提交来进行测试.
PS我用init脚本测试了我的解决方案,如下所示:
#!/usr/bin/env bash
start() {
# Completely disowned process, not a child
# Credits: Joe at https://stackoverflow.com/a/26420299/2693875
sleep 99999 <&- >&- 2>&- & disown
exit 0
}
stop() {
echo "doing nothing"
exit 0
}
echo "running on $HOSTNAME..."
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Use this options $0 {start|stop}"
exit 1
esac
Run Code Online (Sandbox Code Playgroud)
..在Ubuntu 14.04上使用gitlab-multi-runner v.1.02和GitLab CE 8.5.0.
| 归档时间: |
|
| 查看次数: |
7939 次 |
| 最近记录: |