Un monde d'octets

Aller au contenu | Aller au menu | Aller à la recherche

mardi, juin 6 2023

Travailler sur un sous dossier d'un repo git

Dans le cas de dépôt git agglomérant plusieurs travaux, pouvoir ne récupérer que le dossier qui nous intéresse peut être pratique. Pour git, cela s'appelle le sparse checkout.

git init
git remote add -f origin git@github.com:pvalois/ansible.git
git config --global user.name "Pascal Valois"
git config --global user.email "pvalois@email.com"
git config core.sparseCheckout true
git sparse-checkout set "roles/sync-date"
git sparse-checkout list
git pull origin main      

et seul le dossier roles/sync-date sera concerné par le pull et les updates.

vendredi, septembre 30 2022

Retard de commit par rapport à master ...

Solution :

git checkout master
git pull

puis :

git checkout yourBranch
git merge master

vendredi, janvier 14 2022

Git : en cas d'erreur de commit

Depuis 4 jours j'ai accidentelement fait mes commits sur la mauvais branche.

Par chance, personne n'a commité en même temps que moi, j'ai donc pu procéder au nettoyage comme suit :

git reset --hard <sha>
git clean -f -d
git push -f

Et voila, la branch est revenue à l'état du <sha> spécifiée, tout propre !

mardi, août 3 2021

Git: effacer un commit malheureux

Pour annuler le dernier commit (si commit accidentel ou mal fait)

  • git reset --soft HEAD~1
  • git push -f

Cela annule le dernier commit, et vous permet de reprendre votre travail proprement.

mardi, juillet 13 2021

Agile, Git, Naming

Branch naming

Create a branch by following the naming convention: <type>/<taskid>-<description-of-branch>.

<type> is:

  • feat - for new code (features, functionalities, etc.)
  • fix - for code updates (issue fixing, improvements)
  • delete - for deletion, removal, undoing of code
  • docs - for documentation
  • test - for code testing. NEVER merged these branches to master.

<taskid> is the ID of the work-item created previously.

<description-of-branch> describes what is accomplished on the branch. Use maximum 3 words, all lowercase, words separated by hyphens.

Examples

  • docs/1-remove-repository
  • feat/5-add-motd-task
  • fix/42-rename-workload-subscription

Conventional commit messages

Use conventional commit message when commiting changes to a branch: <type>: <description>

<type> is:

  • feat - for new code developments
  • fix - for fixes and improvements
  • delete - for permanent deletion of code
  • docs - documentation only changes
  • style - update formatting (white-spaces, indentation, etc.)

Examples

  • feat: add task to define motd on the node
  • fix: change published port used by container from 22 to 4444
  • docs: update section getting-started with contribute details in project readme
  • style: delete all trailing spaces in terraform files

Pull request

Choose two branches to see what’s changed or to start a new pull request

  • source: <name-of-your-branch>
  • into: master (always)

Use a descriptive title to explain what the PR addresses.

Examples

  • add doc about azure naming conventions to wiki
  • deploy storage account for tfstate on production subscription
  • refactor code for ansible role bootstrapping a linux virtual machine

The PR description contains a human-readable description of what changes are addressed with the PR. It aims at assisting the reviewers that are reading the PR. Each lines are less than 100 characters. All lower case. Indicate the related task (with prefix fixed or related), and the related user-story (with prefix related).

Examples

  • fixed: #1
  • related: #3

add description of naming conventions used for every resource deployed on azure with infrastructure-as-code

dimanche, février 21 2021

Github : publication via ssh

