美文网首页docker 部署
spring boot项目基于docker、gitlab持续集成

spring boot项目基于docker、gitlab持续集成

作者: 大罗马的太阳 | 来源:发表于2016-12-27 15:46 被阅读2615次

    本次配置全部都是基于docker的环境进行。
    其中使用了gitlabgitlib-cidockerspring bootmaven等技术。
    请首先安装docker

    背景

    使用spring boot 开发 短信发送程序,并自建gitlab作为代码版本管理,使用gitlab-ci作为持续CI/CD工具。
    所有工具运行在docker之上。

    下面提到的

    • git.sdibt.com是我配置的gitlab域名,请自行替换。
    • sms 是maven project name,请自行替换。

    一、Gitlab 配置

    docker stop gitlab && docker rm gitlab
    docker run --detach \
            --hostname git.sdibt.com \
            --publish 443:443 \
            --publish 80:80 \
            --publish 22:22 \
            --name gitlab \
            --restart always \
            --env 'GITLAB_TIMEZONE=Beijing' \
            --volume "$PWD"/srv/gitlab/config:/etc/gitlab \
            --volume "$PWD"/srv/gitlab/logs:/var/log/gitlab \
            --volume "$PWD"/srv/gitlab/data:/var/opt/gitlab \
            gitlab/gitlab-ce
    

    其中GITLAB_TIMEZONE=Beijing 使用了 ruby on rails 的时区设置。通过--volume 将配置放在容器外,便于以后升级。

    二、GitlabRunner配置

    从project中获取注册Runner的token


    注册runner所需url、token获取页面截图

    请用上图所示的url、token 替换下面提到的url、token

    1、启动runner

    docker run -d --name gitlab-runner-dockersock \
            --restart always \
            -v /var/run/docker.sock:/var/run/docker.sock \
            -v "$PWD"/srv/gitlab-runner/config:/etc/gitlab-runner \
             gitlab/gitlab-runner:alpine
    

    将docker.sock挂载到Runner中,将配置文件保存在"$PWD"/srv/gitlab-runner/config

    2、注册runner

    docker exec -it gitlab-runner-dockersock  gitlab-runner register -n \
      --url http://gitlab.8dat.com/ci \
      --registration-token bfab7e07b5e57c1e0ac2dc37ff4475 \
      --tag-list=dockersock,docker \
      --description "dockersock" \
      --docker-privileged=true \
      --docker-pull-policy="if-not-present" \
      --docker-image "docker:latest" \
      --docker-volumes /var/run/docker.sock:/var/run/docker.sock \
      --docker-volumes /root/m2:/root/.m2 \
      --executor docker 
    
    

    给runner设置了tag后,可以在.gitlab-ci.yml中指定job运行的runner。tag一般是用来区分不同类型的runner,或标志特定配置的runner。

    生成的配置文件 cat /etc/gitlab-runner/config.toml,如下所示:

    [[runners]]
      name = "dockersock"
      url = "http://git.sdibt.com/ci"
      token = "bfab7e07b5e57c1e0ac2dc37ff4475"
      executor = "docker"
      [runners.docker]
        tls_verify = false
        image = "docker:latest"
        privileged = true
        disable_cache = false
        volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/m2:/root/.m2"]
        pull_policy = "if-not-present"
      [runners.cache]
    
    • volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/m2:/root/.m2"]中增加了/root/m2:/root/.m2,避免maven每次都下载jar包,提高效率。
    • pull_policy = "if-not-present" 避免docker 镜像每次都pull

    3、可以运行docker的maven镜像

    dockerhub上的maven镜像并不能执行docker命令,导致我们无法使用docker build 等命令。所以我们自己制作一个docker_maven镜像。

    FROM maven:alpine
    RUN apk add --no-cache \
            ca-certificates \
            curl \
            openssl
    ENV DOCKER_BUCKET get.docker.com
    ENV DOCKER_VERSION 1.12.5
    ENV DOCKER_SHA256 0058867ac46a1eba283e2441b1bb5455df846144f9d9ba079e97655399d4a2c6
    RUN set -x \
        && curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz" -o docker.tgz \
        && echo "${DOCKER_SHA256} *docker.tgz" | sha256sum -c - \
        && tar -xzvf docker.tgz \
        && mv docker/* /usr/local/bin/ \
        && rmdir docker \
        && rm docker.tgz \
        && docker -v
    

    docker build -t docker-maven:alpine . 得到镜像文件。

    三、项目配置

    pom.xml配置

        <build>
            <finalName>sms</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <!-- docker的maven插件,官网:https://github.com/spotify/docker-maven-plugin -->
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.4.12</version>
                    <configuration>
                        <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
                        <!-- 详见:https://github.com/spotify/docker-maven-plugin    Invalid repository name ... only [a-z0-9-_.] are allowed-->
                        <imageName>${project.build.finalName}</imageName>
                        <baseImage>openjdk:alpine</baseImage>
                        <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    
    

    .gitlab-ci.yml配置

    image: docker-maven:alpine
    services:
      - redis:3-alpine
    
    #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
    
    # 定义 stages
    stages:
      - test
      - build
    
    # 定义 jobs
    test app:
      stage: test
      script:
        - echo "I am test job"
        - mvn test
    
    # 定义 job
    build app:
      stage: build
      tags:
        - dockersock
      script:
        - mvn  -Dmaven.test.skip=true clean package docker:build
    

    查看镜像

    docker images | grep sms
    镜像已经躺好了。

    相关文章

      网友评论

        本文标题:spring boot项目基于docker、gitlab持续集成

        本文链接:https://www.haomeiwen.com/subject/iofevttx.html