资讯专栏INFORMATION COLUMN

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

princekin / 714人阅读

摘要:目前官方已开始推荐使用替代之前的做为基础镜像环境。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。

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

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

BuildDeploy 环节里,使用了 $BUILD_NUMBER 这个变量来作为镜像的 tag,这个变量是 jenkins 的系统变量之一,代表当前的构建号,每次构建这个号会加一,所以可以作为我们镜像的 tag。其他系统变量可 在此查看。

Network

这里使用 docker run 命令的时候,加入了 --network 参数,这个参数用来指定 Docker 容器运行的网络,默认为 bridge,即桥接模式。这种模式下在容器内通过 localhost 是访问不到宿主机的。

如果指定为 host 则容器与宿主机共用网络,就无需使用 -p 命令映射端口了。这种模式下会破话隔离性,这里是为了在容器内方便地连接宿主机的 mysqlredis,推荐将 mysqlredis 也使用 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 挂载容器内日志目录到宿主机。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28077.html

相关文章

  • 使用 Jenkins 自动部署 Docker 服务(二、构建部署篇)

    摘要:如果还没有搭建好可以使用的,请先移步到这篇文章进行搭建使用自动部署服务一搭建篇目标通过实现推送代码后自动部署基于的服务准备工作获取示例项目或者直接复制以下文件内容获取示例项目项目文件页面文件镜像文件部署文件部署脚本文件页面文件项目很简单, 如果还没有搭建好可以使用 Docker 的 Jenkins,请先移步到这篇文章进行搭建 使用 Jenkins 自动部署 Docker 服务(一、Je...

    denson 评论0 收藏0
  • DockerJenkins 到Ansible的部署经验

    摘要:从到到的部署经验工作中,除了开发功能,还负责系统的部署工作。我从频繁的部署工作中,逐渐找到了一些偷懒的方法。同时在构建成功后执行我们输入的命令,来达到自动化部署的工作。缺点也是有的,很难保证对方部署的环境是最新的。 从Docker 到Jenkins 到Ansible的部署经验 工作中,除了开发功能,还负责系统的部署工作。我从频繁的部署工作中,逐渐找到了一些偷懒的方法。从传统的Java ...

    beanlam 评论0 收藏0
  • Jenkins集成Docker镜像实现自动发布

    摘要:集群环境的部署方式使用集群管理工具通过版本新增文件实现滚动升级容器等同于应用的部署 1. 思路&流程 Jenkins集成Docker镜像实现自动发布与Jenkins发布mavne项目思路一样总体流程 为:Jenkins 拉去远端源码 —— gitl实现应用打包 —— jenkins本地把应用程序打包进Docker镜像 ...

    defcon 评论0 收藏0
  • 解放双手 | Jenkins + gitlab + maven 自动打包部署项目

    摘要:什么是可以简单地理解为可以代替你实现自动从拉取代码,打包,部署到远程服务器的工具。随后登录后发现页面空白,没找到具体原因,重启下容器后再登录就好了。主要是配置访问服务器拉取代码,还有配置远程服务器地址,目的是为了打包后上传文件到远程服务器。 showImg(https://segmentfault.com/img/remote/1460000017907307?w=495&h=300)...

    JouyPub 评论0 收藏0
  • 联调环境快速部署——基于docker-compose的CI/CD实践

    摘要:三部署架构说明这个方案仅适用于小公司敏捷项目团队联调测试环境的部署,同时也可以作为学习入门的,并不适用于有一定规模的生产环境。另外,建议把测试域名泛解析到部署这台服务的机器。模块配置部署脚本业务模块的配置基本是通过部署脚本来操作的。 项目地址: https://github.com/xiongwilee...基本特性: 快捷部署多人nginx+php的开发测试环境,也可以扩展构建其...

    xiaokai 评论0 收藏0

发表评论

0条评论

princekin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<