Pour publier ses modifications via ssh (et utiliser un combo pki pour l'authentification), il suffit d'ajouter ses clefs ssh via l'interface de github (dans les préférences du compte), et de changer l'origine de votre dépot comme suit :

git remote set-url origin git@github.com:pvalois/security

après cela, la publication se fait naturellement en ssh sur mon compte pvalois, repo security

samedi, octobre 24 2020

gitlab.ci: premier résultats probants

Pour m'autoformer sur gitlab et la partie CI, j'ai remonté mon microk8s, installé gitlab en docker, connecté mon gitlab a kubernetes et ajouté un runner en contexte kubernetes.

Il ne restait plus qu'a prendre un projet docker, et a essayer de le builder avec upload dans ma registry privée.

Les tests avec les images docker et docker-dind m'ont posé plus de problèmes qu'autre chose. Je me suis finalement rabbatu sur buildah.



Dans les problèmes rencontrés, il y'a eu le tagging, ou faute d'expérience, il a fallu que je comprenne quoi mettre dans les valeurs pour que ma registry ne rejette pas pour défaut de manifest.

Il a aussi fallu ajouter l'option de tls a la commande buildah pour qu'il n'échoue pas en se plaignant que ma registry ne supporte par https.

voici le .gitlab-ci.yml pour la partie build :

stages:
  - build

build and push to gitlab registry:

  stage: build
  image: fcadeillan/buildah

  variables:
    BUILDAH_FORMAT: "docker"
    IMAGE_NAME: "db2http"
    IMAGE_FQN: "192.168.1.30:5000/db2http"

  before_script:

  script:
    - buildah bud -t ${IMAGE_FQN}:${CI_COMMIT_REF_SLUG} .
    - buildah push --tls-verify=false docker://${IMAGE_FQN}:${CI_COMMIT_REF_SLUG}

Enfin voila une bonne chose de faite. Prochaine fois, on attaquera le déploiement sur kubernetes pour faire bonne figure !

lundi, octobre 19 2020

Lier Gitlab à un cluster Kubernetes

Extraire les informations de votre cluster kubernetes :

Kubernetes cluster name :

MonClusterAMoi

Environment scope :

"*"

API URL :

kubectl cluster-info | grep 'Kubernetes master' | awk '/http/ {print $NF}'

CA Certificate :

export token=`kubectl get secrets | grep service-account-token | awk '{print $1}'`
kubectl get secret $token -o jsonpath="{['data']['ca\.crt']}" | base64 --decode

Service Token :

kubectl describe secrets default-token-vs2rk

RBAC-enabled-cluster : oui

GitLab-managed cluster : oui

A savoir

Si vous rencontrez l'erreur "Requests to the local network are not allowed" :

Dans la partie administration :

  • Clickez "settings" -> "network" -> "Outbound requests"
  • Cochez "Allow requests to the local network from web hooks and services"

vendredi, avril 24 2020

Git bundles

La sauvegarde de gitlab via la commande

gitlab gitlab-rake gitlab:backup:create SKIP=registry,artifacts,lfs,builds

crée une archive tar qiu contient des bundle de projets git.

Ces gundles sont eux aussi une forme d'archive de fichier et données de git, on peut les utiliser comme une copie de repo local, en précisant le bundle à la place de l'url du répo.

On peut par exemple lister le contenu des entêtes avec :

git bundle list-heads blob.bundle

vendredi, décembre 13 2019

Installation d'un Gitlab Runner pour CI/CD avec Docker

Installation du container docker

docker run -d --name gitlab-runner-config \
    -v /etc/gitlab-runner \
    busybox:latest \
    /bin/true

docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --volumes-from gitlab-runner-config \
    gitlab/gitlab-runner:latest

Une fois ceci fait, il faut enregistrer le runner

pour cela allez dans la pace ci/cd de votre projet gitlab, exemple pour moi :

http://death.maison.local/gitlab/pvalois/menu/-/settings/ci_cd

la dans la partie runner, vous avez un token de connexion.

exécutez :

docker exec -t -i gitlab/gitlab-runner bash
gitlab-runner register

et répondez aux question. Pour l'instant, j'ai repondu comme suit :

Runtime platform                                    arch=amd64 os=linux pid=6 revision=577f813d version=12.5.0
Running in system-mode.                            
                                                   
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):

http://death.maison.local/gitlab/

Please enter the gitlab-ci token for this runner:

LfFNGi6eHry7nSMcZUL3

Please enter the gitlab-ci description for this runner:
[9b9d8d60086e]: 

docker-runner 9b9d

Please enter the gitlab-ci tags for this runner (comma separated):

docker

Registering runner... succeeded                     runner=LfFNGi6e

sur ces deux lignes, je n'ai rien répondu, rien de précis ne m'étant venu à l'idée, mais de toute façon ici, ce n'est pas obligatoire, c'est pour retrouver ses billes :)

Please enter the executor: custom, docker, docker-ssh, parallels, shell, ssh, docker+machine, kubernetes, virtualbox, docker-ssh+machine:

docker

Please enter the default Docker image (e.g. ruby:2.6):

ruby:2.6

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

Pour la réponse "docker" c'est logique. Gitlab-ci pourra lancer un nouveau container à chaque fois qu'il veut tester un build, et le détruira ensuite. c'est un comportement classique en ci/cd.

Pour la réponse "ruby:2.6", j'ai laissé simplement le défaut suggéré, je n'ai pas choisi encore quelle image type je voudrais utiliser.

Il suffit maintenant dans notre .gitlab-ci.yaml de spécifier pour un job :

tag: 
   - docker

et notre runner sera apparié au job.

Tout ça pour dire que mon test a réussi et que donc je peux passer à la suite !

samedi, novembre 23 2019

Gitlab CI/CD, premier pipeline

Pour notre premier pipeline, nous allons simplement créer un fichier et tester son existence.

Pour créer un pipeline dans Gitlab, il faut publier un fichier .gitlab-ci.yml contenant :

  • des stages
  • des jobs relatifs aux stages
  • des artefacts permettant de lier les jobs entre eux
stages:
  - build
  - test

build: 
  stage: build
  script: 
    - echo "Building"
    - mkdir build
    - touch build/info.txt
  artifacts: 
    paths:
      - build/

test: 
  stage: test
  script:
    - echo "Testting"
    - test -f "build/info.txt"

Ici nous avons un stage de build, et un stage de test. les scripts sont simple, et nous ne les détaillerons donc pas.

La partie importante ici est l'Artifact. Dans notre premier job, nous créons un fichier, et dans notre deuxième job, testons son existence. mais chaque jobs est initialement indépendant.

Comme l'indique la doc sur le site de Gitlab :

