gitlab-ci.yml初次使用的踩坑

需求

需要跟进不同分支来执行不同的脚本

踩坑点

  • build命令的配置规则不清楚
  • -only:共能不是很清楚
  • 此处定义了stage:就是执行的阶段分别为build和docker-build。执行顺序按照从上到下
  • build的具具体配置以及规则
  • 名字写错了找到就不会执行stage的第一步build
    gitlab-ci.yml初次使用的踩坑
  • build阶段的名字写对了但是docker-build的时候没有在-only中找到匹配的分支因此不执行docker-build。这报错肯定事代码或者配置的问题具体

gitlab-ci.yml初次使用的踩坑

  • docker-build阶段中的only中匹配到当前分支,因此可以做执行。不过我这里有错误具体没看。
    gitlab-ci.yml初次使用的踩坑
  • 这里的名字一定是分支名-build。如果你的分支名为inida/dev不好意思。此时cl lint报你语法错误。如果没有精准的匹配到,gitlab就不显示

dev-build: 
  stage: build
  script:
    - yarn install --registry= xxx
    - yarn run build-dev
    - echo "dev build complete..."
  artifacts:
    name: $CI_PROJECT_NAME
    expire_in: 1 day
    paths:
      - dist/*
  only:
    - dev
    - /^feature/.*$/

字段解析

  • image 定义镜像
  • stages 定义工作阶段 按照顺序从上到下执行
  • script: 就是项目中package中的脚本
  • cache:缓存
  • artifacts用于指定在job 成功或失败时,应附加到作业的文件
    作业完成后,工件将被发送到GitLab,并可在GitLab UI中下载


gitlab-ci.yml初次使用的踩坑

详细的gitlab-ci.yml文件

image: 镜像

stages:
  - build
  - docker-build
# dev的gitlab打包
dev-build:
  stage: build
  script:
    - yarn install --registry=xxx
    - yarn run build-dev
    - echo "dev build complete..."
  artifacts:
    name: $CI_PROJECT_NAME
    expire_in: 1 day
    paths:
      - dist/*
  only:
    - dev
    - /^feature/.*$/
  
india-dev-build: #这个名字不能是india/
  stage: build
  script:
    - yarn install --registry=http://10.74.20.125:8081/repository/npm-group/
    - yarn run build-dev-india
    - echo "dev build complete..."
  artifacts:
    name: $CI_PROJECT_NAME
    expire_in: 1 day
    paths:
      - dist/*
  only:
    - india-dev


# 生产
build:
  stage: build
  script:
    - yarn install --registry=xx
    - yarn run build 
    - echo "build complete..."
  artifacts:
    name: $CI_PROJECT_NAME
    expire_in: 1 day
    paths:
      - dist/*
  only:
    - master

#构建docker镜像
docker-build:
  stage: docker-build
  script:
    - docker_build
    - chart_build
  only:
    - master
    - dev
    - sit
    - uat
    - /^india.*$/ #这里不加或者写错了的话看不到docker-build
    - /^release-.*$/
    - /^bugfix-.*$/
    - /^hotfix-.*$/

.auto_devops: &auto_devops |
  curl -o .auto_devops.sh \
      "${CHOERODON_URL}/devops/ci?token=${Token}&type=microservice"
  if [ $? -ne 0 ];then
    cat .auto_devops.sh
    exit 1
  fi

  source .auto_devops.sh
  function docker_build(){
    docker build --pull -t ${DOCKER_REGISTRY}/${GROUP_NAME}/${PROJECT_NAME}:${CI_COMMIT_TAG} -f docker/Dockerfile .
    docker push ${DOCKER_REGISTRY}/${GROUP_NAME}/${PROJECT_NAME}:${CI_COMMIT_TAG}
  }

before_script:
  - *auto_devops
上一篇:vi/vim 编辑、搜索、查找、定位


下一篇:docker搭建gitlab