用gitlab-cicd简单快速部署

前言

使用gitlab+gitlab-runner部署一个简单的项目。没有用Jenkins , k8s ,MINIO。gitlab-cicd的命令语法还是需要去学习了解一下的: https://docs.gitlab.com/ee/ci/yaml/
我创建了一个简单的测试项目(JDK 17+ Gradle7.6.1), 你们可以按照自己想部署的项目更改一下条件
如果你们服务器有条件的话,可以加上 MINIO做分布式缓存

项目添加runner:并且是running状态的:
在这里插入图片描述
一般常用这两种executor执行模式 docker 和 shell .

  1. 创建Dockerfile文件
    因为我习惯了用docker运行服务,这个估计很多人项目都会加
FROM openjdk:17

# 第一个是编译镜像时文件位置 第二个是将文件复制到镜像(/data/lib/docker-images/reactive-test-0.0.1-SNAPSHOT.jar)中
COPY build/libs/reactive-test-0.0.1-SNAPSHOT.jar  /data/lib/docker-images/reactive-test-0.0.1-SNAPSHOT.jar

# 镜像所暴露出的端口(定义一个不冲突的即可),用于访问镜像使用,后边会和jar的项目端口对接
EXPOSE 8081

# 设置容器的入口程序,直接使用镜像名即可
ENTRYPOINT ["java","-jar","/data/lib/docker-images/reactive-test-0.0.1-SNAPSHOT.jar"]

  1. 在项目根部创建.gitlab-ci.yml文件,

runner是docker类型 :

可以检查一下配置:

vim /data/gitlab-runner/config/config.toml

我建议加上这个配置,更改对应的runner config:

volumes = ["/cache","/usr/bin/docker:/usr/bin/docker", "/var/run/docker.sock:/var/run/docker.sock"] #使用主机的docker
pull_policy = "if-not-present" # 先检查本地缓存,存在就不下载了

.gitlab-ci.yml文件添加:

cache:
  key: $CI_COMMIT_REF_SLUG
  paths:
    - ./   # 可以改成缓存build或者target目录下面的

stages:
  - build
  - deploy
build:
  stage: build
  tags:
    - test
  only:
    refs:
      - main
  image: azul/zulu-openjdk:17.0.6
#  image: gradle:6.7.1-jdk8   # 如果环境是可以用jdk8的话,可以换成这个image
  script:
    - ./gradlew clean
    - ./gradlew build
deploy:
  variables:
    DOCKER_HOST: unix:///var/run/docker.sock
    IMAGE_REGISTRY_URL: "xxxxx"   #我是用腾讯云镜像地址的,你们改成自己的
    IMAGE_TAG: "$CI_COMMIT_SHA"
    IMAGE_FULL_NAME: "$IMAGE_REGISTRY_URL/test-i/test:$CI_COMMIT_REF_SLUG-$IMAGE_TAG"
    IMAGE_REGISTRY_USER: "xxxxxxx"     #我是用腾讯云镜像仓库分配的user,你们改成自己的
    DOCKER_FILE_PATH: "./Dockerfile"
  stage: deploy
  tags:
    - test
  only:
    refs:
      - main
  image: docker:stable
  services:
      - docker:dind
  before_script:
    - echo "$CI_REGISTRY_USER"
    - echo "$CI_REGISTRY_IMAGE"
    - echo "$CI_REGISTRY"
    - echo "$IMAGE_FULL_NAME"
  script:
    - docker login $IMAGE_REGISTRY_URL --username=$IMAGE_REGISTRY_USER --password $IMAGE_REGISTRY_PASSWORD
    - docker build -t $IMAGE_FULL_NAME -f $DOCKER_FILE_PATH .
    - docker push $IMAGE_FULL_NAME
    - if [ $(docker ps -aq --filter name=reactive-test) ]; then docker rm -f reactive-test;fi
    - docker run --name reactive-test -d -p 8081:20000 $IMAGE_FULL_NAME
#    - docker rmi $IMAGE_FULL_NAME    # 如果执行器是用shell的话,可以加上

runner是shell类型 :

.gitlab-ci.yml文件添加:

cache:
  key: $CI_COMMIT_REF_SLUG
  paths:
    - ./build/libs/*.jar    # 可以改成缓存build或者target目录下面的

stages:
  - build
  - deploy
build:
  stage: build
  tags:
    - test
  only:
    refs:
      - main
  script:
    - ./gradlew clean
    - ./gradlew build
deploy:
  variables:
    DOCKER_HOST: unix:///var/run/docker.sock
    IMAGE_REGISTRY_URL: "xxxxx"   #我是用腾讯云镜像地址的,你们改成自己的,也可以自己搭建,搭建命令后面会补充自己去尝试,自己尝试创建仓库和空间
    IMAGE_TAG: "$CI_COMMIT_SHA"
    IMAGE_FULL_NAME: "$IMAGE_REGISTRY_URL/test-i/test:$CI_COMMIT_REF_SLUG-$IMAGE_TAG"
    IMAGE_REGISTRY_USER: "xxxxxxx"     #我是用腾讯云镜像仓库分配的user,你们改成自己的
    DOCKER_FILE_PATH: "./Dockerfile"
  stage: deploy
  tags:
    - test
  only:
    refs:
      - main
  before_script:
    - echo "$CI_REGISTRY_USER"
    - echo "$CI_REGISTRY_IMAGE"
    - echo "$CI_REGISTRY"
    - echo "$IMAGE_FULL_NAME"
  script:
    - docker login $IMAGE_REGISTRY_URL --username=$IMAGE_REGISTRY_USER --password $IMAGE_REGISTRY_PASSWORD
    - docker build -t $IMAGE_FULL_NAME -f $DOCKER_FILE_PATH .
    - docker push $IMAGE_FULL_NAME
    - if [ $(docker ps -aq --filter name=reactive-test) ]; then docker rm -f reactive-test;fi
    - docker run --name reactive-test -d -p 8081:20000 $IMAGE_FULL_NAME
  after_script:
    # 查找$IMAGE_REGISTRY_URL/test-i/test:前缀名字的镜像id并删除,但是这里会删除不了正在运行的镜像,这个提示会有error,但并没有影响,也可以改成删除全部无用的镜像:docker image prune -a
    - docker image rm `docker images -q --filter reference=$IMAGE_REGISTRY_URL/test-i/test:*` 

如果出现问题:
Got permission denied while trying to connect to the Docker daemon socket…
提供几种办法思路:

sudo groupadd docker #添加docker用户组

sudo gpasswd -a $XXX docker #检测当前用户是否已经在docker用户组中,其中XXX为用户名

sudo gpasswd -a $USER docker #将当前用户添加至docker用户组

newgrp docker #更新docker用户组`
sudo usermod -aG docker ${USER}
sudo chmod 666 /var/run/docker.sock

补充:创建Registry

docker pull registry
docker run -d \
--name gitlab-registry \
--restart always \
-p 5000:5000 \
-v /data/gitlab-registry:/var/lib/registry \
registry

参考语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值