本教程实现自动从
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 docker
yum 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
地址暴露在公网上