gitlab,gitlab runner自动化部署docke
一 、知识点
gitlab,gitlab CI/CD相关组件以及介绍
- GitLab - 基于Git的项目管理软件:
- GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务
- gitlab-runner
- GitLab Runner是一个开源项目,是gitlab的插件,用于执行.gitlab-ci.yml脚本中的命令
GitLab CI / CD是GitLab内置的强大工具,允许您将所有连续方法(持续集成,交付和部署)应用于您的软件,而无需第三方应用程序或集成。
- GitLab CI/CD工作原理
- 在代码仓库的根目录下去创建.gitlab-ci.yml文件(注意是
.gitlab-ci.yml
) - .gitlab-ci.yml文件中需要定义要运行的脚本,定义包含和缓存依赖项,选择要按顺序运行的命令以及要并行运行的命令,定义要部署应用程序的位置等
- 每次提交代码,gitlab根据.gitab-ci.yml脚本出发对应的runner,运行脚本命令,脚本被分组到作业中,它们一起组成一个自动化部署流水线
- 在代码仓库的根目录下去创建.gitlab-ci.yml文件(注意是
docker基础知识
二、自动化部署流程
第一步:开发人员将代码上传到代码仓库,gitlab 根据gitlab-ci.yml中的命令,触发ci/cd逻辑,通知gitlab-runner进行构建部署
第二步:gitlab-runner根据.gitlab-ci.yml脚本进行代码检测,单元测试
第三步: gitlab-runner根据.gitlab-ci.yml脚本进行构建打包
第四步:gitlab-runner根据.gitlab--ci.yml脚本将代码部署到相应的环境中
三、利用gitlab CI/CD 自动部署spring boot实例讲解
运维架构流程图
gitlab/gitlab runner安装
docker搭建gitlab
docker run -d --publish 22:22 -p 80:80 -p 443:443 --name gitlab --restart unless-stopped -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab -v /var/run/docker.sock:/var/run/docker.sock twang2218/gitlab-ce-zh:10.5.4
- 简单说明
- twang2218/gitlab-ce-zh:10.5.4:启动的镜像名称,次镜像是gtilab汉化版,镜像地址:
- 22端口:git端口,与本地的SSH端口冲突,我已经将本地ssh默认端口修改成其他的端口
- 80/443:gitlab web端口
docker启动gitlab-runner
sudo docker run -d --name gitlab-runner --restart=always -v /data/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:v10.6.0
友情链接:gitlab-runner官网安装指南
gitlab-runner注册到gitlab中
- 进入容器:sudo docker exec -it gitlab-runner bash
- 执行注册命令:
gitlab-runner register
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) :输入gitlab地址\
Please enter the gitlab-ci token for this runner:输入gitlab token
Please enter the gitlab-ci description for this runner:输入runner描述信息\
Please enter the gitlab-ci tags for this runner (comma separated):输入runner tag信息\
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:输入runner的类型\
Please enter the Docker image (eg. ruby:2.1):(如果选择docker需要输入镜像)
.gitlab-ci.ym脚本编写
stages: - test - build - deploycache: paths: - .m2/variables: MAVEN_OPTS: "-Dmaven.repo.local=.m2" MAVEN_IMAGE: registry.cn-beijing.aliyuncs.com/qian/prod:maven3-jdk8 CONTAINER_NAME: daily_report_java LAN_REPO: registry-vpc.cn-beijing.aliyuncs.com/qian/prod WAN_REPO: registry.cn-beijing.aliyuncs.com/qian/prod DEV_REPO: $WAN_REPO/dev PRED_REPO: $WAN_REPO/pred PROD_REPO: $LAN_REPO/prodtest and build image: image: $MAVEN_IMAGE stage: test script: - mvn package docker:build -q -Dmaven.test.skip=false -Dspring.profiles.active=test sonar:sonar -Dsonar.host.url=http://sonar.allhome.com.cn -Dsonar.login=admin -Dsonar.password=admin -Dsonar.projectName=$CONTAINER_NAME tags: - maven only: - releasebuild image: image: $MAVEN_IMAGE stage: test script: - mvn package docker:build -q -Dmaven.test.skip=true tags: - maven only: - dev - masterpush image dev: stage: build before_script: - docker login --username=阿里云镜像仓库地址 --password="password" registry-vpc.cn-beijing.aliyuncs.com script: - echo $version - docker tag $DEV_REPO:$CONTAINER_NAME $LAN_REPO/qianjia_dev:$CONTAINER_NAME - docker push $LAN_REPO/qianjia_dev:$CONTAINER_NAME tags: - docker-run only: - dev when: on_successpush image master: stage: build before_script: - docker login --username=阿里云镜像仓库地址 --password="password" registry-vpc.cn-beijing.aliyuncs.com script: - docker tag $DEV_REPO:$CONTAINER_NAME $LAN_REPO/qianjia_pred:$CONTAINER_NAME - docker push $LAN_REPO/qianjia_pred:$CONTAINER_NAME tags: - docker-run only: - release when: on_successpush image prod: stage: build before_script: - docker login --username=阿里云镜像仓库地址 --password="password" registry-vpc.cn-beijing.aliyuncs.com script: - docker tag $DEV_REPO:$CONTAINER_NAME $LAN_REPO/qianjia_prod:$CONTAINER_NAME - docker push $LAN_REPO/qianjia_prod:$CONTAINER_NAME tags: - docker-run only: - master when: on_successssh run on remote machine dev: stage: deploy script: - bash ~/.local/bin/200.sh $CONTAINER_NAME 8801 8801 $DEV_REPO:$CONTAINER_NAME guojia 192.168.10.200 tags: - shell-200 only: - dev when: on_successssh run on remote machine master: stage: deploy script: - bash ~/.local/bin/deploy.sh $CONTAINER_NAME 8801 8801 $PRED_REPO:$CONTAINER_NAME zp 预生产ip地址 tags: - shell-prod only: - release when: on_successssh run on remote machine prod: stage: deploy script: - bash ~/.local/bin/deploy.sh $CONTAINER_NAME 8801 8801 $PROD_REPO:$CONTAINER_NAME zp 生产ip地址 tags: - shell-prod only: - master when: on_success
修改pom.xml,添加如下代码
org.springframework.boot spring-boot-maven-plugin true