这是节点app目录的根目录中的Jenkins文件:
pipeline {
agent any
triggers {
pollSCM('* * * * *')
}
stages {
stage("deploy") {
steps {
sh "scp"
}
}
}
}
我将Jenkins配置为连接到远程gitlab节点proj repo以与Jenkinsfile一起检出节点项目并运行项目的Jenkinsfile . 这部分工作正常,但现在要做什么(注意Jenkins服务器和运行节点js的服务器以及gitlab repo彼此都是远程的):
run these commands on remote server on which node app is running
cd ~/mynodeproj
pm2 stop mynodeproj
copy project source files from Jenkins server to remote server where
node app is running
npm install
export NODE_ENV=production
pm2 start mynodeproj
怎么做到这一点?
我是否需要在运行jenkins的服务器上设置私有/公共密钥对,以便jenkins服务器可以执行scp将文件复制到运行节点应用程序的远程服务器?
4 回答
我建议我们可以在这种情况下使用Rocketeer .
这是我的Jenkins Server for NodeJS App上的
Rocketeer
树您可以管理NodeJS App的远程环境:开发,分段, 生产环境 (在
config.php
文件中)它将在您的Gitlab上提取最新的源代码,并保留发布版本,如
Capistrano
(在remote.php
文件中)在部署最新源代码后可以运行
pm2 command line
(在hooks.php
文件中)已经帮助运行
npm install
NodeJS包 .所以这是我的詹金斯工作设置:
Source Code Management
Build Triggers
Build
develop 表示连接到开发远程服务器(在
.rocketeer\config.php
文件中)并在
hooks.php
文件中运行pm2
命令行configure希望这可以帮到你!!
这些命令应该在Git仓库的文件中,这意味着在管道使用的工作空间中检出 .
从那里,您可以将该脚本scp到服务器:
如果远程用户的私钥/公钥部署在代理上(或通过ssh-agent plugin传递),则通过ssh执行:
但是,作为mentioned here,诀窍是ssh会话的PATH相当有限,如果节点没有安装在像
/usr/bin
这样的标准路径中,则可能不包括节点 .因此,您可能希望修改脚本以便为可执行文件使用绝对路径(如
/absolute/path/to/node
)Your question is how to deploy your application to remote host from jenkins
最简单的解决方案
1.using Jenkins File
如果你使用管道项目,那么你会注意到一个Pipeline Syntax选项,只需选择ssh Publisher:通过SSH发送工件(你需要通过SSH插件发布插件)
添加SSH服务器
源文件:提及您要传输的文件(** / * .war仅接受WAR文件)
删除前缀:target(WAR文件通常位于目标文件夹中,因此我希望目标文件夹只能复制到我的WAR)
远程目录:将其留空(因为您从项目中获取)
Exec命令:复制文件后要执行的命令(如启动tomcat或解压缩任何属性文件并放置在特定位置 - 在您的情况下是从服务器启动节点的命令)
最后只需单击Generate Pipeline Script和BOOM,即可获得脚本(内部执行scp),只需将其复制并粘贴到Pipeline文件中即可完成:)
)
2.Publish over SSH
您可以在Post Build Action中的普通Jenkins项目中执行相同的操作(仅按照上述步骤添加详细信息)如果您没有管道项目(如果您没有/知道管道项目,则有帮助)
Do I need to setup private/public keypair on server running jenkins so that jenkins server can do scp to copy file to remote server running node app?
是必需的(推荐)您可以在管理Jenkins下的Jenkins中添加如下所示的deatils,通过SSH在Publish上配置Jenkins,您可以测试您的连接 .
希望这很有用:)
您可能需要考虑使用ansible执行此操作,并从以下位置调用您的ansible playbook:Build - > Execute Shell
https://dzone.com/articles/running-ansible-playbooks-from-jenkins
您可以使用ansible管理所有远程环境 .