如何使用GitLab运行程序启动服务并防止其停止?

我将使用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

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]

但是,由于跑步者完成阶段后服务已停止,因此我无法加载应用程序:

$ service gitlab-runner-test status

Not running (process 21177 not found)

我的服务脚本将实际工作委托给组装好的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 $*

而且,当我手动启动服务(service gitlab-runner-test start)时,即使关闭了用户会话,它仍然保持运行状态。

我不确定问题的根源是什么-Spring Boot启动脚本,GitLab配置,我的服务脚本或其他内容?

我正在使用GitLab CI多运行者版本0.5.0(c38415a)运行Ubuntu 14.04。

将Runner升级到版本1.0.1(cffb5c7)不能解决问题。

回答:

为什么这样做是个坏主意…

正如其文档中明确指出的那样,GitLab Runner “运行 并将结果发送到GitLab”。

而且由于应该及时启动和停止测试,因此设计人员可以在完成每次构建后终止所有已创建的过程。

因此,杀死服务不是 错误 ,而是 功能 。;)

GitLab

CI文档建议使用dpl进行

dpl是一个项目,可让您在各种PaaS提供商(例如Google App Engine,Heroku或Elastic Beanstalk)中部署应用程序。

因此,它会向某些REST API发出一些请求,或者通过Internet推送一些其他数据,并且其过程会很好地退出。

因此,要做您想做的事情实际上需要进行一些修改-覆盖默认的运行器行为。而且,您不应该将它作为长期解决方案,因为它可能会因为某些runner /

gitlab更新而停止工作。

…但是如果您坚持要这样做,那么这是方法:)

好的,这是说明:

  1. 确保您可以使用中的SSH私钥从运行主机托管到本身的SSH /root/.ssh/id_rsa,而无需输入密码,也无需确认指纹。ssh localhost运行root应该非交互地工作。

  2. 编辑您的gitlab-runner的配置文件,/etc/gitlab-runner/config.toml使其看起来像这样:

    [[runners]]

    name = “your-runner-name”

    url = “https:///ci”

    token = “

    tls-ca-file = “”

    executor = “ssh”

    [runners.ssh]

    user = “root”

    password = “”

    host = “localhost”

    port = “22”

    identity_file = “/root/.ssh/id_rsa”

(跑步者将在保存配置文件后重新加载自身)

  1. 编辑您的服务脚本,这样它将创建的进程将不是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

通过重试上次构建或提交项目回购进行测试。


PS我用如下初始化脚本测试了我的解决方案:

#!/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

..在具有gitlab-multi-runner v.1.02和GitLab CE 8.5.0的Ubuntu 14.04上。

以上是 如何使用GitLab运行程序启动服务并防止其停止? 的全部内容, 来源链接: utcz.com/qa/433661.html

回到顶部