前文提到了怎么部署一个gitlab平台以及配套的runner,下面就应用这套来进行一个项目实战,部署官方的SpringBoot示例
首先新建一个仓库,然后选择模板,选择SpringBoot模板


设置一些基本信息,可以随便填,仓库选择私人或者内部
然后进入仓库页面确定创建成功
接下来需要用idea拉取代码,有两种方式,如果安装gitlab插件的话,可以使用访问令牌登录之后,直接选择有权限的仓库直接拉取到本地

如果没装gitlab插件,也可以在项目界面直接点击克隆链接,在idea输入也可

idea这边创建新项目选择来自版本控制

这里就会遇到前文提到的为什么要在docker设置里写好ip,如果没写ip这里点复制git地址的时候,ip那里会是一串代码(docker镜像id),不过如果按照我的教程走的就应该不会遇到了
如果提示需要登录,那就输入root账号和密码,如果提示输入邮箱和用户名,这俩可以随便填
ok在输入一些信息之后,代码应该已经克隆到本地了
这个代码在本地可以直接跑,输入localhost:8080即可
如果要使用CICD来跑的话,还需要更改一些设置
首先打开项目里的pom.xml,记录下文件名

然后修改Dockerfile文件,输入以下内容
1 2 3 4 5 6 7 8 9 10 11 12
| FROM openjdk:8
MAINTAINER name
WORKDIR /app
COPY target/demo-0.0.1.jar /app/
EXPOSE 8080
CMD ["java", "-jar", "demo-0.0.1.jar"]
|
只需要把jar的名字改成自己的
最后修改一个叫做.gitlab-ci.yml的文件,内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| workflow: rules: - if: '$CI_PIPELINE_SOURCE == "web"' # 这行的意义在于关闭推送的自动集成,仅手动启动流水线,方便后面了解操作,如果想要每次推送新代码都自动构建,可以把上面三行全删掉
stages: # 定义构建阶段 # - build # 构建阶段 - package # 打包阶段 - deploy # 部署阶段
variables: # 定义变量 DOMAIN: "sp-api" # 定义域名变量 PORT: "8080" # 定义端口变量 IMAGE_NAME: "sp:latest" # 定义镜像名称变量 MAVEN_IMAGE: "maven:3.8.4-jdk-11" # 定义 Maven 镜像变量
cache: # 配置缓存 key: "$CI_COMMIT_REF_NAME" # 缓存键 paths: # 缓存路径 - /root/.m2 # Maven 缓存路径 # build: # 构建阶段 # stage: build # 设置阶段 # image: $MAVEN_IMAGE # 使用 Maven 镜像 # script: # 执行脚本 # - echo "项目开始构建......" # 开始构建阶段 # - mvn clean compile -DskipTests=true -Dmaven.javadoc.skip=true # 编译项目代码并跳过测试和 Javadoc 生成 # - echo "跳过测试......" # 打印测试跳过消息 # - echo "跳过文档生成......" # 打印 Javadoc 生成跳过消息 # - echo "构建完成......"
package: # 打包阶段 stage: package # 设置阶段 image: $MAVEN_IMAGE # 使用 Maven 镜像 script: # 执行脚本 - echo "开始打包阶段......" # 开始打包阶段 - echo "打包中......" # 打印打包项目的消息 - mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true # 打包项目 artifacts: # 配置构建产物 paths: # 产物路径 - target/*.jar # 将打包的 JAR 文件作为构件发布
deploy: # 部署阶段 stage: deploy # 设置阶段为部署阶段 script: # 执行脚本 - echo "开始部署阶段......" # 开始部署阶段 # - apk add --no-cache mpg123 #安装 mpg123 # - apk add --no-cache curl # 安装 curl - docker stop $DOMAIN || true # 停止同名容器,如果不存在则忽略错误 - docker rm $DOMAIN || true # 删除同名容器,如果不存在则忽略错误 - docker rmi $IMAGE_NAME || true # 删除旧版镜像,如果不存在则忽略错误 - echo "开始构建 Docker 镜像文件......" - docker build -t $IMAGE_NAME . # 构建 Docker 镜像 - echo "正在启动 Docker 容器......" - docker run -d -p $PORT:8080 --name $DOMAIN $IMAGE_NAME # 运行 Docker 容器
|
弄完之后,直接点击idea的提交并推送,将代码推送至自己的远程仓库
这时候再回到gitlab的仓库界面,在该仓库的左侧点击构建->流水线,然后点击右侧的New pipeline,选择master分支,不用填东西,直接运行流水线,开始等
在作业界面可以观察每个步骤的进度,并查看日志(注:在deploy阶段会拉取docker镜像,所以需要有网络环境,自己准备好)
如果不出意外,两个任务都全绿,说明项目已经启动了,这时候再打开ip:8080,就会看到如下界面,说明部署成功

这样的话,就有了一套自己的代码远程仓库+持续集成持续部署平台,写完代码简单一推就可以等着看在服务器运行的结果了
测试完我发现jdk的镜像不会保存在本地,导致每次新建流水线都需要重新拉镜像,所以在有科学环境的时候应该提前把jdk的镜像拉到本地,这样每次新建流水线就直接用这个镜像来构建就可以了
SpringBoot项目如何写不在本文的讨论范围内,后端项目如何编写移步黑马程序员
一般的项目管理的话,每个人都要有自己的账号,root一般不用,这个平台可以支持多人注册账号,如果有团队协作的任务,需要每人都注册不同的账号,方便管理
一般情况下,一个多人协作项目的流程是这样的
- 组长新建项目,并push基本代码
- 参加的开发人员使用自己的账号拉取master分支代码,然后checkout一个专属自己的分支来开发(严禁直接开发master分支)
- 开发人员可以在本地自测部分功能,代码随时push到自己的远程分支
- 待功能开发完成之后,发起合并请求,审核人选择组长的账号(不然就得root来审核了)
- 组长进行codereview,确认无误之后将代码合入master分支,master分支自动触发流水线,开始打包并部署
- 部署完成,查看合入代码的运行情况以及和旧代码是否存在冲突,有问题随时回滚