Aller au contenu principal

sng detect

Bêta

Fonctionnalité en cours de déploiement. L'interface décrite ici est celle de la prochaine livraison : elle peut encore évoluer, et n'est pas forcément activée sur votre tenant.

sng detect est en cours de diffusion dans la CLI.

sng detect [CHEMIN] [-v] [--no-oidc]

Analyse un dossier (défaut .) et affiche une ligne par programme : langage, framework, port. Dans un terminal, un assistant propose ensuite de corriger le résultat, de générer un Dockerfile et un manifeste App par programme, puis de créer une confiance OIDC pour votre dépôt GitLab. Une session est facultative.

Un programme est un dossier qui contient un fichier de build : go.mod (un programme par paquet main : racine et cmd/*), package.json, pyproject.toml, requirements.txt ou Pipfile, composer.json. Langages reconnus : Go, Node / TypeScript, Python, PHP. Un package.json d'outillage (vite, lint) à côté d'un composer.json ou d'un requirements.txt n'est pas un second programme.

FlagEffet
-v, --verboseajoute l'endroit où le port a été lu
--no-oidcsaute la dernière étape (confiance OIDC)
--jsonliste structurée (name, path, language, framework, port, portSource, portFrom) ; rien n'est demandé ni écrit
sng detect . -v
PATH NAME LANGUAGE FRAMEWORK PORT FROM
cmd/api api go chi 8080 internal/config/config.go HTTP_ADDR
ui ui typescript next 3000 (dockerfile) -
jobs jobs python fastapi 8000 (default) -

Le port est lu dans le code (un binaire Go est suivi à travers ses imports : un getenv("HTTP_ADDR", ":8080") compte ; les ports de métriques, de sondes et internes passent après le port principal), puis dans un EXPOSE de Dockerfile, un fichier compose, un PORT de .env, enfin le défaut du framework. - signifie qu'il n'y a pas de serveur.

L'assistant​

Dans un terminal, le tableau est suivi de quatre questions. Hors terminal (redirection) ou avec --json, rien n'est demandé et rien n'est écrit. ACCESSIBLE=1 donne des questions en texte simple (lecteurs d'écran).

  1. Le résultat est-il correct ? Répondre non permet de cocher les programmes à corriger, puis de modifier seulement les champs faux (nom, langage, framework, port) ; le tableau est réaffiché jusqu'à votre confirmation. Un port corrigé est marqué (user).
  2. Générer ? Pour chaque programme : un Dockerfile dans son dossier et un manifeste App dans stackngo/<nom>.yaml (un service, le port, et un accès HTTPS quand le programme écoute). Un fichier existant n'est écrasé qu'après confirmation.
  3. Image : le nom proposé est celui du dossier du Dockerfile, tag latest ; Entrée l'accepte, ou saisissez le vôtre (registre/nom:tag).
  4. Confiance OIDC : voir ci-dessous.

Ensuite, construisez et poussez les images (sng registry build), puis appliquez : sng apply stackngo/.

Dockerfiles non-root​

Les Dockerfiles générés (Go, Node, Python, PHP) n'exécutent jamais le programme en root : ils s'exécutent sous un identifiant numérique, 65532:65532 (101:101 pour un site statique servi par nginx). Le manifeste App généré déclare le même utilisateur (user). Pour PHP, Apache écoute sur le port 8080, sans privilège.

Confiance OIDC pour votre dépôt GitLab​

Dernière étape, seulement si au moins une App a été générée et que le dossier est un dépôt GitLab : sng detect propose de créer une confiance OIDC limitée à ce dépôt et à sa branche courante, pour que les jobs de cette branche puissent déployer sans secret. Les droits accordés sont minimaux : appliquer les App générées et pousser leurs images dans le registre de la plateforme ; jamais de suppression, de secret ni de gestion d'identité. Une session de 30 minutes.

Avant toute création, un récapitulatif liste le dépôt, la branche, tous les droits et ce qui reste interdit. La réponse par défaut est non ; Ctrl-C ou Échap valent non, et alors rien n'est créé.

SituationComportement
Aucune branche active (HEAD détaché)la branche est demandée
Projet GitLab privéle numéro du projet (Project ID) est demandé ; aucun jeton GitLab n'est lu
Confiance équivalente déjà présenteelle est réutilisée ; rien n'est modifié ni supprimé
Pas de session, ou droits insuffisants (policy:admin, oidctrust:admin)les commandes sng tenant policy create, sng tenant oidc create et policy attach à lancer sont affichées
Dépôt non GitLabl'étape est ignorée

--no-oidc saute l'étape. Voir aussi sng tenant oidc.

Erreurs typiques​

SymptômeCause
aucun programme listéaucun fichier de build reconnu dans le dossier
PORT à -pas de serveur détecté : corrigez-le dans l'assistant si le programme écoute

Voir aussi​