Job artifacts are a list of files and directories created by a job once it finishes. This feature is enabled by default in all GitLab installations.

En gros, notre définition d'Artifact définit que les fichiers créés dans le premier job dans le répertoire build sont à conserver pour les jobs suivants. En pratique, gitlab conservera dans son repository le contenu du dossier build et il sera ainsi récupérable par les autres jobs. Et la continuité est faite.

dimanche, septembre 1 2019

Git 101

Des bases de git a ne pas oublier :

Après avoir installé votre serveur git ou gitlab, vous pouvez commencer a iInitialiser des projets.

Les projets sont créés coté serveur, par l'administrateur (git init, et tout ca).

Coté utilisateur, soit on part d'une première publication :

git init
git add *
git commit –m 'version initiale du projet'

Soit on initialise en clonant :

git clone <url>

Avant de pouvoir publier (cas 1, ci-dessus), il faut initialiser l'url de publication.

git remote add origin http://death.maison.local/gitlab/death/ansible.git

au moment du commit, votre login et mot de passe vous seront demandé (sauf en ssh).

Si jamais l'url vient à changer, ou que vous passiez d'une publication http vers ssh, vous devrez repositionner l'origine :

git remote set-url origin ssh://git@death.maison.local:/death/ansible

Si votre clef ssh est correctement positionnée sur le serveur, l'authentification sera "magique"

Si vous êtes en http, avoir un cache du mot de passe permet de ne pas taper celui-ci a chaque fois :

git config --global credential.helper cache

Le cache dure 15 minutes. mais vous pouvez en changer la validité :

git config --global credential.helper cache --timeout 30000

vendredi, novembre 2 2018

ci Git le dépot

Mise en place du serveur

Parcourons les étapes de la mise en place d'un accès SSH côté serveur. Dans cet exemple, vous utiliserez la méthode des authorized_keys pour authentifier vos utilisateurs. Nous supposerons également que vous utilisez une distribution Linux standard telle qu'Ubuntu. Premièrement, créez un utilisateur 'git' et un répertoire .ssh pour cet utilisateur.

sudo adduser git --disabled-password --gecos "Git System Account" --disabled-login
su git
cd
mkdir .ssh

Ensuite, vous devez ajouter la clé publique d'un développeur au fichier authorized_keys de l'utilisateur Git. Supposons que vous avez reçu quelques clés par e-mail et les avez sauvées dans des fichiers temporaires. Pour rappel, une clé publique ressemble à ceci :

cat id_rsa.john.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair

Il suffit de les ajouter au fichier authorized_keys :

cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys

Maintenant, vous pouvez créer un dépôt vide nu en lançant la commande git init avec l'option --bare, ce qui initialise un dépôt sans répertoire de travail :

cd /opt/git
mkdir projet.git
cd projet.git
git --bare init

Alors, John, Josie ou Jessica peuvent pousser la première version de leur projet vers ce dépôt en l'ajoutant en tant que dépôt distant et en lui poussant une branche. Notons que quelqu'un doit se connecter au serveur et créer un dépôt nu pour chaque ajout de projet. Supposons que le nom du serveur soit gitserveur. Si vous l'hébergez en interne et avez réglé le DNS pour faire pointer gitserver sur ce serveur, alors vous pouvez utiliser les commandes suivantes telles quelles :

  1. Sur l'ordinateur de John

cd monproject
git init
git add .
git commit -m 'premiere validation'
git remote add origin ssh://git@gitserveur:/opt/git/projet.git
git push origin master

À présent, les autres utilisateurs peuvent cloner le dépôt :

git clone ssh://git@gitserveur:/opt/git/projet.git

Puis faire des modifications

cd projet
vim LISEZMOI
git commit -am 'correction fichier LISEZMOI'
git push origin master

De cette manière, vous pouvez rapidement mettre en place un serveur Git en lecture/écriture pour une poignée de développeurs.

En précaution supplémentaire, vous pouvez simplement restreindre l'utilisateur 'git' à des actions Git avec un shell limité appelé git-shell qui est fourni avec Git. Si vous positionnez ce shell comme shell de login de l'utilisateur 'git', l'utilisateur 'git' ne peut pas avoir de shell normal sur ce serveur. Pour utiliser cette fonction, spécifiez git-shell en lieu et place de bash ou csh pour shell de l'utilisateur. Cela se réalise généralement en éditant le fichier /etc/passwd :

sudo vim /etc/passwd

Tout au bas, vous devriez trouver une ligne qui ressemble à ceci :

git:x:1000:1000::/home/git:/bin/sh

Modifiez /bin/sh en /usr/bin/git-shell (ou le résultat de la commande which git-shell qui indique où il est installé). La ligne devrait maintenant ressembler à ceci :

git:x:1000:1000::/home/git:/usr/bin/git-shell

À présent, l'utilisateur 'git' ne peut plus utiliser la connexion SSH que pour pousser et tirer sur des dépôts Git, il ne peut plus ouvrir un shell. Si vous essayez, vous verrez un rejet de login :

ssh git@gitserveur

fatal: What do you think I am? A shell?
Connection to gitserveur closed.