gitlab,gitlab runner自动化部署docke

[复制链接]

975

主题

975

帖子

629

积分

高级会员

Rank: 4

积分
629
分享到:
发表于 2022-5-12 15:25:32 | 显示全部楼层 |阅读模式
一、知识点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,运行脚本命令,脚本被分组到作业中,它们一起组成一个自动化部署流水线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 registerPlease enter the gitlab-ci coordinator URL (e.g.  ) :输入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_REPOCONTAINER_NAME  $LAN_REPO/qianjia_devCONTAINER_NAME      - docker push $LAN_REPO/qianjia_devCONTAINER_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_REPOCONTAINER_NAME  $LAN_REPO/qianjia_predCONTAINER_NAME      - docker push $LAN_REPO/qianjia_predCONTAINER_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_REPOCONTAINER_NAME  $LAN_REPO/qianjia_prodCONTAINER_NAME      - docker push $LAN_REPO/qianjia_prodCONTAINER_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_REPOCONTAINER_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,添加如下代码
<!--热部署-->        <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>            <configuration>                <!-- 如果没有该项配置,devtools不会起作用,即应用不会restart -->                <fork>true</fork>            </configuration>        </plugin>        <!--        <plugin>            <groupId>com.spotify</groupId>            <artifactId>docker-maven-plugin</artifactId>            <version>0.4.3</version>            <configuration>                <imageName>registry.cn-beijing.aliyuncs.com/qian2018/qianjia_dev:${project.artifactId}                </imageName>                <dockerDirectory>.</dockerDirectory>                <resources>                    <resource>                        <targetPath>target</targetPath>                        <directory>${project.build.directory}</directory>                        <include>${project.build.finalName}.jar</include>                    </resource>                </resources>            </configuration>        </plugin>    </plugins></build><distributionManagement>    <repository>        <id>server</id>        <name>releases</name>        <url>http://nexus地址:9000/repository/maven-releases/</url>    </repository>    <snapshotRepository>        <id>server</id>        <name>snapshots</name>        <url>http://nexusi地址:9000/repository/maven-snapshots</url>    </snapshotRepository></distributionManagement><repositories>    <repository>        <id>maven-public</id>        <name>maven-public</name>        <url>http://nexus地址:9000/repository/maven-public/</url>        <releases>            <enabled>true</enabled>        </releases>        <snapshots>            <enabled>true</enabled>        </snapshots>    </repository></repositories><pluginRepositories>    <pluginRepository>        <id>maven-public</id>        <name>maven-public</name>        <url>http://39.106.145.141:9000/repository/maven-public/</url>        <releases>            <enabled>true</enabled>        </releases>        <snapshots>            <enabled>true</enabled>        </snapshots>    </pluginRepository></pluginRepositories>项目根目录下添加 Dockerfile文件
FROM  registry-vpc.cn-beijing.aliyuncs.com/qian/qianjia_publicraclejdkVOLUME /tmpadd target/*.jar app.jarENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]开发人员提交代码,自动触发runner流水线Pipelines 中文称为流水线,是分阶段执行的构建任务,一次自动发布流程就称为一次流水线,以上边脚本举例,安装依赖、运行测试、打包、部署开发服务器等整套流程叫做一次流水线
查看流水线:进行gitlab项目目录-----CI/CD----流水线即可查看项目部署的流水线
Stages:Stages 表示构建阶段,一次流水线包括多个stages,在脚本实例中stages定义了一次流水线的三个阶段:第一个阶段:运行测试,进行代码检测,第二个阶段:打包java程序并生成镜像,第三个阶段:执行shell脚本,把容器部署到服务器
每个阶段有tag制定的runner去执行每个阶段按照脚本顺序进行Jobs :表示构建的作业(或称之为任务),表示某个 Stage 里面执行的具体任务。我们可以在 Stages 里面定义多个 Jobs
相同 Stage 中的 Jobs 无执行顺序要求,会并行执行相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功如果任何一个 Job 失败,那么该 Stage 失败总结:一次自动发布流程称为一次流水线,每个流水线有多个阶段,每个阶段有多个任务上边的博客只是写了一个整体发布流程,没有具体写每个工具的使用方法,请自行查阅gitlab比较占内存,必须保证系统的内存在4GB以上,否则可能导致gitlab不能启动

使用高级回帖 (可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则   Ctrl + Enter 快速发布  

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
快速回复 返回顶部 返回列表