本文章内容版本信息
- 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 https://registry.npm.taobao.org i
# 安装全局pm2
RUN npm --registry https://registry.npm.taobao.org 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
在gitee仓储>管理>WebHooks
编写构建脚本
sudo su -
sudo docker images
sudo docker ps -a
containerId=`sudo docker ps -a | grep -w $SERVICENAME | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
sudo docker stop $containerId
sudo docker rm $containerId
echo "成功停止并删除容器 $containerId"
fi
imageId=`sudo docker images | grep -w $SERVICENAME | awk '{print $3}'`
if [ "$imageId" != "" ] ; then
sudo docker rmi $imageId
echo "成功删除镜像 $imageId"
fi
cd $SERVERDIR
sudo rm -rf $SERVERDIR/$SERVICENAME
sudo git clone $GITREMOTE
sudo chmod -R 777 $SERVICENAME
cd $SERVERDIR/$SERVICENAME
git checkout $BRANCH
sudo docker build -t $SERVICENAME .
sudo docker run -d -p 3000:3000 --name=$SERVICENAME $SERVICENAME
noneId=`sudo docker images -f "dangling=true" -q`
if [ "$noneId" != "" ] ; then
sudo docker rmi --force `sudo docker images -f "dangling=true" -q`
echo "成功删除空镜像"
fi
sudo docker images
sudo docker ps -a
构建结果