领导说要用这玩意持续集成,咱也没弄过,弄了三天,n多个坑,终于可以了,特此记录!

使用gitlab ci 持续集成部署

先来看下总共这一百来个的成果

docker运行gitee源 docker gitlab cicd_jar

需要的环境说明:
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这项中找到

docker运行gitee源 docker gitlab cicd_git_02

(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

docker运行gitee源 docker gitlab cicd_git_03

遇到的问题整理

1.发现执行了之后就自动关闭了,然后就找为什么会自动关闭的原因

docker运行gitee源 docker gitlab cicd_git_04

1.没加nohup?
2.打印日志sudo docker logs -f -t --since=“2020-12-10” --tail=100 smart-ele-api

发现找不到启动的jar

然后去查看执行的路径,发现copy 的路径不对,和build上下文的路径有关系

docker运行gitee源 docker gitlab cicd_docker运行gitee源_05


这里是之前配置错误例子,上面是正确例子

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