Maison  >  Article  >  Java  >  Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

王林
王林avant
2023-05-20 18:55:201796parcourir

1. Exigences environnementales

Les systèmes d'exploitation des serveurs suivants sont tous Centos7

  • Serveur A : Gitlab

  • Serveur B : GitlabRunner, Docker, docker-compose, Java1.8, maven3.6.3, git

ps : Ici, vous pouvez séparer GitlabRunner, Java1.8, maven3.6.3 et git du serveur B et les déployer indépendamment. La raison pour laquelle Java est nécessaire est maven, qui est utilisé pour l'empaquetage.

Pour faciliter la démonstration, le serveur d'applications B n'a besoin que d'utiliser docker et docker-compose.

Pour les didacticiels de construction de services associés, veuillez vous référer aux documents officiels ou à d'autres didacticiels de blog tiers fiables !

Version actuelle de mon service

  • Gitlab : 14.9

  • GitlabRunner : 14.10.0

  • docker : 20.10.14

  • docker-compose : 1.29.2

  • Git : 2.31 .1, vérifiez à l'avance si Git est la dernière version, sinon des erreurs se produiront plus tard.

2. Processus principal

Notre processus principal consiste à gérer le code via Gitlab, puis à utiliser la fonction Gitlab CI/CD fournie avec Gitlab pour l'enregistrer et le lier avec GitlabRunner.

Une fois la liaison réussie, GitlabRunner sera activé à chaque fois que le code sera soumis et le script correspondant sera exécuté pour un déploiement automatique.

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

3. Installation et enregistrement de GitlabRunner

3.1 Installation

Résumé Il y a 2 étapes au total :

1. Ajoutez la bibliothèque officielle gitlab :

Pour Debian/Ubuntu/Mint

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash

Pour RHEL/CentOS. /Fedora

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

2. Installation de la commande :

Pour Debian/Ubuntu/Mint

sudo apt-get install gitlab-ci-multi-runner

Pour RHEL/CentOS/Fedora

sudo yum -y install gitlab-ci-multi-runner

3.2 Démarrer l'enregistrement

1 Ouvrez l'entrepôt dont Gitlab a besoin pour déployer automatiquement, sélectionnez Paramètres-. 》CI/CD -》Coureurs.

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

2. Comme indiqué ci-dessous, vous pouvez voir les deux informations les plus critiques, qui seront utilisées lors de l'enregistrement ultérieur de GitlabRunner

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

3. gitlab-runner register

    Afficher les coureurs inscrits : gitlab-runner list
  • Annuler toutes les inscriptions : gitlab-runner unregister --all-runners
  • Retournez au serveur B et exécutez la commande
  • S'inscrire Explication détaillée du processus :

gitlab-runner register

Entrez l'URL de l'instance GitLab (par exemple, https://gitlab.com/) :

Entrez l'URL du service de gitlabComment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

  • Entrez le jeton d'enregistrement :

    Entrez le jeton , reportez-vous à l'image ci-dessus

  • Entrez une description pour le coureur :

    Entrez la description du coureur

  • Entrez les balises pour le coureur (séparées par des virgules)


  • Entrez une balise pour ce gitlab-runner Cette balise. est très important lors d'une utilisation ultérieure, vous devez utiliser cette balise pour spécifier gitlab-runner (fichier yml, le travail sélectionne le Runner spécifié en définissant l'étiquette des balises)
  • Entrez une note de maintenance facultative pour le coureur :
Entrez facultative. note de maintenance

  • Entrez un exécuteur : docker+machine, docker-ssh+machine, custom, docker-windows, docker-ssh, ssh, kubernetes, docker, parallels, shell, virtualbox :


  • Appuyez sur Entrée pour terminer et installez le dossier gitlab-runner. La configuration sera automatiquement générée ensuite.
  • Retournez aux paramètres de l'arrière-plan de gitlab Runner, actualisez la page et vous verrez le nouveau Runner :

4. !!

Après avoir soumis le code, nous comment dois-je utiliser les scripts Shell pour contrôler la construction et le déploiement ? Gitlab nous a fourni un modèle, qui consiste à créer un fichier nommé : .gitlab-ci.yml dans le répertoire racine de l'entrepôt. Ici, nous prenons comme exemple un projet springboot et y ajoutons 3 fichiers (.gitlab-ci). le projet d'origine. .yml, Dockerfile, docker-compose.yml), l'emplacement et le contenu du fichier sont indiqués ci-dessous. Modifiez simplement le contenu en fonction de vos besoins. Vous devez être familier avec certaines structures de fichiers et la syntaxe de base de Dockerfile. et docker-compose.yml :

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot3 Carte d'emplacement du fichier

.gitlab-ci.yml

stages:
  - build
  - deploy_dev
  - clean
# 打包镜像
build:
  stage: build
  only:
    - dev
  script:
    - $MAVEN_HOME/bin/mvn clean package '-Dmaven.test.skip=true'
    - cp ./XXX/target/XXX.jar docker/
    - cd docker
    - docker build -t dev/XXX:v1.0.0 .
  tags:
    - maven
# 部署开发服务器
deploy_dev:
  stage: deploy_dev
  only:
    - dev
  script:
    - cd docker
    - docker-compose down
    - docker-compose up -d
  tags:
    - maven
#清理虚悬镜像
clean:
  stage: clean
  only:
    - dev
  script:
    - docker rmi $(docker images -q -f dangling=true)
  tags:
    - maven

Créez le dossier Docker dans le répertoire racine,

Créez un fichier Docker :

#FROM java:8 #java:8这个镜像体积有643MB,打包镜像后体积太大了,不建议使用
# openjdk:8-jre-alpine 体积最小,只有85MB
FROM openjdk:8-jre-alpine
# 以下2个RUN解决 java验证码接口报错的问题,
RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n\
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" > /etc/apk/repositories
RUN apk --update add curl bash ttf-dejavu && \
      rm -rf /var/cache/apk/*
COPY . /opt/app
WORKDIR /opt/app
Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBootCréez docker-compose.yml :

version: '3.1'
services:
  education-course:
    container_name: dev-XXX-server
    restart: always
    image: dev/XXX:v1.0.0
    network_mode: "host"
    volumes:
      - /opt/XXX-server/logs:/XXX/logs
    command: java -jar -Xms1024m -Xmx1024m -Duser.timezone=GMT+08 xxx.jar --spring.profiles.active=dev

5. Test

Soumettez une fois le code de l'idée locale à la branche dev, et elle est déjà en cours d'exécution

点进去看,出现问题

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

这里提示我们的git版本太低了

当前git版本:

[root@localhost local]# git --version
git version 1.8.3.1

升级最新版git后:

[root@localhost yum.repos.d]# git --version
git version 2.24.4

回到gitlab后台,这里手动再执行一次:

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

最新的一次已通过 passed:

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

查看日志的方法,进第一个build查看日志,获取项目的路径(大家有更好的方法可以告诉下我)

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

cd到 项目的docker目录,使用

docker-compose logs -ft

测试接口:

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

6.常见问题

问题1:自动化部署build报错:

Comment Gitlab-runner+Docker implémente le déploiement automatique des projets SpringBoot

解决方法,执行命令:

sudo chmod 777 /var/run/docker.sock

问题2:docker apline temporary error (try again later) 错误
没有dns导致的

在本机系统上创建daemon文件添加dns,然后重启docker

vim /etc/docker/daemon.json
{
"dns": ["8.8.8.8"]
}
sudo service docker restart

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer