在上一篇文章中,我们讲了dockerfile的最小实现,但是也提出了一个问题。虽然docker解决了环境和部署问题,但是CICD还是让人觉得累。本章使用docker生成jenkins容器,结合jenkins和github,达到一定程度的CI希望达到的效果。我希望我gitpush之后,把代码推送到jenkins上,在jenkins里点击publish,我的代码就推送到服务器上了。浏览页面立马看到效果gitPush到仓库,在jenkins上点击publish进行发布。jenkins绑定远程仓库和服务器gitpush到仓库后,jenkins监听,执行删除原有容器的脚本,生成新的容器映射出端口jenkinsquickstart是java语言写的cicd,是一套java写的cicd系统,可以通过ssh与服务器通信,实现思路。Jenkins实现步骤第一步:拉取jenkins镜像,作为镜像生成容器第二步:安装配置jenkins第三步:准备节点服务第四步:jenkins部署节点服务第一步:生成jenkins容器首先拉取jenkinsfromdockerhubdockerpulljenkins/jenkins:lts创建一个jenkins目录mkdir/home/johan/www/jenkins增加这个文件的权限sudochmod-R777/home/johan/www/jenkins用jenkins/jenkins:lts生成一个容器作为图像dockerrun--namejenkins-p8080:8080-p50000:50000-d-v/home/johan/www/jenkins:/var/jenkins_homejenkins/jenkins:lts-d:runninginthebackground-v:数据量,将容器内容映射到本机查看容器内部日志dockerlogsjenkins,输入域名url查看jenkins是否安装成功,解锁jenkins,在日志中输入密码,可以解锁第二步:安装配置jenkins安装jenkins插件按照推荐的插件安装配合jenkins需要等一会,下载这些插件报错,然后重试,卡卡刚刚创建了一个管理员账号,保存成功,开始使用jenkins改源https://mirrors.tuna.tsinghua。edu.cn/jenkins/updates/update-center.json进入系统管理—>插件管理—>高级—>拉到最下面下载ssh插件进入系统管理—>插件管理—>可选插件搜索“PublishoverSSH”,安装配置ssh进入系统管理——>系统配置——>拉到最下面(PublishoverSSH),使用密码点击测试配置,已经连接到服务器。安装nodejs插件。运行node项目时需要使用node插件。这里安装,进入系统管理——>插件管理——>可选插件搜索节点,并安装全局配置节点进入系统管理——>全局工具配置——>NodeJS应用,保存构建jenkins到此告一段落第三步:准备Node服务下面以上一章提到的koa为例,讲解生成.gitignore文件,写入node_modules上传dockerfile_koa_demo到githubgitinitgitadd.gitcommit-m'first_commit'gitremoteaddoriginhttps://github.com/johanazhu/dockerfile_koa_server.gitgitpush-uoriginmaster第四步:Jenkins部署节点服务并创建任务。任务描述代码如下:dockerstopkoa_server_containerdockerrmkoa_server_containerdockerrmijohanbo/koa_server:v.1.0.0cd/home/johan/www/jenkins/workspace/dockerfile_koa_serverdockerbuild。-tjohanbo/koa_server:v1.0.0dockerrun-d--namekoa_server_container-p3011:3010johanbo/koa_server:v1.0.0上面代码的解释:第一行:停止koa_server_container容器第二行:删除这个容器第三行:删除生成这个容器的镜像第四行:进入服务器中jenkins数据卷对应的目录注意:dockerfile_koa_server是你第一次创建项目时的名字第5行:生成一个名为johanbo/koa_server的镜像:v1.0.0第6行:生成一个名为johanbo/koa_server的镜像:v1.0.0是名为koa_server_container的镜像容器,将本机3011端口映射到容器的3010端口,应用并保存,立即构建服务,找到成功,可以看到“hello,docker"并在本地更改原始端口Fileapp.jsapp.use(async(ctx)=>{ctx.body='hello,docker,jenkins';});将代码提交到github,通过jenkins重新部署node服务。构建完成,刷新浏览器,发现内容已经被替换PS:该服务现已下架。综上所述,在实际开发中,其实有很多坑。虽然有别人写的很好的教程,但是自己做的时候有各种限制,比如不同的操作系统,秘钥,和jenkins两种SSH插件网上教程很多,插件集成问题jenkins等支持docker命令,但是大部分都是默认的:jenkins和应用部署在同一台服务器上,这样可以在对应的文件中构建镜像,但是如果jenkins和应用部署在两台上怎么办服务器?留给下一个挑战者看参考文章如何使用Jenkins、Docker和CI/CD构建无服务器应用程序?【动手系列】Jenkins+Docker自动部署vue项目添加SSH密钥失败。消息“无效的私钥”问题jenkins配置发布通过ssh遇到的问题构建、发布、部署和测试Docker图像和容器机智hJenkinsWorkflow使用Jenkins逐步构建Docker镜像|Devops集成现场演示|Java技术员
