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

本次配置全部都是基于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
镜像已经躺好了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容