[英]How to setup deploy nodejs app using jenkins docker container in aws ec2
我在 ec2 实例中运行 docker compose 文件,这个文件包含 mysql、jenkins 图像。 还使用 pm2 命令运行 nodejs 应用程序,当我在 ec2-instance 中手动运行 nodejs 服务器时,一切正常。
但是当我尝试使用 jenkins 容器部署 nodejs 应用程序时,最新的代码没有部署,我试图调试它为什么没有部署,我发现了一件有趣的事情
当我尝试使用 jenkins 用户(容器路径:/var/jenkins_home/workspace/main)运行在 jenkins 容器工作区内执行的所有命令时
所以我的问题是我实际的 nodejs 应用程序放在 /home/ubuntu/node-app 中。 但是当尝试使用 jenkins 管道部署代码时,管道在不同的路径(/var/jenkins_home/workspace/main)中运行。
现在我有疑问,是否可以为 /home/ubuntu/node-app 路径执行管道部署命令? 不是 docker 容器路径?
如果无法更改路径,如何将 jenkins docker 容器指向 ec2 公共 ip?
我分享了 jenkinsfile 脚本和 docker compose 镜像代码以供参考
詹金斯文件代码:
stages {
stage('Build') {
steps {
sh 'npm install && npm run build'
}
}
stage('Deploy') {
steps {
sh "pwd"
sh 'git pull origin main'
sh 'pm2 stop server || true'
sh 'npm install'
sh 'npm run build'
sh 'pm2 start build/server.js '
}
}
}
Jenkins Docker 镜像代码:
jenkins:
image: 'jenkins/jenkins:lts'
container_name: 'jenkins'
restart: always
ports:
- '8080:8080'
- '50000:50000'
volumes:
- jenkins-data:/etc/gitlab
- /var/run/docker.sock:/var/run/docker.sock
编辑 1:我尝试按照 jenkinsfile 中的方式更改路径
cd /home/ubuntu/节点应用程序
我收到以下错误
/var/jenkins_home/workspace/main@tmp/durable-44039790/script.sh: 1: cd: can't cd to /home/ubuntu/node-app
注意:此路径(/var/jenkins_home/workspace/main)仅在执行以下命令后在 ec2 机器中可见,通常此路径在 ec2 机器中不存在
docker exec -it jenkins bash
尝试使用以下修复代码
stage('Deploy') {
steps {
sh "cd /home/ubuntu/node-app"
sh 'git pull origin main'
sh 'pm2 stop server || true'
sh 'npm install'
sh 'npm run build'
sh 'pm2 start build/server.js '
}
}
最后我找到了这个问题的解决方案。
实际问题是我没有为 jenkins 管道创建任何从代理,这就是为什么 jenkins 管道作业在主代理位置运行,这里主代理位置是 jenkins docker 容器空间,这就是为什么管道作业被存储到 /var/jenkins_home/ workspace/main 这个路径
现在我添加了从属代理并在 jenkinsfile 中提到了 customWorkspace 路径(我提到 customWorkspace 路径是'home/ubuntu/node-app')。 现在我的詹金斯管道在 /home/ubuntu/node-app 的自定义工作区下工作
我更新的 jenkinsfile 代码:
pipeline {
agent {
node {
label 'agent1'
customWorkspace '/home/ubuntu/node-app'
}
}
stages {
stage('Build') {
steps {
sh 'npm install && npm run build'
}
}
stage('Deploy') {
steps {
sh 'pm2 restart server'
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.