gitlab–基础–06–CICD–案例
代码地址
https://gitee.com/DanShenGuiZu/learnDemo/tree/master/gitlab-learn/demo1
1、公共操作
git--基础--04--安装
https://blog.csdn.net/zhou920786312/article/details/126442919
maven--基础--01--安装
https://blog.csdn.net/zhou920786312/article/details/125832759
2、案例1
- 代码提交后,自动打包,发布为镜像
- 自动部署
2.1、构建项目
2.2、代码结构
2.3、cicd代码
#image: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/cibase:0.7.0
# 变量说明
# CI_PROJECT_NAME 项目名称,auth-center
# CI_PROJECT_ID GitLab CI在内部使用的当前项目的唯一ID
# CI_COMMIT_REF_NAME 分支名称
# CI_COMMIT_SHA commit的版本号
# DOCKER_USER docker账号
# DOCKER_PWD docker密码
# DOCKER_REGISTRY 仓库
# image_version 镜像版本,提交时间错
# 注意
# 每一个job都会有自己的项目目录
before_script:
- id
- pwd
# 定义变量
variables:
# docker 服务名称
docker_name: "demo1"
# 缓存文件目录
cache_dir: "/home/gitlab-runner/cache/${CI_PROJECT_NAME}-${CI_PROJECT_ID}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}"
cache_dir_docker: "/home/gitlab-runner/cache/${CI_PROJECT_NAME}-${CI_PROJECT_ID}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}/docker"
stages:
- build_package
- docker-build-images
- server-stop
- server-start
- clean-cache
# 打包
build_package:
stage: build_package
script:
# 构建临时目录
- mvn clean
- mvn package
# 构建临时目录
- mkdir -p ${cache_dir_docker}
- mkdir -p ${cache_dir_docker}/server/
# 移动生成的jar包文件 到临时docker目录的server目录,并修改名称为server.jar
- mv ./target/*.jar ${cache_dir_docker}/server/server.jar
# 只有哪些分支才有效
only:
- tags
- develop
- main
# 构建镜像和启动服务
docker-build-images:
stage: docker-build-images
script:
# 拷贝项目中的docker目录到临时文件中
- cp -fr ./docker/* ${cache_dir_docker}
# 镜像标签
- image_version=${DOCKER_REGISTRY}/${CI_PROJECT_NAME}:$(date +%Y%m%d-%H-%M-%S)
# 镜像版本说明文件
- echo $image_version >> ${cache_dir}/image_version
# 修改权限
- chmod +x ${cache_dir_docker}/docker-entrypoint.sh
# 登陆docker私有仓库
- echo docker login -u ${DOCKER_USER} -p ${DOCKER_PWD} ${DOCKER_REGISTRY}
# 通过Dockerfile构建镜像
- echo docker build -f ${cache_dir_docker}/Dockerfile -t $image_version ${cache_dir_docker}
# 推送镜像
- echo docker push image_version
# 登陆docker私有仓库
- docker login -u ${DOCKER_USER} -p ${DOCKER_PWD} ${DOCKER_REGISTRY}
# 通过Dockerfile构建镜像
- docker build -f ${cache_dir_docker}/Dockerfile -t $image_version ${cache_dir_docker}
# 推送镜像
#- docker push ${image_version}
only:
- tags
- develop
- main
# 停止服务
server-stop:
stage: server-stop
script:
- docker stop $docker_name
- docker rm -f $docker_name
# 手动执行
when: manual
# 启动服务
server-start:
stage: server-start
script:
- image_version=`cat ${cache_dir}/image_version`
- docker run -d -p 8899:8080 --name $docker_name $image_version
# 手动执行
when: manual
# 清空缓存
clean-cache:
stage: clean-cache
script:
- rm -rf ${cache_dir_docker}/
when: always
2.4、测试
2.4.1、查看镜像和服务
docker images | grep demo1
docker ps | grep demo1
2.4.2、查看CICD
2.4.2、请求服务
http://192.168.187.171:8899/demo1/hello
3、案例2
variables:
COVERAGE_WEBHOOK_URL: $COVERAGE_WEBHOOK_URI?branch=$CI_COMMIT_REF_NAME&gitlabPipelineId=$CI_PIPELINE_ID&gitlabProjectId=$CI_PROJECT_ID
IMAGE_WEBHOOK_URL: $CI_SERVICE_URL/webhook/gitlabProjects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/images
imageTag: $CI_PROJECT_NAME-$DEPLOY_TIME_TAG-$CI_PIPELINE_ID
DOCKER_TLS_CERTDIR: ''
stages:
- code_check
- push_images
- deploy
code_check:
stage: code_check
image: 111.111.111.111:8080/ums/maven:3.6.0-jdk-8
tags:
- devops
script:
- mvn clean package -DskipTests
artifacts:
expire_in: 3 hrs
paths:
- ./ib-provider/target/*.jar
push_images:
stage: push_images
image: 111.111.111.111:8080/library/docker:19.03.14
tags:
- devops
services:
- 111.111.111.111:8080/library/docker:19.03.14-dind
before_script:
- mkdir -p $HOME/.docker
- echo $DOCKER_AUTH_CONFIG > $HOME/.docker/config.json
- docker info
script:
- docker build -t ${CI_REGISTRY_IMAGE_DIR}:${imageTag} .
- docker push ${CI_REGISTRY_IMAGE_DIR}:${imageTag}
- wget --post-data "imageTag=$imageTag" $IMAGE_WEBHOOK_URL
deploy:
stage: deploy
image: harbor.feizhou.cn/devops-ci/mvn:1.0.1
tags:
- devops
script:
- echo $imageTag
- wget --no-check-certificate --header="Authorization:$AUTH_TOKEN" --post-data="pipelineId=$CI_PIPELINE_ID&ref=$CI_COMMIT_REF_NAME&imageName=$imageName&tag=$imageTag&deployVersion=$deployVersion&description=$description&deployParams=$deployParams&envName=$envName&deployType=$deployType" $DEPLOY_WEBHOOK_URL
only:
variables:
- $IS_DEPLOY == "1"
dependencies:
- push_images