jenkins+gitlab+Harbor+vue 自动打包部署发布vue前端项目

1.准备工作:

(1)虚拟机安装好docker容器并配置好私有仓库地址,我自己使用的jenkins是2.387.3版本,拉镜像时不要拉jenkins,要拉jenkins/jenkins才对。

(2)在docker容器里面安装了gitlab,harbor等镜像。

(3)由于所有东西都是安装在一台虚拟机里内存尽量大一点,gitlab很吃内存,可以更改一些gitlab的配置缓解一下。

(4)这里介绍跟jenkins安装完成后面有关的部分。由于是在一台虚拟机做的一个小demo,有不对的地方见谅。

(5)注意:gitlab要设置外发请求不然不能通过ip访问,点击管理中心、点击设置、点击网络 找到外发请求勾选

允许Webhook和服务对本地网络的请求

允许系统钩子向本地网络发送的请求

2.jenkins 插件安装

Build Timestamp Plugin 时间戳插件用时间戳当版本号

Docker 、GitLab 、NodeJS 、Publish Over SSH

把以上插件全部安装完成。

3.实现jenkins拉取gitlab代码仓库拉取功能

(1)点击jenkins系统管理>点击Configure System>找到 Gitlab配置选项

取消勾选enable authentication

输入名称,输入Gitlab访问地址,点击添加

API token在gitlab里生成。输入id,输入描述。点击添加。

在gitlab里面创建添加一个项目后点击项目,点击设置,点击访问令牌。输入令牌名称点击api,点击创建项目访问令牌

点击test看是否能连接上gitlab

新建任务,点击刚创建的任务,点击配置。

输入Git仓库地址,选择刚才添加的凭证,选择分支点击保存。

点击立即构建测试看看代码是否能从gitlab上面拉取下来。

4.构建触发器实现自动拉取代码

这个地址需要在gitlab里面添加webhooks使用。

这里生成一个sercet token。点击保存,上面的地址和sercet token需要在下面的gitlab里面使用。

网址就是jenkins上面的地址,secret令牌就是之前生成的sercet token

点击添加点击测试看看是否能触发自动构建。

5.配置nodejs实现前端代码打包生成dist文件夹

先看这个贴子:Docker Jenkins 安装NodeJs环境_/var/jenkins_home/tools/jenkins.plugins.nodejs.too_Hmg-L的博客-CSDN博客

解决nodejs版本选择问题

cd到jenkins 的目录下 /var/jenkins_home/updates

创建文件 hudson.plugins.nodejs.tools.NodeJSInstaller

文件内容为

{
    "list":[
        {
            "id":"16.20.2",
            "name":"NodeJS 16.20.2",
            "url":"https://nodejs.org/dist/v16.20.2/"
        }
    ]
}

这里的nodejs版本尽量跟前端本地的nodejs版本一致。

我这里是在虚拟机里面已经安装好了16.20.2版本的nodejs,没有使用它的安装。

所以如果出现插件安装nodejs失败的情况,可以试试直接在虚拟机安装。

这里的nodejs 16.20.2就是上面配置添加的文件,如果不添加那个文件这里是空的。点击保存

如果配置了还是没有就重启一下jenkins。

再到项目的配置里面找到构建环境勾选,点击保存。点击立即构建,测试nodejs是否能够正常工作。

完成nodejs工作正常后 再到配置里 找到build steps 点击增加构建步骤 选择shell

cd html/  #先到前端代码目录

if [ -f "dist/" ];then   #判断dist文件是否存在
rm –rf dist/ #dist文件存在就执行删除
fi

npm install	#执行install
npm run build:prod #执行build

点击保存,点击立即构建,测试是否能正常构建并生成dist文件夹。

在这里要说明一下为什么要这么用而不是用dockerfile文件里面用nodejs镜像构建。

(1)我这边用dockerfile执行npm run build时候报Cannot find module 'chokidar'组件找不到,但是我本地打包又正常。

(2)第二个原因时候如果用nodejs镜像打包会生成一个很大的虚悬镜像,和三个容器。在后面做删除虚悬镜像时会导致,下次执行npm install的时候重复下载vue插件。

(3)如果直接用shell脚本会把vue插件保存的工作空间里,下次构建时可以直接使用本地node_modules。加快打包速度。

在工作空间里查看dist文件夹是否正常生成。

6.配置好镜像打包服务器

(1)用时间戳作为版本号

修改时间戳样式。

(2)添加镜像打包节点

添加打包镜像的服务器,这里打包服务器的docker要开启2376端口。由于我这里用的是本地不太清楚外部服务器需不需要添加凭证。

点击测试显示docker版本号则表示成功。

开启Docker的tcp访问端口

vi /lib/systemd/system/docker.service

修改ExecStart

修改前

ExecStart=/usr/bin/dockerd -H fd:// --containerd /var/run/containerd/containerd.sock

修改后

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --containerd /var/run/containerd/containerd.sock

重新加载docker配置文件及重启Docker

systemctl daemon-reload && systemctl restart docker

7.添加dockerfile文件

FROM nginx:latest
RUN rm /usr/share/nginx/html/*
COPY dist/ /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

8.实现镜像打包并推送到harbor镜像仓库。

(1)在harbor里创建一个仓库,注意打包镜像的服务器要在docker配置私有仓库地址并重启docker,同时自己在镜像打包服务器上面测试登录私有仓库是否成功。

(2)点添加构建步骤、选择build/publish docker image

Directory for Dockerfile

输入dockerfile文件目录

Cloud to use to build image

选择你要打包镜像的服务器

Image

192.168.150.120:1180/my-test/my-html:${BUILD_TIMESTAMP}

192.168.150.120:1180/my-test 要推送的私有仓库配置ip地址+端口。

my-html 这个镜像名称不要用“.”会打包失败。

${BUILD_TIMESTAMP} 这个是之前配置的时间戳变量。

(3)勾选push image和clean local images

添加凭证,输入habor的登录账号密码。

清除本地镜像。

以上配置完成后,点击保存,点击立即构建。测试是否能正常打包并推送到镜像仓库。

9.拉取镜像并发布,清除虚悬镜像

(1)配置Publish Over SSH

点击新增,输入需要部署镜像的服务器名称,和服务器地址。

username输入登录用户名 登录密码在高级里面点击高级。

输入服务器登录密码,点击测试。点击保存。

(2)添加部署和清除虚悬镜像

选择需要部署的服务器。

echo ---------------delete container...------------------
docker rm -f my-html
echo ---------------delete images...------------------
containerId=docker iamges |grep "192.168.150.120:1180/my-test/my-html"| awk '{print $3}'
docker rm containerId 
echo ---------------Launching Container...------------------
docker run -d -p 9999:80 --name my-html 192.168.150.120:1180/my-test/my-html:${BUILD_TIMESTAMP}

echo ---------------Clear-Images...------------------
clearImagesList=$(docker images -f "dangling=true" -q)
if [ ! -n "$clearImagesList" ]; then
echo "no images need  clean up."
else
docker rmi $(docker images -f "dangling=true" -q)
echo "clear success."
fi

删除旧容器,旧镜像,拉取新镜像并运行。

清除虚悬镜像。

总结:

每一个步骤都尽量多测试一下以保证整个过程都成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值