当前位置: 首页 > 后端技术 > Node.js

Jenkins+docker部署nodejs程序

时间:2023-04-03 16:06:56 Node.js

最近使用jenkins+docker完成了nodejs程序的持续部署,战线很长,知识点也很零散,踩了一些坑,所以写了一篇文章总结一下,以后忘记了,也可以回去浏览。首先说一下要实现的目标:用户提交代码并打标签后,在jenkins界面选择相应的标签执行构建。构建过程中,代码会通过docker打包成镜像,然后推送到镜像仓库,然后ssh到应用服务器,拉取对应的镜像,停止之前运行的老版本容器,以及运行新图像。简单画了流程图,了解了目标后,开始一步一步的工作。首先安装docker环境,我的机器是ubuntu16.04添加软件仓库(阿里云仓库)curl-fsSLhttps://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg|sudoapt-keyadd-sudoadd-apt-repository\"deb[arch=amd64]https://mirrors.aliyun.com/docker-ce/linux/ubuntu\$(lsb_release-cs)\stable"安装dockersudoapt-getupdatesudoapt-getinstalldocker-cerestartdockersudoservicedockerrestart测试docker是否安装成功。如果执行以下命令打印出对应版本的docker,则表示docker已经安装成功,可以先添加DaoCloud加速器:在DaoCloud官网找到加速器选项,找到你对应的操作系统curl-sSLhttps://get.daocloud.io/daotools/set_mirror.sh|sh-shttp://dfe09f6e.m.daocloud.iopulljenkinssudodockerpulljenkins:ltscreatesjenkinsconfigurationfiledirectorysudomkdir/var/jenkins_homesudochmod777/var/jenkins_home##注意这里必须配置本地卷的权限,否则启动失败运行jenkins镜像注意:我们的镜像是通过jenkins构建的,但是我们的jenkins容器中并没有安装docker,但是我们宿主机上安装了docker,所以我们需要将宿主机的docker挂到容器中,参考链接:https://www.jianshu.com/p/8b7...sudodockerrun-d\-p9000:8080\-v/var/jenkins_home:/var/jenkins_home\--restart=always\#Docker重启后,容器也会重启-uroot\-v/usr/bin/docker:/usr/bin/docker\-v/var/run/docker.sock:/var/run/docker.sock\-v/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7\--namemyjenkinsjenkins:lts-d:background运行-p:宿主机的9000端口,映射到jenkins默认的8080端口-v:将宿主机的目录挂载到容器中,容器停止后jenkins配置的东西仍然存在--name:给容器一个命名这个当你访问9000端口时,你可以看到jenkins的界面。注意:如果是阿里云上的服务器,需要配置安全策略,允许9000端口访问jenkins接口。之后会提示输入密码,根据提示密码找到对应的文件查看,复制cat/var/jenkins_home/secrets/initialAdminPassword然后按提示安装插件,等待theplug-ininstallationtocomplete...插件安装完成后,创建用户,然后初始化完成接下来,安装我们这次部署nodejs程序所需要的插件,我们的目标是选择jenkins上git上的tag作为源码,所以我们需要安装git参数插件。点击系统管理-》插件管理-》选择可选插件选项卡,找到GitParameterPlug-In安装,然后搜索SSH找到SSH插件安装,等待安装完成和插件安装-in完成,我们的基础工作就基本完成了,接下来我们就开始在jenkins上创建任务来实现我们的目的。点击NewTask,填写一个任务名称,选择“Buildafree-stylesoftwareproject”,进入后选择参数化的构建过程,这样构建的时候,选择要构建的tag,然后往下,填写git仓库信息并指定要填写的分支在构建脚本中${Tag}后,可以使用$Tag获取构建时选择的标签,然后配置构建。选择执行shell#进入项目目录cd/var/jenkins_home/workspace/[填写你的git仓库名]#标签名tagName=$Tag#docker仓库,可以在阿里云镜像仓库REPOSITORY申请自己的镜像仓库=[镜像仓库域名]/[镜像仓库命名空间]/[镜像仓库名称]:jenkins-$tagName#构建镜像,注意有个.后面就是使用当前项目下的dockerfile,dockerfile怎么写后面会讲到dockerbuild-t$REPOSITORY.#如果是私有镜像仓库,比如我的阿里云镜像仓库,需要tologin才可以push,如果public的不需要这一步删除本地构建的镜像dockerrmi-f$REPOSITORY上面我们说构建镜像需要dockerfile。这个dockerfile其实就是docker构建的时候,根据这个文件的内容,对镜像进行打包。参考一下我项目的dockerfile,很简单#BasedAmirror,新建一个镜像,我们是nodejs项目,选择有nodejs环境的镜像FROMnode:13.5.0-buster-slim#做一个标签,LABELzhangchao[邮箱名]#设置环境变量,nodejs代码中可以获取这个环境变量,如果没有可以写ENVNODE_ENV=production#创建代码目录RUNmkdir-p/usr/src/webapp#将代码复制到这个目录COPY。/usr/src/webapp#设置工作目录WORKDIR/usr/src/webapp#安装nodejs项目依赖RUN/bin/sh-c'cd/usr/src/webapp/&&放大器;\npminstall--unsafe-perm'#对外暴露3000端口EXPOSE3000#启动nodejs服务CMDnodeserver.js镜像打包后,接下来就是使用我们刚刚安装的jenkins的SSH插件了。Shell到应用服务器,停止之前版本的镜像,运行我们新建的镜像。我们首先配置我们应用服务器的地址信息添加域,域名可以随便写,在上一步创建的域下添加凭证。选择Username下的Username和Password,类型为password,为要连接的linux服务器的登录账号和密码。添加远程主机进入jenkins-->系统管理-->系统配置-->SSH远程主机(在系统设置中找到SSH远程主机),添加linux服务器连接配置完成,我们继续进入新建任务,添加构建步骤选择配置好的SSHSite,填写Remotelyexecutedscript#SettagNametagName=$Tag#登录私有仓库。如果是公共仓库就不用写dockerlogin-u[用户名]-p[密码][镜像仓库域名]#拉取远程镜像pull后面跟着仓库名是什么:标签名dockerpull[镜像仓库域名]/[镜像仓库命名空间]/[镜像仓库名称]:jenkins-$tagName#根据容器名找到容器containerId=`dockerps-a|grep[上一版本启动的容器名称]|awk'{print$1}'`#根据容器名查找镜像名imageName=`dockerps-a|grep[上一版本启动的容器名称]|awk'{print$2}'`#如果容器id存在,停止旧容器并删除旧容器和镜像if[-n"$containerId"];然后dockerstop$containerIddockerrm$containerIddockerrmi-f$imageNamefi#运行新的最后一部分其实是仓库名:标签名dockerrun-d--name[容器名]-p3000:3000[域名ofmirrorwarehouse]/[namespaceofmirrorwarehouse]/[nameofmirrorwarehouse]:jenkins-$tagName点击Save,我们的构建过程配置好了,可以点击buildwithparams,选择要构建的git仓库的tag,如果有什么问题可以在评论里问,我看到后会回复,希望大家能成功一次。参考链接:ubuntu16.04安装和配置docker:https://www.jianshu.com/p/724...如何从容器内部执行宿主机的docker命令:https://www.jianshu.com/p/8b7。..使用jenkins插件SSHPlugin执行远程sshhttps://blog.csdn.net/df0128/...

猜你喜欢