Gitlab-CI 发布SpringBoot应用到docker

一、使用gitlab-ci

1.编写springboot应用。

目录结构如下

2.编写Dockerfile文件,我这里写得比较简单

FROM primetoninc/jdk:1.8
MAINTAINER   axiba@qq.com
ADD target/ci-docker.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

3.编写.gitlab-ci.yml文件

variables:
  CI_DOCKER_CONTAINER: "ci-docker"
  CI_DOCKER_IMAGE: "ci-docker-image"
  CI_DOCKER_NAME: "ci-docker"
  CI_DOCKER_PORT: 8080
stages:
  - test
  - build
  - deploy
  - scanner

test:job:
  stage: test
  script:
    - echo "test job start"

build:job:
  image: maven:3.3.9-jdk-8
  stage: build
  script:
    - echo "build job start"
    - mvn clean package -Dmaven.test.skip=true
    - echo "install success"
  artifacts:
    paths:
      - target/ci-docker.jar
    when: on_success
  only:
    - master
  tags:
    - ifun-docker

deploy:job:
  image: docker:latest
  stage: deploy
  script:
    - echo "deploy job start"
    - docker ps -a|grep $CI_DOCKER_CONTAINER &&  docker stop $CI_DOCKER_CONTAINER && docker rm $CI_DOCKER_CONTAINER || echo "not exist"
    - docker images |grep  $CI_DOCKER_IMAGE && docker rmi -f $CI_DOCKER_IMAGE || echo  "not exist"
    - docker build -t $CI_DOCKER_IMAGE  .
    - docker run -d -p 80:$CI_DOCKER_PORT --name=$CI_DOCKER_NAME $CI_DOCKER_IMAGE
  only:
    - master
  tags:
    - ifun-docker

scanner:job:
  stage: scanner
  script:
    - echo "代码扫描"
    - mvn sonar:sonar -Dsonar.projectKey=ci-docker -Dsonar.host.url=http://192.168.80.10:9000 -Dsonar.login=3c4da7f061cae0c07b5f1a73f9e17b42cf0b6512
  only:
    - master
  tags:
    - ifun-docker

简单解释一下,分为了三个阶段,test、build、deploy、scanner

test中简单的打印了一下;build阶段使用maven打包,并将jar包上传到artifacts中;deploy阶段先删除容器,再删除镜像,然后创建镜像,运行容器。scanner阶段是代码扫描阶段,可以不用写。

4.docker 容器运行结果

5.测试请求是否成功。

6.代码扫描结果

二、问题汇总

1.mvn command not found

这是你的gitlab-runner所在的服务器中没有安装maven,需要安装。

2.no main manifest attribute, in app.jar,这是没有指定mainclass,需要在pom.xml中指定

    <build>
        <finalName>ci-docker</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.3.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>com.it.fun.App</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

这是权限不足,我们gitlab-runner运行的时候默认的是gitlab-runner用户,他是没有docker权限的。

# 添加docker用户组和docker用户,并将用户添加到组中
groupadd -r docker
useradd -g docker -r docker -p 'password here'
# 然后将gitlab-runner添加到docker组中
usermod -aG docker gitlab-runner
# 最后将docker服务停止,切换到docker用户再重新启动服务,gitlab-runner用户就和docker用户组一样有rw权限
service docker stop
su docker
sudo service docker start

4.如果一个job一直pending状态,没有runner来执行,解决方法有两种:

1> 绑定tags

2> 修改任意一个runner,让他可以运行没有绑定tags的任务。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值