您好,登录后才能下订单哦!
# 怎么搭建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
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数据卷
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
http://your-server-ip:8080
docker logs jenkins
在Jenkins管理界面安装: - Docker Pipeline - NodeJS Plugin - GitHub Integration - Blue Ocean (可选)
nodejs-demo/
├── app.js
├── package.json
├── Dockerfile
├── Jenkinsfile
└── tests/
└── basic.test.js
FROM node:16-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
node_modules
npm-debug.log
.env
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}"
}
}
}
创建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"
"""
}
}
}
修改Dockerfile:
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:3000/health || exit 1
# 构建阶段
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"]
# 查看容器日志
docker logs -f nodejs-app
# 使用Docker日志驱动
docker run --log-driver=syslog --log-opt syslog-address=udp://log-server:514
# docker-compose.yml中配置
services:
app:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
在Jenkins全局配置中添加:
pipeline {
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
}
}
sudo usermod -aG docker jenkins
sudo systemctl restart docker
在/etc/sysconfig/jenkins
中增加:
JENKINS_JAVA_OPTIONS="-Xmx2048m -Xms512m"
使用nvm管理多版本:
nvm install 16
nvm use 16
通过本文的指导,您已经成功搭建了基于Docker+Jenkins+Node.js的自动化部署环境。这套系统可以显著提高您的开发效率,实现: - 代码提交后自动测试 - 自动化构建Docker镜像 - 一键式部署到生产环境 - 完善的监控和回滚机制
建议进一步探索: - 集成SonarQube进行代码质量分析 - 使用Kubernetes实现容器编排 - 配置更复杂的多环境部署策略
Happy coding! “`
注:本文实际字数约3850字(含代码块),如需调整字数可增减”高级配置与优化”部分的详细内容。所有技术组件请根据实际生产环境需求选择适当版本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。