docker+node+nestjs 自动化部署"/>
jenkins+docker+node+nestjs 自动化部署
本文章内容版本信息
- jenkins: 2.289.3
- java: 1.8
- node: 12
- node框架: nestjs 7.4
- npm: 6
- 系统: ubuntu18
- 版本管理工具: gitee
- docker: 20.10.8
- pm2: 5.1.0
Jenkins
/
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
安装Java8
下载链接
## 解压缩
tar -zxvf jdk1.8.tar.gz
### 配置环境变量
sudo vim /etc/profile
### 将以下配置加入
export JAVA_HOME=jdk目录
export PATH=.:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
### 生效环境变量
source /etc/profile
安装Docker
传送门
编写Dockerfile
# 获取node镜像
FROM node:12# 创建工作目录
RUN mkdir app# 设置工作目录
WORKDIR /app# 拷贝目录
COPY . /app# 镜像的维护者
MAINTAINER zhangzw# 安装npm包
RUN npm --registry i# 安装全局pm2
RUN npm --registry i -g pm2# 编译
RUN npm run build# 容器端口
EXPOSE 3000# 启动命令
CMD ["pm2-runtime", "start", "dist/src/main.js", "-i", "2"]
安装jenkins
传送门
在这里我选择ubuntu系统的安装包
按照官方给的教程进行安装
Jenkins命令
启动Jenkins后
- 按照首页提示 找到服务器上的jenkins密钥 输入 下一步
- 直接选择官方推荐插件
- 等待安装完毕
- 进入页面
安装插件
- gitee
- nodejs
Jenkins配置
- 系统配置
1.设置jenkins主目录
2. 设置jenkins访问的url
3. gitee配置域名和访问的账号密码
创建和配置任务
选择参数化构建项目
配置参数 选择文本类型
其中${BUILD_ID}是jenkins全局变量 在这里我们当作镜像id和容器名称进行运行
- GITREMOTE git仓储
- BRANCH 分支
- SERVERDIR 服务文件夹路径
- SERVICENAME 服务名称
- BUILDID ${BUILD_ID}
配置webhook
什么是webhooks?
在gitee仓储>管理>WebHooks
编写构建脚本
sudo su -sudo docker imagessudo docker ps -acontainerId=`sudo docker ps -a | grep -w $SERVICENAME | awk '{print $1}'`if [ "$containerId" != "" ] ; then sudo docker stop $containerIdsudo docker rm $containerIdecho "成功停止并删除容器 $containerId"
fiimageId=`sudo docker images | grep -w $SERVICENAME | awk '{print $3}'`if [ "$imageId" != "" ] ; thensudo docker rmi $imageIdecho "成功删除镜像 $imageId"
ficd $SERVERDIRsudo rm -rf $SERVERDIR/$SERVICENAMEsudo git clone $GITREMOTEsudo chmod -R 777 $SERVICENAMEcd $SERVERDIR/$SERVICENAMEgit checkout $BRANCHsudo docker build -t $SERVICENAME .sudo docker run -d -p 3000:3000 --name=$SERVICENAME $SERVICENAMEnoneId=`sudo docker images -f "dangling=true" -q`if [ "$noneId" != "" ] ; then sudo docker rmi --force `sudo docker images -f "dangling=true" -q`echo "成功删除空镜像"
fisudo docker imagessudo docker ps -a
构建结果
更多推荐
jenkins+docker+node+nestjs 自动化部署
发布评论