书山有路勤为径,学海无涯苦作舟。 知识改变命运,行动创造未来。

集成构建工具

集成构建工具

嘿嘿,大家好。 构建工具是用来将代码编译打包成制品的工具。例如前端项目我们一般使用npm进行打包,后端java项目我们一般使用maven、gradle进行打包。构建工具很多很多,但是集成到gitlab中是一样的。所以这里简单介绍使用gitlabCI集成npm/maven完成前后端项目的构建。

软件包下载


环境配置

首先,我们需要在runner机器中安装配置好apache-maven。

#解压
tar zxf apache-maven-xxxx.tar.gz  -C /usr/local
tar zxf gradle-xxxx.tar.gz -C /usr/local
tar zxf node-xxxxx.tar.gz -C /usr/local
tar zxf apache-ant-xxxx.tar.gz -C /usr/local

#添加环境变量
vim /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.6.0
export ANT_HOME=/usr/local/apache-ant-1.10.5
export GRADLE_HOME=/usr/local/gradle-5.3
export NODE_HOME=/usr/local/node-v10.15.3-linux-x64
export JAVA_HOME=/usr/local/jdk1.8.0_201
export PATH=$PATH:$MAVEN_HOME/bin:$ANT_HOME/bin:$GRADLE_HOME/bin:$NODE_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin

# 生效全局环境变量
source /etc/profile   

maven集成模板库配置

我们首先在jobs目录中创建一个build.yml,然后在里面编写build作业模板。

.build:
  stage: build
  tags:
    - build
  script: 
    - $BUILD_SHELL
    - ls

我们计划将测试相关的job都定义在jobs/test.yml中,我们开始创建并编写test作业。运行测试shell并收集单元测试报告。

#单元测试

.test:
  stage: test
  tags:
    - build
  script:
    - $TEST_SHELL
    - ls 
  artifacts:
    reports:
      junit: ${JUNIT_REPORT_PATH}

然后我们在template目录中创建maven流水线模板。 templates/java-pipeline.yml

include:
  - project: 'cidevops/cidevops-gitlabci-service'
    ref: master
    file: 'jobs/build.yml'
  - project: 'cidevops/cidevops-gitlabci-service'
    ref: master
    file: 'jobs/test.yml'

variables:
  BUILD_SHELL: 'mvn clean package  -DskipTests'  ##构建命令
  CACHE_DIR: 'target/'
  TEST_SHELL : 'mvn test'                                   ##测试命令
  JUNIT_REPORT_PATH: 'target/surefire-reports/TEST-*.xml'   ##单元测试报告
  
cache:
  paths:
    - ${CACHE_DIR}
    
stages:
  - build
  - test


build:
  stage: build
  extends: .build

test:
  stage: test
  extends: .test

最后我们在项目中添加.gitlab-ci.yml来引用模板构建流水线。

include:
    - project: 'cidevops/cidevops-gitlabci-service'
      ref: master
      file: 'templates/java-pipeline.yml'
  
variables:
  BUILD_SHELL: 'mvn clean package  -DskipTests'  
  TEST_SHELL: 'mvn  test'
  CACHE_DIR: 'target/'


images

好的,上面我们已经实现了构建,但是一般还回运行单元测试。接下来我们实现。


npm

template/web-pipeline.yml

include:
  - project: 'cidevops/cidevops-gitlabci-service'
    ref: master
    file: 'jobs/build.yml'
    
variables:
  BUILD_SHELL: 'npm run build'     ##构建命令                                   
  CACHE_DIR  : "dist/"             ##构建缓存
  

cache:
  paths:
    - ${CACHE_DIR}
    - node_modules/
    
stages:
  - install
  - build
  
install:
  stage: install
  script:
    - 'npm install'
    
build:
  stage: build
  extends: .build