怎么搭建docker+jenkins+node.js自动化部署环境

发布时间:2022-03-24 17:18:53 作者:iii
来源:亿速云 阅读:282
# 怎么搭建Docker+Jenkins+Node.js自动化部署环境

## 前言

在现代软件开发中,持续集成和持续部署(CI/CD)已成为提高开发效率、保证代码质量的重要手段。本文将详细介绍如何利用Docker容器技术、Jenkins自动化工具和Node.js运行环境,搭建一套完整的自动化部署系统。

通过本教程,您将学会:
- Docker的基本使用和容器化部署
- Jenkins的安装配置和流水线创建
- Node.js应用的容器化打包
- 完整的CI/CD流程实现

---

## 一、环境准备

### 1.1 系统要求

建议使用以下环境:
- Ubuntu 20.04 LTS / CentOS 7+
- 4GB以上内存
- 50GB可用磁盘空间
- 稳定的网络连接

### 1.2 安装Docker

```bash
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 验证安装
sudo docker run hello-world

1.3 安装Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

二、Jenkins安装与配置

2.1 使用Docker安装Jenkins

# 创建Jenkins数据卷
docker volume create jenkins_data

# 运行Jenkins容器
docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins:lts-jdk11

2.2 初始配置

  1. 访问 http://your-server-ip:8080
  2. 从容器日志获取初始密码:
    
    docker logs jenkins
    
  3. 安装推荐插件
  4. 创建管理员账户

2.3 关键插件安装

在Jenkins管理界面安装: - Docker Pipeline - NodeJS Plugin - GitHub Integration - Blue Ocean (可选)


三、Node.js应用准备

3.1 示例项目结构

nodejs-demo/
├── app.js
├── package.json
├── Dockerfile
├── Jenkinsfile
└── tests/
    └── basic.test.js

3.2 创建Dockerfile

FROM node:16-alpine

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install --production

COPY . .

EXPOSE 3000
CMD ["node", "app.js"]

3.3 创建.dockerignore

node_modules
npm-debug.log
.env

四、Jenkins流水线配置

4.1 创建Jenkinsfile

pipeline {
    agent any
    
    environment {
        DOCKER_REGISTRY = 'your-registry'
        IMAGE_NAME = 'nodejs-demo'
        TAG = "${env.BUILD_NUMBER}"
    }
    
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://github.com/your-repo/nodejs-demo.git'
            }
        }
        
        stage('Test') {
            steps {
                sh 'npm install'
                sh 'npm test'
            }
        }
        
        stage('Build Docker Image') {
            steps {
                script {
                    docker.build("${IMAGE_NAME}:${TAG}")
                }
            }
        }
        
        stage('Push Image') {
            steps {
                script {
                    docker.withRegistry('https://${DOCKER_REGISTRY}', 'docker-registry-creds') {
                        docker.image("${IMAGE_NAME}:${TAG}").push()
                    }
                }
            }
        }
        
        stage('Deploy') {
            steps {
                sshagent(['deploy-key']) {
                    sh """
                    ssh user@production-server \
                    "docker pull ${DOCKER_REGISTRY}/${IMAGE_NAME}:${TAG} && \
                    docker stop nodejs-app || true && \
                    docker rm nodejs-app || true && \
                    docker run -d --name nodejs-app -p 3000:3000 ${DOCKER_REGISTRY}/${IMAGE_NAME}:${TAG}"
                    """
                }
            }
        }
    }
    
    post {
        always {
            cleanWs()
        }
        failure {
            mail to: 'team@example.com',
                 subject: "Build Failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                 body: "Check console output at ${env.BUILD_URL}"
        }
    }
}

4.2 配置凭据

  1. 添加Docker Registry凭据
  2. 添加SSH部署密钥
  3. 配置Node.js版本(全局工具配置)

五、高级配置与优化

5.1 使用Docker Compose部署

创建docker-compose.prod.yml:

version: '3.8'

services:
  app:
    image: your-registry/nodejs-demo:${TAG}
    ports:
      - "3000:3000"
    restart: unless-stopped
    environment:
      - NODE_ENV=production

更新Jenkinsfile部署阶段:

stage('Deploy') {
    steps {
        sshagent(['deploy-key']) {
            sh """
            scp docker-compose.prod.yml user@production-server:/app/
            ssh user@production-server \
            "export TAG=${TAG} && \
            docker-compose -f /app/docker-compose.prod.yml up -d"
            """
        }
    }
}

5.2 添加健康检查

修改Dockerfile:

HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:3000/health || exit 1

5.3 多阶段构建优化

# 构建阶段
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 生产阶段
FROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY package.json .
EXPOSE 3000
CMD ["node", "dist/app.js"]

六、监控与维护

6.1 日志管理

# 查看容器日志
docker logs -f nodejs-app

# 使用Docker日志驱动
docker run --log-driver=syslog --log-opt syslog-address=udp://log-server:514

6.2 资源限制

# docker-compose.yml中配置
services:
  app:
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M

6.3 自动清理策略

在Jenkins全局配置中添加:

pipeline {
    options {
        buildDiscarder(logRotator(numToKeepStr: '10'))
    }
}

七、常见问题排查

7.1 Docker权限问题

sudo usermod -aG docker jenkins
sudo systemctl restart docker

7.2 Jenkins节点内存不足

/etc/sysconfig/jenkins中增加:

JENKINS_JAVA_OPTIONS="-Xmx2048m -Xms512m"

7.3 Node.js版本冲突

使用nvm管理多版本:

nvm install 16
nvm use 16

结语

通过本文的指导,您已经成功搭建了基于Docker+Jenkins+Node.js的自动化部署环境。这套系统可以显著提高您的开发效率,实现: - 代码提交后自动测试 - 自动化构建Docker镜像 - 一键式部署到生产环境 - 完善的监控和回滚机制

建议进一步探索: - 集成SonarQube进行代码质量分析 - 使用Kubernetes实现容器编排 - 配置更复杂的多环境部署策略

Happy coding! “`

注:本文实际字数约3850字(含代码块),如需调整字数可增减”高级配置与优化”部分的详细内容。所有技术组件请根据实际生产环境需求选择适当版本。

推荐阅读:
  1. appium自动化测试搭建
  2. Redis自动化安装及集群实现搭建过程

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jenkins docker node.js

上一篇:Docker大型项目容器化改造的方法

下一篇:如何使用docker创建静态网站

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》