Jenkins作为优秀的CI/CD工具,给开发和运维人员带来了极大的方便,这里不过多介绍,感兴趣的可以去官网了解详细的功能,最近有同事反应,在Docker中使用PM2工具部署Nodej应用时,启动容器后会直接退出,觉得无法使用容器化此类的项目,我最近研究了对应的方案,并把它们集成到Jenkins当中,记录一下其中的过程,希望能够给大家提供帮助。
1、资源介绍及代码介绍:
Jenkins是在阿里云的ECS上使用docker启动的,启动命令为:
docker run \ -u root \ --rm \ -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
启动完成后,ECS防火墙、阿里云ECS控制台安全组放开8080端口,即可通过ip:8080进行访问了 。初始化完成后,下载所需要的插件,比如git、链接服务器的SSH工具等。
Nodejs代码地址为:docker_node_pm2: docker_node_pm2,代码中核心有两个文件,一个example-app/src/api.js 启动一个端口号为3000的web服务,一个example-app/src/worker.js,开启一个setInterval方法定期调用一段内容。
example-app/Dockerfile 为构建镜像的Dockerfile文件,其中的内容如下:
FROM keymetrics/pm2:latest-alpine # Bundle APP files#RUN mkdir -p /home/Service#WORKDIR /home/Service#COPY . /home/ServiceCOPY src src/COPY package.json .COPY pm2.json .# Install app dependenciesENV NPM_CONFIG_LOGLEVEL warnRUN npm install --production# Show current folder structure in logs#RUN ls -al -REXPOSE 3000CMD [ "pm2-runtime", "start", "pm2.json" ]
2、操作步骤:
1)在Jenkins主页上点击系统管理>系统配置>SSH Server,填写服务器的相关信息,进行保存即可,保存之前点击TestConfiguration按钮可以测试服务器的连通性。其中的HostName这里填写的是运行Jenkins容器的宿主机的内网ip,因为Jenkins容器的宿主机和目标服务器是一台机器,填他的ip在传输文件时候速度是很快的,如果填写公网Ip,传输速度就会受限于ECS的网络带宽。这里只是为了进行测试方便快速,其实是可以填写任意互通的ip。
2)在Jenkins主页上点击新建任务,输入任务名称docker_pm2_nodejs,选择第一个构建一个自由风格的软件项目,点击确定,任务即创建完成。
3)配置任务点击对应的工程名称,点击配置按钮即可进行工程的相关配置。
- 源码管理选择Git,将源码地址填入对应的URL上,因为该地址是开源的,所以下面的凭证信息可以不填
- 构建选择执行shall,输入以下内容:
cd example-appdocker image prune -a -f docker build -t docker_pm2_nodejs .cd ../docker imagesdocker save -o docker_pm2_nodejs.tar docker_pm2_nodejs
- 构建后的操作,点击增加构建后的操作步骤,选择Send build artifacts over SSH
docker load -i /root/root/docker_pm2_nodejs.tardocker imagesdocker run --name docker_pm2_nodejs -d -p 3001:3000 docker_pm2_nodejs
点击保存即可,至此 配置结束完成
3)构建 回到docker_pm2_nodejs 工程的主页面点击立即构建即可对配置的内容进行构建。
点击下面#1后面的进度条连接即可进入构建的详细页面
点击控制台输出即可查看构建步骤的日志信息
4、测试是否成功,远程连接至阿里云的ECS
- 使用docker images 查看目标镜像是否存在
- 使用docker ps 查看容器是否正常运行
- 使用curl http://localhost:3001 测试是否接口是否正确返回数据。
版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除