Jenkins + Docker 简单部署 node.js 项目

26次阅读

共计 1526 个字符,预计需要花费 4 分钟才能阅读完成。

有了前几篇的基础后,我们现在已经能
docker 篇:

构建 docker 镜像
上传私有仓库
拉取私有镜像
启动容器

jenkins 篇:

配置 pipeline
触发 pipeline

接下来就可以结合两者,用 jenkins + docker 来自动化部署我们的项目。
配置 Jenkins
jenkins 的配置思路为

构建机(IP: xx.xx.xx.xx)拉取代码
构建机安装依赖
构建机运行测试
构建机打包并上传镜像至私有镜像仓库
部署机(IP: yy.yy.yy.yy)拉取镜像
部署机重启服务

对应 pipeline 配置如下
pipeline {
agent any
stages {
stage(‘Update’) {
steps {
sh “””
npm install
“””
}
}

stage(‘Test’) {
steps {
sh “npm test”
}
}

stage(‘Build’) {
steps {
sh “””
docker build -t localhost:5000/wool-digger-api:$BUILD_NUMBER .
docker push localhost:5000/wool-digger-api:$BUILD_NUMBER
“””
}
}

stage(‘Deploy’) {
steps {
sh “””
ssh -o stricthostkeychecking=no root@xx.xx.xx.xx ”
source /etc/profile
docker pull yy.yy.yy.yy:5000/wool-digger-api:$BUILD_NUMBER
docker rm -f wool-digger-api
docker run -d –name=wool-digger-api –network host yy.yy.yy.yy:5000/wool-digger-api:$BUILD_NUMBER

“””
}
}
}
}

BULID_NUMBER
在 Build 和 Deploy 环节里,使用了 $BUILD_NUMBER 这个变量来作为镜像的 tag,这个变量是 jenkins 的系统变量之一,代表当前的构建号,每次构建这个号会加一,所以可以作为我们镜像的 tag。其他系统变量可 在此查看。
Network
这里使用 docker run 命令的时候,加入了 –network 参数,这个参数用来指定 Docker 容器运行的网络,默认为 bridge,即桥接模式。这种模式下在容器内通过 localhost 是访问不到宿主机的。
如果指定为 host 则容器与宿主机共用网络,就无需使用 -p 命令映射端口了。这种模式下会破话隔离性,这里是为了在容器内方便地连接宿主机的 mysql 和 redis,推荐将 mysql 和 redis 也使用 docker 运行,host 值可作为一种临时解决方案。
配置 Docker
docker 的配置无需做太多修改
FROM node:10.15.0-alpine
MAINTAINER sunhengzhe@foxmail.com
COPY . /app/
WORKDIR /app
RUN npm install pm2 -g
EXPOSE 1337
CMD [“pm2-runtime”, “pm2/production.json”]
这里的基本镜像使用了 node 的 alpine 版本,alpine 是面向安全的轻型 Linux 发行版,它的体积非常小。目前 Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。
其他
删除镜像
如果需要批量删除镜像,可以使用
docker rmi $(docker images | grep ‘ 镜像名 ’ | awk ‘{print $3}’)
持久化日志
如上篇提到的,可以通过 -v 挂载容器内日志目录到宿主机。

正文完
 0