当前位置: 代码迷 >> 综合 >> 【微服务架构 - 09 - 持续集成】01 使用 GitLab 持续集成
  详细解决方案

【微服务架构 - 09 - 持续集成】01 使用 GitLab 持续集成

热度:17   发布时间:2023-11-19 16:17:33.0

使用 GitLab Runner Docker

Dockerfile


/usr/local/docker/runner/environment 目录下创建 Dockerfile

FROM gitlab/gitlab-runner:v11.1.0# 修改软件源
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list && \echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list && \echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list && \echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources.list && \apt-get update -y && \apt-get clean# 安装 Docker
RUN apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - && \add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && \apt-get update -y && \apt-get install -y docker-ce
COPY daemon.json /etc/docker/daemon.json# 安装 Docker Compose
WORKDIR /usr/local/bin
RUN wget https://raw.githubusercontent.com/topsale/resources/master/docker/docker-compose
RUN chmod +x docker-compose# 安装 Java
RUN mkdir -p /usr/local/java
WORKDIR /usr/local/java
COPY jdk-8u152-linux-x64.tar.gz /usr/local/java
RUN tar -zxvf jdk-8u152-linux-x64.tar.gz && \rm -fr jdk-8u152-linux-x64.tar.gz# 安装 Maven
RUN mkdir -p /usr/local/maven
WORKDIR /usr/local/maven
RUN wget https://raw.githubusercontent.com/topsale/resources/master/maven/apache-maven-3.5.3-bin.tar.gz
# COPY apache-maven-3.5.3-bin.tar.gz /usr/local/maven
RUN tar -zxvf apache-maven-3.5.3-bin.tar.gz && \rm -fr apache-maven-3.5.3-bin.tar.gz
# COPY settings.xml /usr/local/maven/apache-maven-3.5.3/conf/settings.xml# 配置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_152
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.5.3
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/binWORKDIR /

daemon.json


/usr/local/docker/runner/environment 目录下创建 daemon.json,用于配置加速器和仓库地址

{"registry-mirrors": ["https://registry.docker-cn.com"],"insecure-registries": ["192.168.75.131:5000"]
}

docker-compose.yml


/usr/local/docker/runner 目录下创建 docker-compose.yml

version: '3.1'
services:gitlab-runner:build: environmentrestart: alwayscontainer_name: gitlab-runnerprivileged: truevolumes:- /usr/local/docker/runner/config:/etc/gitlab-runner- /var/run/docker.sock:/var/run/docker.sock

注册 Runner

docker exec -it gitlab-runner gitlab-runner register# 输入 GitLab 地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.106.134:8080/# 输入 GitLab Token
Please enter the gitlab-ci token for this runner:
1Lxq_f1NRfCfeNbE5WRh# 输入 Runner 的说明
Please enter the gitlab-ci description for this runner:
可以为空# 设置 Tag,可以用于指定在构建规定的 tag 时触发 ci
Please enter the gitlab-ci tags for this runner (comma separated):
deploy# 选择 runner 执行器,这里我们选择的是 shell
Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh:
shell

项目配置 Dockerfile

FROM openjdk:8-jreENV APP_VERSION 1.0.0-SNAPSHOT
ENV DOCKERIZE_VERSION v0.6.1
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \&& rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gzRUN mkdir /appCOPY itoken-eureka-$APP_VERSION.jar /app/app.jar
ENTRYPOINT ["dockerize", "-timeout", "5m", "-wait", "tcp://192.168.75.128:8888", "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar", "--spring.profiles.active=prod"]EXPOSE 8761

项目配置 docker-compose.yml

version: '3.1'
services:itoken-eureka:restart: alwaysimage: 192.168.106.137:5000/itoken-eurekacontainer_name: itoken-eurekaports:- 8761:8761networks:- eureka_networknetworks:eureka_network:

.gitlab-ci.yml

stages:- build- push- run- clean# 构建
build:stage: buildscript:- /usr/local/maven/apache-maven-3.5.3/bin/mvn clean package- cp target/itoken-config-1.0.0-SNAPSHOT.jar docker- cd docker- docker build -t 192.168.106.137:5000/itoken-config .# 推送
push:stage: pushscript:- docker push 192.168.106.137:5000/itoken-config# 运行
run:stage: runscript:- cd docker- docker-compose down- docker-compose up -d# 清除多于的虚悬镜像
clean:stage: cleanscript:- docker rmi $(docker images -q -f dangling=true)