最后更新于2021年5月28日 17:25:24
网上找了好多资料,心力交瘁终于是完成了自己项目的部署,想着造福大众,写点东西放上来,也算是为社区做点贡献。
Docker Gitlab CI 部署 Spring Boot 项目
准备工作:
安装docker:
apt install docker //安装docker
docker -v //查看安装是否成功
打jar包,build镜像,run容器,测试一下
先把自己的项目手动搞到docker里试一试,回头做CI的时候能少好多麻烦,对于菜鸡来说也有助于理解。太简单了,这部分内容我放到本文最后了。
在docker中部署gitlab-runner容器
拉取runner镜像
sudo docker pull gitlab/gitlab-runner:latest
run起容器来
docker run -d --name gitlab-runner --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:latest
这里的-v /srv/gitlab-runner/config:/etc/gitlab-runner
一定要暴露出来,方便修改配置;docker.sock不知道干啥的,回头研究一下。
接下来在gitlab上注册runner。
docker exec -it gitlab-runner gitlab-ci-multi-runner register
一
fatal: unable to access ‘http://XX.XX/XX/XX.git/’: Could not resolve host: XX.XX
运行docker-runner容器的命令是这样的。
docker run -d --name gitlab-runner --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:latest
这里将config文件从容器里映射到宿主机了。
我的问题原因是仓库使用的公司内部服务器,根据域名pull不到gitlab上的仓库,最后在/srv/gitlab-runner/config.toml里面加了这样一句,相当于绕过域名,直接取了域名的ip地址来克隆仓库。
[[runners]]
name = "spring and docker runner"
url = "http://17x.xxx.xxx.xxx/"
token = "XXXXXXXXXXXXXXXXXX"
executor = "docker"
clone_url = "http://17x.xxx.xxx.xxx" //就这句就这句就这句就这句就这句就这句
gitlab-runner执行ci报错fatal: unable to access 'http://gitlab-ci-token:xxxxxx@ip/xxx/citest.git 谢谢这个大哥的方法。
二
Gitlab -ci :前后端项目加载缓存,减少构建时间
这个真的好使,无脑复制粘贴就行,大大减少maven打包阶段的耗时。
三
打包完成后根据Dockerfile添加镜像,好坑,坑死我了。报错如下:
Step 4/6 : ADD enhanced-0.0.2-Receiver.jar app.jar
ADD failed: file not found in build context or excluded by .dockerignore: stat enhanced-0.0.2-Receiver.jar: file does not exist
关键就在于上面的maven-package:artifacts:name,还有paths这两项,还有Dockerfile里面一定要写/target/enhanced-0.0.2-Receiver.jar这样。这几个名字必须得统一了。
简单的jar包部署
在/home目录或任何你喜欢的地方新建文件夹,我喜欢这样建:/home/{用户名}/docker/{项目名}/
该目录下放Dockerfile和你打的jar包。
我从网上抄的Dockerfile,这个很好理解,很简单。
# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER eangulee <eangulee@gmail.com>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD qqqqqqq.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
cd到该目录下,输入build镜像的命令,最后面一定要有个点
docker build -t qqqqqqq .
docker images
查看当前所有镜像。
run容器:一堆参数随便加加(杂文(10)docker常用命令及其参数总结),反正测试嘛。
docker run --name=qqqqqqq -dit --restart=always -p 6324:6324 qqqqqqq
能跑就行,要啥自行车,删掉制造的垃圾。
docker stop qqqqqqq
docker rm qqqqqqq
docker rmi qqqqqqq