平台 -- 持续集成的一小步 GitLab-Runner

持续集成


持续集成指的是,频繁地(一天多次)将代码集成到主干。它的好处主要有两个:

  • 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
  • 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续交付


持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。

持续部署


持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

持续部署的前提是能自动化完成测试、构建、部署等步骤。

GitLab 持续集成


GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成。 而且随着 GitLab 的升级,GitLab CI 变得越来越强大。

  1. Pipeline 任何提交或者 Merge Request 的合并都可以触发 Pipeline

  2. Stages 表示构建阶段,说白了就是上面提到的流程。我们可以在一次 Pipeline 中定义多个 Stages

  3. Jobs 表示构建工作,表示某个 Stage 里面执行的工作。我们可以在 Stages 里面定义多个 Jobs

GitLab-Runner 安装


1.创建环境

java开发需要依赖jdkmaven,所以我们先准备好这2个压缩包。

还需要构建我们的镜像,所以需要Docker的加速器,daemon.json

第一步 创建文件夹(此处显示最终结果) ,其实就是创建了environment

/usr/local/docker/runner/docker-compose.yml
/usr/local/docker/runner/environment

第二步 把jdk,maven,daemon.json 复制一份放入environment

/usr/local/docker/runner/environment/Dockerfile
/usr/local/docker/runner/environment/apache-maven-3.6.1-bin.tar.gz
/usr/local/docker/runner/environment/daemon.json
/usr/local/docker/runner/environment/jdk-8u152-linux-x64.tar.gz

第三步 构建Dockerfile

FROM gitlab/gitlab-runner:v11.0.2

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
# 拷贝本地daemon.json 到容器/etc/docker
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
COPY apache-maven-3.6.1-bin.tar.gz /usr/local/maven
RUN tar -zxvf apache-maven-3.6.1-bin.tar.gz && \
    rm -fr apache-maven-3.6.1-bin.tar.gz

# 修改环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_152
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.6.1
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

WORKDIR /

安装 docker-compose 可能比较慢所以自己上传docker-compose

mavenconf/settings.xml 也需要使用自己的 或者自己添加<servers> 节点,不然jar包下载不下来。

2.启动

在上级目录创建docker-compose.yml

version: '3.1'
services:
  gitlab-runner:
    build: environment
    restart: always
    container_name: gitlab-runner
    privileged: true
    volumes:
      - /usr/local/docker/runner/config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock

注意这里没有image而是build,就是会执行environmentDockerfile

注册Runner


注册 Runner

docker exec -it gitlab-runner gitlab-runner register
Running in system-mode.                            
## gitlab地址 在每隔项目的 CI/CD里                                                  
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.0.108:8080/
## 项目token 在地址下面
Please enter the gitlab-ci token for this runner:
LF5BAxgujUWx4GHJAxoX
## 描述可以不写
Please enter the gitlab-ci description for this runner:
[2c13c51abfde]: 
## tags 
Please enter the gitlab-ci tags for this runner (comma separated):

Registering runner... succeeded                     runner=LF5BAxgu
## 执行方式,shell 
Please enter the executor: ssh, virtualbox, kubernetes, docker-ssh, parallels, docker+machine, docker-ssh+machine, docker, shell:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

此处的token 在项目 --> 设置 --> CI/CD --> Runner,先填写项目的 URL ,在填写token,说明可以不用写,tags可以不用写,使用shell完成。每一个项目都要注册Runner

.gitlab-ci.yml

stages:
  - build
  - push
  - run
  - clean

## 安装依赖
build:
  stage: build
  script:
    - /usr/local/maven/apache-maven-3.6.1/bin/mvn clean package
    - cp target/my-shop-1.0.0-SNAPSHOT.jar docker
    - cd docker
    - docker build -t 192.168.0.108:5000/my-shop .

## 推送镜像到Registry平台
push:
  stage: push
  script:
    - docker push 192.168.0.108:5000/my-shop

## 删除虚悬镜像
clean:
  stage: clean
  script:
    - docker rmi $(docker images -q -f dangling=true)

通过docker exec -it gitlab-runner bin/shell

访问/home/gitlab-runner/builds/ 访问项目

总结


利用DockerCompose+jdk+maven来部署我们的项目已经很简单了,现在只要修改了代码并且提交代码或者合请求就可以自动帮我们打包,上传到Registry平台,其他局域网的服务器,只要安装了Docker就可以轻松pull下来。

发布了27 篇原创文章 · 获赞 4 · 访问量 915

猜你喜欢

转载自blog.csdn.net/weixin_42126468/article/details/103600116