0
点赞
收藏
分享

微信扫一扫

docker-gitlab-runner 持续集成CI

倪雅各 2022-03-11 阅读 67
docker容器

gitlab CI/CD

GitLab-CI就是一套配合GitLab使用的持续集成系统(当然,还有其它的持续集成系统,同样可以配合GitLab使用,比如Jenkins)。

GitLab-Runner 是什么呢,它就是CI\CD 干活的那个人,它可以在不同服务器,也可以在任何地方,只要你能通知到它。

1、docker hub 官方找搜索 gitlab/gitlab-runner 我选择了一个 gitlab/gitlab-runner:alpine3.15-bleeding
2、创建文件 docker-gitlab-runner.yml ,这个文件名可以随便取名,只要你能认识,
编写内容

services:
   gitlab-runner:
    image: gitlab/gitlab-runner:alpine3.15-bleeding
    container_name: gitlab-runner # 容器名称
    restart: always
    volumes:
      - "./gitlab_runner:/etc/gitlab-runner"  #挂在配置文件在当前目录
      - "/var/run/docker.sock:/var/run/docker.sock"  #这个docker.sock 一定要挂在宿主机,var/run下 不然不能通讯

3、 运行 docker-compose -f docker-gitlab-runner.yml up -d
这个时候你查看 日志 会有一个错误 说是找不到 config.toml这个配置文件

ERROR: Failed to load config stat /etc/gitlab-runner/config.toml: no such file or directory  builds=0

这个暂时不用管它,待会儿注册了,就有这个文件了,注册到gitlab前,先准备两个东西
登录进入你的gitlab
项目 - 设置 - CI/CD - Runner 然后展开Runner
在这里插入图片描述
这里2、3步骤,在注册runner的时候需要用
4、执行以下命令,第一个gitlab-runner是你的容器名称(根据实际你的容器名称为准,如果你有指定参数:container_name 后面哪个就是你名称,没有的话,可以通过docker ps 查看),第二个gitlab-runner是容器中的默认授权用户,一般你启动没有特殊处理就默认输入这个。
docker exec -it gitlab-runner gitlab-runner register
接下来会让我们输入一些参数

完成之后 你会看到 这句话,
Runner registered successfully. Feel free to start it, but if it’s running already the config should be automatically reloaded!

4、在 项目 - 设置 - CI/CD - Runner 你就可以看到已经注册了一个runner 了,
在这里插入图片描述
5、这个时候你的CI/CD 管道就搭建好了, 你脑海中有几个构建流程 比如: 编译-打包成img-推送到你的私有habor -发布运行等等,可能有无数个环节,一个runner能完成吗? 当然是可以的,闲的蛋疼你也可以多整几个,也都是可以的。应为指定用哪个runner 是在.gitlab-ci.yml 里面指定的。

我们先以一个 简单的spring boot 程序为列子 做一个简单的
问题一: gitlab runner 是在docker 容器里执行, 打包肯定要用maven 用docker镜像岂不是默认都是国外拉取,最主要有些jar包可能还没有,可能是我们内部jar
解决方案 :在gitlab-ci文件中添加下面配置,可以创建一个,其实也就是把maven文件写在里面了

before_script:
  - rm -rf /root/.m2/settings.xml
  - echo -e "<?xml version=\""1.0\"" encoding=\""UTF-8\""?><settings xmlns=\""http://maven.apache.org/SETTINGS/1.0.0\"" xmlns:xsi=\""http://www.w3.org/2001/XMLSchema-instance\"" xsi:schemaLocation=\""http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd\""><mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror></mirrors></settings>" > /root/.m2/settings.xml

问题2:拉取的jar 包,都是存放在docker容器里,每次重启岂不是都没了,从新拉取,编译会变得很慢

解决方案:docker-gitlab-runner.yml 里面我们把配置文件 映射到宿主机 当前目录下gitlab_runner 文件夹里,找到打开,里面有一个配置文件 config.toml

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "build_runner" #我们之前指定的名称
  url = "http://192.168.100.51:8088/"
  token = "f4ce8524f47657a3abeb226bd7dc7c"
  executor = "docker" #执行器,也是我们注册的时候选择的
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "latest" # 我们前面注册指定的docker 版本,这里可以更改 好像只有docker:latest、docker:dind 和 docker:git
    privileged = fasle
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/.m2:/root/.m2"] #把容器内部的sock 映射到外面, 主要的还是 root/.m2 maven.xml,包括repository 
    shm_size = 0
	pull_policy = "if-not-present" #images 依赖拉取策略:如果本地有就不检查,如果没有就拉取,我们可能用到的 maven,node来编译工具拉取一次就行了

.m2 文件都挂在出来了,在把自己的maven.xml上传进去,问题1也一并解决了

6、在gitlab 拉取一个项目在根目录创建一个 .gitlab-ci.yml
在这里插入图片描述

variables:  #定义变量 用法  $jar_name   (gilab 里面- ci/cd-变量 也可以设置 系统变量,这里面也能用,一般用户账号密码之类的)
  jar_name: ttbgz_test.jar
  jdk_image: openjdk:8-jre-slim
  app_images_name: ttbgz_test:v0.0.1
#定义执行顺讯
stages:
  - build  #编译
  - package #打包 image
  - deploy #推送 harbor
  - start #启动


job1:
  image: maven:3.8.4-openjdk-8 #openjdk:8u322-slim-bullseye
  stage: build
  script:
    - mvn clean package -Dmaven.test.skip=true
  tags:
    - maven #哪个执行器
  artifacts:
    paths:
      - target/$jar_name
job2:
  stage: package
  image: docker:latest #依赖基础镜像 docker:git 是包含了 git 命令的 docker:latest,方便 CI 时使用 Git。
  tags:
    - docker #哪个执行器
  script:
    - echo package image
    - docker build -t $app_images_name . #  构建镜像
    - docker login -u $HARBOR_USERNAME -p $HARBOR_PWD $HARBOR_URL # 登录镜像仓库
    # docker tag SOURCE_IMAGE[:TAG] 192.168.100.51:8080/ttbgz/REPOSITORY[:TAG]
    - docker tag $app_images_name ttbgz/$app_images_name
    - docker push 192.168.100.51:8080/ttbgz/$app_images_name # 推送镜像
    - docker rmi $app_images_name # 删除本地镜像

7、Dockerfile

#指定待扩展的父级镜像(基础镜像)。除了
FROM openjdk:8-jre-slim
#作者
MAINTAINER ttbgz
#RUN:用来修改镜像的命令,常用来安装库、程序以及配置程序。一条RUN指令执行完毕后,会在当前镜像上创建一个新的镜像层,接下来对的指令会在新的镜像上继续执行。RUN 语句有两种形式:
#RUN yum update:是在/bin/sh环境中执行的指令的命令
#RUN ["yum", "update"]:直接使用系统调用exec来执行行。
#RUN yum update && yum install nginx:使用&&符号将多条命令连接在同一条RUN语句中。
#设置target 为工作目录
#用来指明容器内进程对外开放的端口,多个端口之间使用空格隔开
EXPOSE 8081

# 将targer目录下的jar包复制到docker容器/home/springboot目录下面目录下面
COPY /target/ttbgz_test.jar /home/springboot/ttbgz_test.jar

#通过shell 命令启动
ENTRYPOINT java ${JAVA_OPTS} -jar /home/springboot/ttbgz_test.jar

这里只演示了打包,已经打成镜像,上传到 自己的harbor
在这里插入图片描述

举报

相关推荐

06 docker-gitlab-runner CD

0 条评论