目录

创建项目

安装项目所需的环境

创建.gitlab-ci.yml文件

最终效果显示

CI/CD错误问题集锦


创建项目

1.创建新项目:在Gitlab上进入到对应的群组里面,点击新建项目-->选择空白项目进行创建

gitlab创建java项目 在gitlab上创建项目_git

gitlab创建java项目 在gitlab上创建项目_ci_02

2.创建项目完成后,再进入项目,会生成一个命令行指引,如下所示:

gitlab创建java项目 在gitlab上创建项目_ci_03

 3.且会进行生成一个git地址,如下所示:

gitlab创建java项目 在gitlab上创建项目_git_04

安装项目所需的环境

在部署的服务器上创建项目虚拟环境和安装项目环境依赖的必须的包

创建.gitlab-ci.yml文件

创建.gitlab-ci.yml文件目的是为了自动化部署项目,达到持续集成和持续部署的目的。

.gitlab-ci.yml文件配置CI对项目执行的操作,它告诉GitLab runner该做什么。它位于存储库的根目录中。代码的每次提交,GitLab都会查找.gitlab-ci.yml这个文件,并根据这个文件的内容,在Runner上启动你提交的工作流水线运行。

新建.gitlab-ci.yml文件有以下两个步骤:

1).gitlab-ci.yml文件路径:对应项目详情 -> 项目预览(Project overview)-> 仓库 -> 文件 -> 创建新文件 -> 选择.gitlab-ci.yml文件。

2)新建文件完成以后,提交changes到master分支上,并进行合并在项目主master分支上。

yml文件的知识补充:

CI/CD中最常用的几个关键词:

  • image:如指定一个基础Docker镜像作为基础运行环境
  • stages:全局自定义阶段
  • script:shell脚本
  • stage:任务内的阶段,必须从全局阶段中选
  • retry:重试次数(0-3)
  • only/except:限定当前任务执行的条件
  • tags:用于指定Runner,tags的取值范围是在该项目可见的runner tags中
  • when:实现在发生故障或尽管发生故障时仍能运行的作业
  • cache:缓存是将当前工作环境目录中的一些文件,一些文件夹存储起来,用于在各个任务初始化的时候恢复

在仓库的根目录下创建一个名为.gitlab-ci.yml的文件,以后端web项目为列:

# 在Gitlab上自动部署运行的脚本
位置及文件名:项目名\.gitlab-ci.yml
# 对应的脚本内容如下:
### 注意:缩进始终使用空格键,而不是Tab键

# 定义工作阶段--管道的全局定义
stages:
  -安装环境
  -部署项目

# 覆盖作业之前运行的命令
before_script:
  -启动对应环境的虚拟环境
  -环境的flag的名称(线上部署的环境test)
  -配置文件的位置
  
install_deps:  
  -对mater分支安装项目依赖环境
  -使用的pip版本
  -使用的Python3版本
  
deploy_project:
  -部署的项目-->只对master分支上的项目进行部署
  -杀死原来的部署的进程
  -重新运行并守护进程

最终效果显示

.运行CI中的流水线,流水线通过后就会在该路径/home/gitlab-runner/builds下显示对应的runner,如下所示:

gitlab创建java项目 在gitlab上创建项目_服务器_05

服务器上查看对应的Runner,路径/home/gitlab-runner/builds/

CI/CD错误问题集锦

1.解决运行CI流水线作业时出现Job failed (system failure): prepare environment: exit status 1.错误

错误原因:当Gitlan-Runner执行Job时,会使用Gitlab-Runner安装时自动创建的账号gitlan-runner执行,此账号下的.bash_logout文件中使用了clear命令,在该账号退出时将会清除命令,但是在Gitlab-Runner执行时不允许清除命令,因此造成了此错误。

解决办法:文件中使用了clear_console命令,将文件中代码全部注释保存即可,重新执行失败的任务即可执行成功

$ vim /home/gitlab-runner/.bash_logout
# ~/.bash_logout: executed by bash(1) when login shell exits.

# when leaving the console clear the screen to increase privacy

### 以下为注释内容 ###

if [ "$SHLVL" = 1 ]; then   # 进行注释掉
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q  # 进行注释掉
fi   # 进行注释掉

### 以上为注释内容 ###

# 注意:注释后保存退出即可