在搭建流水线之前,需要先了解流水线平台的使用和实现原理。底层基于Jenkins和Kubernetes作为资源池,触发流水线的方式主要有代码提交、标签触发、合并请求触发、定时分支和手动触发。这些方式都可以通过配置来实现,例如可以设置定时任务来触发流水线,或者在代码提交时自动触发流水线。
不同产品的流水线阶段任务有所不同,但通常都包括代码扫描、单元测试、打包和部署等步骤。在代码扫描阶段,可以使用公司提供的代码扫描公共库,选择对应的语言环境,并配置编译命令。在单元测试阶段,需要在机器上使用指定的镜像,并申请自定义主机来配置流水线的执行机。在打包和部署阶段,可以使用Docker镜像来打包和部署应用程序。
在开始搭建流水线之前,需要获取GitLab仓库的权限,并查看GitLab CI文件,其中说明了持续集成、代码扫描、单元测试等阶段使用的镜像以及执行脚本。镜像的话需要自己打,并上传到指定的平台。
先来说说镜像和打包脚本的重头戏,这个比较精彩就先放这里,当然按照流程应该是先代码扫描,再单测,接口测试,通过后再打包,推送制品。
下面是一个简单的dockerFile
FROM ubuntu:18.04
RUN apt-get update && \
apt-get install -y python3 python3-pip && \
pip3 install flask
COPY node-v16.17.1-linux-x64.tar.xz /node-v16.17.1-linux-x64.tar.xz
RUN tar -xJf /node-v16.17.1-linux-x64.tar.xz -C /usr/local --strip-components=1 \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
RUN rm /node-v16.17.1-linux-x64.tar.xz
COPY app.py /app.py
EXPOSE 5000
CMD ["python3", "/app.py"]
这个Dockerfile的作用是构建一个包含Python3、Flask和Node.js的镜像。它首先安装了Python3和Flask,然后从主机上复制了一个Node.js的压缩包到容器中,并解压缩安装了Node.js。最后,它将主机上的Flask应用程序代码复制到容器中,并指定了容器启动时要执行的命令,即运行python3 /app.py命令来启动Flask应用程序。这个镜像可以用于运行一个全栈Web应用程序,例如使用Flask和Node.js来构建一个Web应用程序。
docker build -t my-flask-app .
启动镜像docker run -it my-flask-app /bin/bash
由于环境受限前端包和后端包需要不同的镜像打包,CI的文件也只是产出一个压缩包,要实现打包的拼装,并不简单。
首先是前端打包的脚本
#!/bin/bash
# 导出路径变量
export PACKAGE_PATH="/front_pkg"
# 获取分支名称
branch=${CI_COMMIT_BRANCH}
echo "test_appname${branch}"
app_name=${C