docker build run 卡住_【实践】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

55c4dfc2ba1aca1f04647d782e9d2d2e.png

注册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配置

    smsorg.springframework.bootspring-boot-maven-plugincom.spotifydocker-maven-plugin0.4.12${project.build.finalName}openjdk:alpine["java", "-jar", "/${project.build.finalName}.jar"]/${project.build.directory}${project.build.finalName}.jar

.gitlab-ci.yml配置

image: docker-maven:alpineservices:
  - redis:3-alpine#Maven 阿里云镜像before_script:
  - rm -rf /root/.m2/settings.xml  - echo -e "<?xml  version=\""1.0\"" encoding=\""UTF-8\""?>alimavenaliyun mavenhttp://maven.aliyun.com/nexus/content/groups/public/central" > /root/.m2/settings.xml# 定义 stagesstages:
  - test  - build# 定义 jobstest app:
  stage: test
  script:
    - echo "I am test job"
    - mvn test# 定义 jobbuild app:
  stage: build
  tags:
    - dockersock
  script:
    - mvn  -Dmaven.test.skip=true clean package docker:build

查看镜像

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

作者:大罗马的太阳
链接:https://www.jianshu.com/p/c1effc3179be

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值