介绍
本文主要通过docker+gitlab+jenkins来实现自动化集成和部署的全过程,并不会详细的去介绍各种工具的功能。
流程结构
准备工作
- 1台测试服务器,用于安装docker, 并在docker中配置jenkins,部署代码等。(公司准备的是内网测试机)
- 新建一个vue项目,然后推送到gitlab仓储。
开始配置工作
docker
1. 在服务器上安装docker
- 更新软件库
yum update -y
- 安装docker
yum install docker -y
- 启动docker
service docker start
- docker相关命令
service docker restart // 重启docker服务
service docker stop // 停止docker服务
1. 在docker中安装jenkins
一般我们习惯性的从docker远程仓储直接pull 镜像的最新版,而安装最新版的jenkins镜像, 镜像启动后, 在安装jenkins一系列的plugin 时, 重重受阻, 各种失败, 原因是docker hub 上最新的jenkins 只有2.60.1 版本,很多plugin 都是不支持的。
在jenkins 的官方docker 镜像博客里: docker hub 里面的jenkins 镜像已经不再维护, 建议使用: Jenkins/jenkins 。
- 拉取jenkins镜像
docker pull jenkins/jenkins
- 启动jenkins
sudo docker run -d -u 0 --privileged --name jenkins_gitlab -p 49003:8080 -v /root/jenkins_gitlab:/var/jenkins_home jenkins/jenkins
- -u 0
指的是传入root账号ID,覆盖容器中内置的账号
-v /root/jenkins_gitlab:/var/jenkins_home
指的是 将docker容器内的目录/var/jenkins_home映射到宿主机
/root/jenkins_gitlab目录上--name jenkins_gitlab
将容器命名为 jenkins_gitlab
- -p 49003:8080
端口映射,将容器的8080端口映射到宿主机的49003端口
- --privileged
赋予最高权限
- 整体含意
运行一个镜像为jenkins/jenkinst的容器,命名为jenkins_gitlab,使用账root号覆盖容器中的账号,赋予最高权限,将容器的
/var/jenkins_home映射到宿主机的
/root/jenkins_gitlab目录下,映射容器中8080端口到宿主机49003端口
- 查看jenkins
执行完成后,等待几十秒,等待jenkins容器启动初始化。
可以查看宿主机 ' /root/jenkins_gitlab ' 下是否多了很多文件
这里访问http://服务器ip:49003 查看jenkins是否启动成功
看到如下界面说明启动成功:
- 上图需要输入管理员密码,以下命令查看,然后点击continue继续
cat /root/jenkins_gitlab/secrets/initialAdminPassword
-
点击安装
-
安装成功后,创建管理员账户
-
输入账号密码信息后点击保存(信息要填完),来到首页
-
配置jenkins, 首先安装相应的插件
点击系统配置,如果这个页面有许多错误出现, 按照提示,去安装缺失的插件即可,如果安装特别慢也可以选择手动安装,插件安装方法如下:
点击插件管理
-
安装ssh插件
成功安装后,进入系统管理--系统配置
选择高级,输入服务器IP,用户名,密码,然后点击 Test Configuration
- 安装gitlab、gitlab hook插件(安装步骤同上,具体讲一些配置)
Jenkins-to-GitLab authentication
点击add,填写相应的gitlab api token
获取gitlab的 access token
系统配置好后,我们进行项目的配置
-
首先,新建一个项目
-
创建成功后,进入项目的配置页面,选择Source Code Management 进行代码仓库的配置
注意
-
如果仓库地址选择http方式,一定要写服务器的ip地址,使用域名时会报错
认证的时候,可以选择username,password或者是gitlab api token的方式进行,点击add进行认证配置。如果是前者,配置完成后一定要重新去选择一下你刚才配置的用户名和密码,因为默认选中的不是你新填写的。
用户名,密码认证
gitlab api token认证
-
源码管理配置完成后,我们可以移步 Build Environment,我们来搭建构建环境,选择Send files or execute commands over SSH after the build runs,输入我们需要执行的ssh脚本,同时服务器上进行相关的nginx配置
事例的shell脚本如下
sudo docker stop nodeapp || true \
&& sudo docker rm nodeapp || true \
cd /root/jenkins_gitlab/workspace/vuejenkinsdemo \
&& ls \
&& sudo docker run -d --privileged=true --name nodeapp -p 3000:3000 -v /root/jenkins_gitlab/workspace/vuejenkinsdemo:/home/project/ node \
&& pwd \
&& cd /root/jenkins_gitlab/workspace/vuejenkinsdemo \
&& ls \
&& npm i \
&& npm run build \
&& ls \
-
配置完成后,点击save,进入到项目的执行页面
到此,我们已经实现了手动一键部署
接下来我们配置GitLab webhook,实现自动部署
GitLab-to-Jenkins authentication
-
进入到项目配置页面,选择build triggers,配置如下,gitlab webhook url 如图所示,然后点击advanced,找到secret token,点击生成,获得secret token的值
-
移步gitlab, 找到项目,选择setting-->integrations,配置完成后选择add webhook,然后点击下方test,提示成功后,去jenkins构建页面可以看到有任务正在构建,也可以根据构建结果进行错误排查
注意
-
当点击test时,由于本地化的原因,报了500错误,修改方式是应该允许来自钩子和服务的对本地网络的请求,
方式一:
方式二:
curl -X PUT --header "PRIVATE-TOKEN:pKt5yVfsysShHg_r4xkT" http://gitlab.univ.com/api/v4/application/settings?allow_local_requests_from_hooks_and_services=true
其中,PRIVATE-TOKEN是在gitlab中获取的access token.但是这个需要权限。如果没有权限设置的话,让gitlab的管理员帮忙设置一下就可以了。
- 到此,我们已经完成了一个简单的项目自动化部署过程。