繁体   English   中英

如何在 aws ec2 中使用 jenkins docker 容器设置部署 nodejs 应用程序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM