Installation de GitLab et GitLab Runner (méthodes RPM et Docker), première expérience avec CI/CD

arrière-plan

GitLabIl s'agit d'un puissant système de contrôle de version et d'une plate-forme de collaboration. Enregistrez les GitLabenregistrements d'installation et d'utilisation du travail réel.

Lorsque vous utilisez GitLab, il est installé CentOS7directement sous forme de package sur , et n'est utilisé que comme outil d'hébergement de code .rpm14.10.4

GitLabDans la chaîne de pré - recherche CI/CDet d'assemblage ultérieure, Dockerla méthode d'installation est adoptée, version :16.2.3-jh ; introduite GitLab Runner, version :16.2.0 .

GitLab

Environnement système

[root@gitlab1 opt]# uname -a
Linux gitlab1 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@gitlab1 opt]# cat /proc/version
Linux version 3.10.0-1127.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Mar 31 23:36:51 UTC 2020
[root@gitlab1 opt]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
[root@gitlab2 ~]# docker -v
Docker version 20.10.18, build b40c2f6

Installer GitLab via RPM

Adresse de téléchargement, miroir Tsinghua : https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

[root@gitlab1 local]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm

错误: 无法验证 mirrors.tuna.tsinghua.edu.cn 的由 “/C=US/O=Let's Encrypt/CN=R3” 颁发的证书:
  颁发的证书已经过期。
解决:将https修改为http

[root@gitlab1 local]# rpm -ivh gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm 
警告:gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID f27eab47: NOKEY
错误:依赖检测失败:
        policycoreutils-python 被 gitlab-ce-14.10.4-ce.0.el7.x86_64 需要

解决:yum install -y curl policycoreutils-python openssh-server

[root@gitlab1 local]# rpm -ivh gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm 
警告:gitlab-ce-14.10.4-ce.0.el7.x86_64.rpm: 头V4 RSA/SHA1 Signature, 密钥 ID f27eab47: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:gitlab-ce-14.10.4-ce.0.el7       ################################# [100%]
It looks like GitLab has not been configured yet; skipping the upgrade script.

       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
  

     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/
  

Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
  sudo gitlab-ctl reconfigure

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=14-10

# 编辑配置,设置访问地址
[root@gitlab1 local]# vi /etc/gitlab/gitlab.rb
external_url 'http://gitlab1'

# 重新配置生效
[root@gitlab1 local]# gitlab-ctl reconfigure

Running handlers:
Running handlers complete
Chef Infra Client finished, 606/1618 resources updated in 05 minutes 34 seconds

Warnings:
Rehashing of trusted certificates present in `/etc/gitlab/trusted-certs` failed. If on a FIPS-enabled machine, ensure `c_rehash` binary is available in $PATH.

Notes:
Default admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.

NOTE: Because these credentials might be present in your log files in plain text, it is highly recommended to reset the password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

gitlab Reconfigured!

Note:

  1. Comment vérifier les informations de version ? Pour afficher la version dans le backend GitLab : ajoutez l'aide après le nom/l'adresse IP du domaine de déploiement.
  2. Si vous modifiez les informations de configuration telles que l'IP ou le port, veillez à recharger la configuration après chaque modification : gitlab-ctl reconfigure.

[root@gitlab1 local]# cat /etc/gitlab/initial_root_password | grep Mot de passe

Utilisez un navigateur pour accéder à l'adresse configurée et entrez votre nom d'utilisateur et votre mot de passe.

GitLabCommandes courantes

  1. gitlab-ctl start : démarrez gitlab,
  2. gitlab-ctl stop : arrêtez gitlab.
  3. Statut gitlab-ctl : Afficher le statut de gitlab
  4. gitlab-ctl restart : redémarrer le service

En tant qu'entrepôt de code, GitLabson utilisation comprend les aspects suivants :

  • Créer un groupe
  • Créer un projet
  • Ajouter une clé SSH
  • cloner
  • Enregistrement de l'utilisateur
  • Avis d'utilisateur
  • Rejoindre le groupe

De cette façon, si vous souhaitez utiliser CI/CDla fonction, vous devez l'installer GitLab Runner(mais il n'est pas recommandé d'utiliser cette méthode d'installation directe. Dans la production réelle, plus de personnes utilisent Dockeret Kubernetes). Elle est divisée en deux étapes : l'installation et l'enregistrement. Adresse de téléchargement : https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/

Note:

  1. L'inscription à GitLab Runner est divisée en deux étapes : obtenir le jeton de coureur et s'inscrire
  2. GitLab Runner est divisé en type partagé, type de groupe et type de projet, situés à différents emplacements.
  3. Il existe deux manières de s'inscrire : interactive et non interactive.

Installation de Docker à l'aide de GitLab

Ouvrez une nouvelle machine virtuelle et utilisez Dockerla méthode pour installer et exécuter GitLabet GitLab Runner.

[root@gitlab2 ~]# cd /opt/
[root@gitlab2 opt]# mkdir gitlab
[root@gitlab2 opt]# export GITLAB_HOME=/opt/gitlab

Selon la documentation officielle, GitLab Runnerla commande à installer et à exécuter est la suivante :

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  registry.gitlab.cn/omnibus/gitlab-jh:latest

Lors de l'exécution réelle, les paramètres ont été simplifiés, le nom d'hôte a été défini et le numéro de port mappé a été modifié.

docker run -d \
  -h gitlab2 \
  -p 80:80 -p 222:22 \
  --name gitlab \
  --restart always \
  -v $GITLAB_HOME/config:/etc/gitlab \
  -v $GITLAB_HOME/logs:/var/log/gitlab \
  -v $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  registry.gitlab.cn/omnibus/gitlab-jh:latest

Remarque : remplacez le port 22 de l'hôte par 222, sinon une erreur sera signalée :Error starting userland proxy: listen tcp4 0.0.0.0:22: bind: address already in use.

Visitez JiFox GitLab URLet connectez-vous en utilisant le nom d'utilisateur rootet le mot de passe de la commande suivante :

[root@gitlab2 ~]# docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
Password: zIrC8HPFfuxVmGSyx27nRbgTRwLaoiIhu+a2edEySMw=

2023-08-19-GitLabHome.jpg

2023-08-19-GitLabVersion.jpg

DockerPour gérer GitLable service via .

docker start gitlab
docker stop gitlab
docker restart gitlab
docker rm gitlab

Installez et enregistrez gitlab-runner en mode Docker

Installer GitLab Runner

En fonction de GitLabla version de , la version de est spécifiée GitLab Runner.

docker run -d --name gitlab-runner --restart always \
  -v /opt/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:v16.2.0

# 查看安装的GitLab Runner的版本信息
[root@gitlab2 ~]# docker exec -it gitlab-runner gitlab-runner --version
Version:      16.2.0
Git revision: 782e15da
Git branch:   16-2-stable
GO version:   go1.20.5
Built:        2023-07-21T22:52:42+0000
OS/Arch:      linux/amd64

Enregistrer GitLab Runner

Ensuite, créez le groupe, créez le projet, clonez-le et enregistrez-en un pour le projet Runner.

Créer un nouveau groupe ——> Créer un nouveau projet ——> git clone http://gitlab2/iot/test.git

# 注册为`Shell`类型的执行器。
docker run --rm -v /opt/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v16.2.0 \
 register \
  --non-interactive \
  --executor "shell" \
  --url "http://192.168.44.149" \
  --registration-token "GR1348941NNVnhpcsLqgBbL-1JxPT" \
  --description "shell-runner" \
  --tag-list "shell,test" \
  --run-untagged="true" \
  --locked="false" \
  --access-level="not_protected"

Problèmes rencontrés lors de l'inscription :

  1. ERREUR : enregistrement du coureur… erreur coureur = GR1348941NNVnhpcs status = uniquement le schéma http ou https pris en charge

La raison en est que j'ai --urlécrit la valeur sous forme de nom d'hôte, qui doit être écrit sous HTTPla forme d'un lien d'adresse.

  1. ERREUR : enregistrement du coureur… échec du coureur = GR1348941NNVnhpcs status = impossible d'exécuter le POST sur http://gitlab2/api/v4/runners : publication « http://gitlab2/api/v4/runners » : composez TCP : recherchez gitlab2 sur 192.168.44.2:53 : aucun hôte de ce type

La raison en est que j'ai --urlécrit la valeur en tant que nom d'hôte et que le nom d'hôte n'a pas pu être enregistré avec succès dans le conteneur. Ensuite, je l'ai remplacé par IPl'adresse et l'enregistrement a réussi. Voici l'effet d'un enregistrement réussi.

[root@gitlab2 ~]# docker run --rm -v /opt/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:v16.2.0 \
>  register \
>   --non-interactive \
>   --executor "shell" \
>   --url "http://192.168.44.149" \
>   --registration-token "GR1348941NNVnhpcsLqgBbL-1JxPT" \
>   --description "shell-runner" \
>   --tag-list "shell,test" \
>   --run-untagged="true" \
>   --locked="false" \
>   --access-level="not_protected"
Runtime platform                                    arch=amd64 os=linux pid=7 revision=782e15da version=16.2.0
Running in system-mode.                            
                                                   
WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872 
Registering runner... succeeded                     runner=GR1348941NNVnhpcs
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
 
Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml" 

2023-08-19-GitLabRunner.jpg

CI/CD

Afin d'expérimenter les GitLab Runnerfonctions CI/CDsuivantes, simulons le processus de pipeline réel avec une configuration de construction et de déploiement de services back-end, et créons un nouveau fichier dans le répertoire racine du projet créé : (Après la soumission, le projet démarrera automatiquement .gitlab-ci.ymlle exécution du pipeline).

stages:
  - build
  - deploy
 
build:
  stage: build
  tags:
    - shell
  only:
    - master
  script:
    - echo "mvn clean"
    - echo "mvn package"

deploy:
  stage: deploy
  tags:
    - test
  only:
    - master
  script:
    - echo "java -jar x.jar"

CI/CDProblèmes rencontrés au cours du processus :

  1. Une fois le fichier de configuration ci-dessus ajouté et soumis pour la première fois, le pipeline n'a pas été déclenché. .

GitLabIl s'avère que la branche principale de la nouvelle version que j'ai utilisée masterest passée de à main, .gitlab-ci.ymlmodifiez simplement le nom de la branche dans .

  1. Le pipeline a échoué, journal des tâches : fatal : impossible d'accéder à "http://gitlab2/iot/test.git/" : impossible de résoudre l'hôte : gitlab2

2023-08-19-GitLabRunnerError.jpg

On a l'impression que Dockerle conteneur ne peut pas obtenir le nom d'hôte de l'hôte. Lorsque vous entrez dans gitlab-runnerle conteneur où se trouve l'hôte, pingl'hôte ipest accessible, mais le nom d'hôte est bloqué. Le moyen le plus simple consiste à config.tomll'ajouter dans le fichier clone_url = "http://192.168.44.149"et IPà extraire le code. de la manière.

# 没有自带ping命令,自行安装
root@249b6b18ffa8:/# apt update
root@249b6b18ffa8:/# apt install -y iputils-ping

# 修改配置,增加clone_url配置,跟url并列
[root@gitlab2 ~]# vi /opt/gitlab-runner/config/config.toml
clone_url = "http://192.168.44.149"

# 重启gitlab-runner所在容器
[root@gitlab2 ~]# docker restart gitlab-runner
gitlab-runner

Après avoir modifié la configuration ci-dessus, démarrez-en une manuellement Pipelineet l'exécution est réussie.

2023-08-19-PipelinePass1.jpg

2023-08-19-PipelinePass2.jpg

2023-08-19-PipelinePass3.jpg

# 进入容器
[root@gitlab2 ~]# docker exec -it gitlab-runner /bin/bash

# 列出所有的runner
root@249b6b18ffa8:/# gitlab-runner list
Runtime platform                                    arch=amd64 os=linux pid=27 revision=782e15da version=16.2.0
Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
shell-runner                                        Executor=shell Token=XQEENnyfzyEVs8-2iDB9 URL=http://192.168.44.149

# 查看runner的状态
root@249b6b18ffa8:/# gitlab-runner verify
Runtime platform                                    arch=amd64 os=linux pid=37 revision=782e15da version=16.2.0
Running in system-mode.                            
                                                   
Verifying runner... is alive                        runner=XQEENnyf

Note:

  1. CI Lint peut être utilisé pour vérifier la syntaxe de .gitlab-ci.yml ;
  2. Un pipeline contient plusieurs tâches et chaque tâche contient au moins un script.
  3. Après modification de l'IP du serveur, le conteneur Docker n'est plus accessible depuis l'extérieur du serveur
# 服务器IP更改之后,linux数据包转发配置net.ipv4.ip_forward会变为0,即关闭状态。
[root@gitlab2 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

# 重启docker,docker会默认将net.ipv4.ip_forward值临时改为1(再次新增或更改IP之后会失效)
[root@gitlab2 ~]# systemctl restart docker

Résumé

Ce qui précède est le GitLabprocessus d'installation et d'utilisation, ainsi que la première expérience de CI/CD. GitLabIl s'agit d'une plate-forme de collaboration riche en fonctionnalités, facile à utiliser, sûre et fiable qui peut aider les équipes à mieux gérer et développer des projets.

  1. Flux de travail intégré : GitLabfournit un flux de travail intégré, comprenant l'hébergement de code, le suivi des problèmes, l'intégration et le déploiement continus et d'autres fonctions. Cela permet aux membres de l'équipe de collaborer au développement et à la gestion de projets sur la même plateforme.
  2. Hébergement de code : GitLabfournit de puissantes fonctions d'hébergement de code et prend en charge le système de contrôle de version distribué Git. Les membres de l'équipe peuvent facilement partager et gérer le code pour le contrôle de version et le développement collaboratif.
  3. Suivi des problèmes : GitLabfournit une fonctionnalité de suivi des problèmes pour aider les membres de l'équipe à enregistrer et à résoudre les problèmes du projet. Grâce au suivi des problèmes, les membres de l'équipe peuvent mieux collaborer et suivre l'avancement du projet.
  4. Intégration et déploiement continus : GitLabfournit de puissantes capacités d'intégration et de déploiement continus pour automatiser la création, les tests et le déploiement du code. Cela peut grandement améliorer l’efficacité du développement et la qualité du code.
  5. Sécurité : GitLabfournit des fonctionnalités de sécurité puissantes, notamment le contrôle d'accès, la gestion des autorisations et la révision du code. Cela aide les équipes à sécuriser le code et les informations sensibles.

Référence


Si vous avez des questions ou si des bugs sont détectés, n'hésitez pas à me contacter.

Vos commentaires et suggestions sont les bienvenus!

Je suppose que tu aimes

Origine blog.csdn.net/u013810234/article/details/132388651
conseillé
Classement