热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GitlabCI部署失败:gitlab-ci.yml运行期间“bash:pm2:命令未找到”

如何解决《GitlabCI部署失败:gitlab-ci.yml运行期间“bash:pm2:命令未找到”》经验,为你挑选了1个好方法。

我正在从GitLab部署Next.JS应用程序直接到我的远程服务器。我已经配置了一个变量,该变量包含我的私有SSH密钥,以便连接到远程服务器,并且我正在使用rsync从dockerRunner复制到我的远程服务器。当我在SSH上使用PM2重新启动服务时,一切工作到最后一行。

image: node:latest

stages:
  - build
  - test
  - deploy

cache:
  paths:
    - node_modules/
    - .next/

install_dependencies:
  stage: build
  script:
    - npm install
    - npm run build
  artifacts:
    paths:
      - node_modules/
      - .next/

test-build:
  stage: test
  script:
    - npm run test

deploy_production:
  stage: deploy
  only:
    - master
  before_script:
    - "which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )"
    - mkdir -p ~/.ssh
    - eval $(ssh-agent -s)
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - ssh-add <(echo "$SSH_PRIVATE_KEY")
    - apt-get update -y
    - apt-get -y install rsync
  script:
    - ssh -p22 dev@example.com "mkdir -p /var/www/example.com/index_tmp"
    - rsync -rav -e ssh --exclude='.git/' --exclude='.gitlab-ci.yml' --delete-excluded ./ dev@example.com:/var/www/example.com/index_tmp
    - ssh -p22 dev@example.com "mv /var/www/example.com/index /var/www/example.com/index_old && mv /var/www/example.com/index_tmp /var/www/example.com/index"
    - ssh -p22 dev@example.com "rm -rf /var/www/example.com/index_old"
    - ssh -p22 dev@example.com "pm2 restart landing-page"

这是任务运行程序日志中的最后8行左右:

[... rsync output ...]
sent 193,022,347 bytes  received 550,996 bytes  9,003,411.30 bytes/sec
total size is 191,108,661  speedup is 0.99
$ ssh -p22 dev@example.com "mv /var/www/example.com/index /var/www/example.com/index_old && mv /var/www/example.com/index_tmp /var/www/example.com/index"
$ ssh -p22 dev@example.com "rm -rf /var/www/example.com/index_old"
$ ssh -p22 dev@example.com "pm2 restart landing-page"
bash: pm2: command not found
ERROR: Job failed: exit code 1

奇怪的是,如果我直接连接到远程服务器并运行,pm2 restart landing-page将得到以下结果:

dev@example.com:~$ pm2 restart landing-page
Use --update-env to update environment variables
[PM2] Applying action restartProcessId on app [landing-page](ids: 0)
[PM2] [landing-page](0) ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????
? App name     ? id ? version ? mode ? pid   ? status ? restart ? uptime ? cpu ? mem      ? user ? watching ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????
? landing-page ? 0  ? 0.33.11 ? fork ? 18174 ? online ? 2       ? 0s     ? 0%  ? 7.6 MB   ? dev  ? disabled ?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????
 Use `pm2 show ` to get more details about an app

因此,最后我完全迷失了为什么所有命令都无法正常运行时最后一个命令不起作用的原因rsync,因为我确实进行了检查,并且文件在远程服务器中被更改。

你们对如何解决这个问题有想法吗?我将不胜感激!

感谢您的阅读,也感谢您的宝贵时间。



1> André DS..:

那是因为您的SSH呼叫是直接内联的。没有源的.bash_aliases或.bash_rc文件。

要使pm2正常工作,应使用完整路径进行调用。为此,请使用以下命令直接在远程服务器上检查您的pm2位置:

whereis pm2
# Output something like /usr/bin/pm2

然后使用先前给出的完整路径进行SSH调用:

 script:
    - ...
    - ssh -p22 dev@example.com "/usr/bin/pm2 restart landing-page"


是!!使用`sudo ln -s“ $(哪个节点)” / usr / local / bin / node`修复了它。如果不是您@André-DS,我还是会被卡住!非常感谢你!
推荐阅读
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文将详细介绍如何在Mac上安装Jupyter Notebook,并提供一些常见的问题解决方法。通过这些步骤,您将能够顺利地在Mac上运行Jupyter Notebook。 ... [详细]
  • LeetCode 1736: 替换隐藏数字获取最晚时间
    本文详细介绍了如何通过替换隐藏数字来获取最晚时间,适用于 LeetCode 1736 题目。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
author-avatar
koglum
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有