需求
需要跟进不同分支来执行不同的脚本
踩坑点
- build命令的配置规则不清楚
-
-only:
共能不是很清楚 - 此处定义了stage:就是执行的阶段分别为build和docker-build。执行顺序按照从上到下
- build的具具体配置以及规则
- 名字写错了找到就不会执行stage的第一步build
- build阶段的名字写对了但是docker-build的时候没有在-only中找到匹配的分支因此不执行docker-build。这报错肯定事代码或者配置的问题具体
- docker-build阶段中的only中匹配到当前分支,因此可以做执行。不过我这里有错误具体没看。
- 这里的名字一定是分支名-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文件
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