本教程实现自动从
Github下载Vue项目进行自动部署。
Docker负责集成项目需要的环境,不需要预先下载各种环境在电脑上
Jenkins负责执行脚本,比如下载Github的项目,执行安装命令和运行命令等
相关应用
流程
- 可以连接网络的
Linux环境,我这里使用 vultr 开一个linux服务器。 - 下载安装
Docker和Git,Jenkins我们也将运行在Docker里,不会Docker的同学可以 Docker入门教程 本地环境试一下。 - 使用
Docker手动部署项目,这里将配置Dockerfile文件引入Node和Nginx对项目进行打包运行。单纯使用Docker可以部署项目并且运行后,再去使用Jenkins帮我们自动执行这些命令。 - 安装部署
Jenkins,我们将用Docker安装Jenkins,所以到这一步,你已经会使用Docker并且运行镜像了。 - 配置
Jenkins进行单次一键部署,它将执行:从Github克隆项目 > 执行上面Docker的一系列命令并且运行镜像。 - 配置
Jenkins进行定时自动部署,配置时间点,自动克隆项目并且打包部署 - 配置
Jenkins监听Github指定项目变化进行自动部署Docker篇
安装Docker
这里有两种安装方式
yum install dockeryum install docker-ce第二种方式解决
docker.service不存在问题,可以解决镜像源更换问题提高下载速度,可以点击查看安装教程。建议使用第二种安装
使用Docker运行项目,会使用Docker可以跳过
准备一个项目,我这里使用Vue项目,使用多阶段构建Node+Nginx进行部署
首先创建一个Vue项目,这个就不赘述了,在项目根目录创建配置文件
.dockerignore
1 | node_modules |
配置打包镜像将过滤的文件,跟 .gitignore 同理
nginx/default.conf
1 | server { |
创建 nginx 文件夹,下放 default.conf ,也可以直接放根目录,最后在Dockerfile将使用这个文件代替nginx默认配置 ,这里配置 nginx 反向代理的配置,比如端口,主入口等。
Dockerfile
1 | # 引入node |
Docker 构建镜像时会根据这个配置执行,这里先引入 node 版本lastest(最近的) 取一个别名为 js_builder 或者其他,因为先引入了 node 会先进这个 node 的镜像中,类似虚拟机,在这个环境中执行项目打包指令,最后生成 dist 打包完文件夹,在 Docker入门教程 中有讲到。
下面引入 nginx ,--form=js_builder 指向上面的 node 镜像,复制 build/dist/ 文件夹,如果上面 COPY . . 那这边复制 dist/ 就行了,复制到 usr/share/nginx/html 目录下,是 nginx 的环境,如果不知道目录在哪里,运行用 -it 映射当前 shell ,在 Docker入门教程 中有讲到。
再将 nginx 配置复制替换掉。
配置完项目,上交至 Github ,这里下载一个 Git
yum install git
安装完后,我们创建一个文件夹存放项目 mkdir test , cd test , git clone ... , cd ...
创建完后,使用 Docker 构建出 Image 镜像
docker build -t test_image .
可以看到正在一步步执行 Dockerfile 文件内容,最后一个 . 指的是 Dockerfile 所在目录为当前
打包完后,查看镜像 docker image ls
看到有一些 none 是因为重复构建了,可以 docker image rm ID 删掉
运行镜像 docker container run -p 10000:90 --name test_container test_image,可以在 -p 前加一个 -d 就可以后台运行了
这边10000端口映射镜像内的90端口,为什么是90呢,上面 default.conf 配置的
使用 Docker 跑起了项目,已经成功一半了,接下来就使用 Jenkins 帮你做这些事情😊
Jenkins篇
配置部署Jenkins
🆗到这里,你的
Docker已经入门了,接下来安装Jenkins
上面Docker教程手动敲命令进行部署,接下来使用Jenkins进行自动化部署。
从云端pull下 Jenkins 镜像 docker pull jenkins/jenkins , 查看一下 docker image ls
这就是 Jenkins 镜像了,运行它,并且将文件映射到本地,这个很重要,部署的项目和默认登录密码都在其中,而且克隆下的项目也在其中,我们需要进入这个项目运行Docker。接下来,可能会遇到一些坑。
先创建一个目录存放映射的
Jenkins,再运行Jenkins并且映射至创建目录
使用-v [存放目录]:[被映射目录]
1 | # cd ~ |
docker run -d -p 9000:8080 -v /root/jenkins/:/var/jenkins_home --name jenkins_container jenkins/jenkins
运行项目,-d后台运行,最后会给出一个容器ID
docker container ls 查看 发现并没有容器
这个时候可能是报错了,文件权限问题,取消-d再试一下
docker run -p 9000:8080 -v /root/jenkins/:/var/jenkins_home --name jenkins_container jenkins/jenkins
报错误,文件权限问题,这里请查看官方#177issue
如果还是无法解决,重装Docker,点击这个教程
运行成功后,docker ps 可以看到容器已经运行
进入 9000 端口,等待 Jenkins 开启
获取密码 vi /root/jenkins/secrets/initialAdminPassword
点击安装推荐的插件,然后等待完成
创建一个账号,一路默认进入Jenkins
使用Jenkins一键部署
注意如果插件没安装完整,例如没有Git等,去这里安装插件
安装ssh
配置ssh
拉到最下面
windows开启SSH 点击这里
创建项目

你的项目地址
你的源码,注意你的分支,默认是master,目前Github已经默认为main
配置构建环境,这里需要通过ssh发送指令。
配置完后,手动构建试试
在控制台中就可以看到运行状态
最后出现success证明成功
定时部署(轮询SCM)


参考 https://juejin.cn/post/6844903982066843661
监听Git变化部署
参考 https://juejin.cn/post/6844903986017878029
注意:创建 Webhooks 的规则,Git 改变代码时会向这个地址发送请求,确保 Jenkins 地址暴露在公网上