领导说要用这玩意持续集成,咱也没弄过,弄了三天,n多个坑,终于可以了,特此记录!
使用gitlab ci 持续集成部署
先来看下总共这一百来个的成果
需要的环境说明:
gitlab 服务
springboot项目
一台虚拟机(java,maven,docker环境)
一、首先构建虚拟机的java和maven环境
(1)下载 apache-maven-3.6.3-bin.tar.gz
和jdk-linux-x64.tar.gz
然后后解压
tar -zxvf /usr/local/jdk8/jdk-linux-x64.tar.gz
tar -zxvf /usr/local/jdk8/apache-maven-3.6.3-bin.tar.gz
(2)配置环境变量 /etc/profile
JAVA_HOME=/usr/local/jdk8/jdk1.8.0_131
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
maven: 如果提示命令未找到,执行
sudo apt install maven
mvn help:system
二、安装 GitLab-Runner
(1)在虚拟机安装runner
#在ubuntu server16.04版本下使用命令即可安装
$ sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
#接着授予可执行权限
$ sudo chmod +x /usr/local/bin/gitlab-runner
#创建一个gitlab-ci用户
$ sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
#安装,并作为服务启动
$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
(2)注册Runner
sudo gitlab-runner register
会要求输入gitlab的url和Token.查找过程如下:进入仓库->settings->CI/CD,找到Runner Settings这一项,点击Expend,即可在Setup a specific Runner manually这项中找到
(3)当这些做完之后启用命令启动Runner
gitlab-runner run 或者 gitlab-runner start
启动成功后就可以看到,gitlab对应的仓库下(操作:进入仓库->settings->CI/CD,找到Runner Settings这一项,点击Expend,即可在Setup a specific Runner manually)看到注册的runner已经在运行了。
三、配置 文件 Dockerfile和.gitlab-ci.yml
(1).gitlab-ci.yml
package是打包
deploy 是部署
stages:
- package
- deploy
package:
stage: package
script:
- mvn clean package install -pl smart-ele-common -am
- mvn clean package -pl smart-ele-api -am
#- mvn clean package -pl smart-ele-dispatch -am
artifacts:
when: on_success
paths:
- target/
tags:
# 执行Job的服务器
- smart
docker-deploy:
stage: deploy
# 执行Job内容
script:
# 通过Dockerfile生成cicd-demo镜像
- docker build -t smart-ele-api .
# 删除已经在运行的容器
#- if [ $(docker ps -aq --filter name= smart-ele-api) ]; then docker rm -f smart-ele-api;fi
# 通过镜像启动容器,并把本机8877端口映射到容器8877端口
- docker run -d -p 8877:8877 --name smart-ele-api smart-ele-api
# 通过Dockerfile生成smart-ele-dispatch镜像
- docker build -t smart-ele-dispatch .
# 删除已经在运行的容器
#- if [ $(docker ps -aq --filter name= smart-ele-dispatch) ]; then docker rm -f smart-ele-dispatch;fi
# 通过镜像启动容器,并把本机8001端口映射到容器8001端口
- docker run -d -p 8866:8866 --name smart-ele-dispatch smart-ele-dispatch
tags:
# 执行Job的服务器
- smart
only:
# 只有在master分支才会执行
- master
(2)Dockerfile
FROM java:8
#工作目标目录
WORKDIR /home
#dockerfile文件一定要在项目的根目录
# smart-ele-api
#前面的是从dockerfile的目录结构开始,那么就直接找到当前目录下的api
COPY smart-ele-api/target/smart-ele-api.jar .
RUN ls /home/
#赋权限
RUN chmod 777 /home/smart-ele-api.jar
#启动
ENTRYPOINT ["nohup","java", "-jar", "/home/smart-ele-api.jar"]
#暴露端口
EXPOSE 8877
#此处不能同时给两个jar,如果给了两个也会覆盖掉或者后者不生效,得采用其他方式
#smart-ele-dispatch
#COPY smart-ele-dispatch/target/smart-ele-dispatch.jar .
#RUN ls /home/
#RUN chmod 777 /home/smart-ele-dispatch.jar
#启动
#ENTRYPOINT ["nohup","java", "-jar", "/home/smart-ele-dispatch.jar"]
#EXPOSE 8866
到这里就会发现上传没问题,然后查看docker也运行起来了
docker ps -a
查看docker执行的日志 sudo docker attach --sig-proxy=false smart-ele-api
遇到的问题整理
1.发现执行了之后就自动关闭了,然后就找为什么会自动关闭的原因
1.没加nohup?
2.打印日志sudo docker logs -f -t --since=“2020-12-10” --tail=100 smart-ele-api
发现找不到启动的jar
然后去查看执行的路径,发现copy 的路径不对,和build上下文的路径有关系
这里是之前配置错误例子,上面是正确例子
FROM openjdk:8-jre
#COPY /home/gitlab-runner/builds/HFkBbk1A/0/weijianxing/smart-ele-module/smart-ele-api/target/smart-ele-api.jar /home/gitlab-runner/smart-ele-api.jar
ENTRYPOINT ["nohup","java", "-jar", "/home/gitlab-runner/builds/HFkBbk1A/0/weijianxing/smart-ele-module/smart-ele-api/target/smart-ele-api.jar"]
EXPOSE 8000
#COPY /home/gitlab-runner/builds/HFkBbk1A/0/weijianxing/smart-ele-module/smart-ele-dispatch/target/smart-ele-dispatch.jar /home/gitlab-runner/smart-ele-dispatch.jar
ENTRYPOINT ["nohup","java", "-jar", "/home/gitlab-runner/builds/HFkBbk1A/0/weijianxing/smart-ele-module/smart-ele-dispatch/target/smart-ele-dispatch.jar"]
EXPOSE 8001