image
image
image
image
image
image

Artifactory générer un jeton daccès

Dans certaines situations, vous souhaitez utiliser votre propre serveur Artifactory pour résoudre les dépendances Maven. Peut-être avez-vous des artefacts privés ou n’êtes-vous pas encore en train de migrer d’Artifactory vers GitHub Packages.

Quel est l’objectif de cet article de blog ?

Ce blog vous montre comment vous pouvez accorder à votre pipeline CI/CD GitHub Actions l’accès à votre dépôt Maven privé hébergé avec Artifactory. Mes exigences ont été les suivantes :

  • Dans notre processus de construction GitHub Actions, téléchargez les bibliothèques dépendantes à partir de notre serveur interne Artifactory.
  • N’autorisez l’accès qu’à un seul référentiel Maven dans notre instance Artifactory, mais pas à tous.
  • Ne créez pas d’utilisateurs CI/CD supplémentaires dans Artifactory ou les répertoires d’utilisateurs en aval.

Après avoir lu la documentation d’Artifactory, j’ai réalisé que je pouvais utiliser un utilisateur transitoire dans Artifactory. Ce concept est explicitement conçu pour les processus CI/CD.

Pour

des raisons de sécurité, je voulais uniquement donner accès à l’un de nos dépôts Maven dans notre instance Artifactory, mais pas à tous. Les utilisateurs de passage ne sont pas visibles dans Artifactory. J’ai donc dû créer un groupe spécifique qui peut être utilisé pour le mappage des autorisations.

Créez le nouveau groupe dans Admin > Sécurité > Groupes > Nouveau . Vous pouvez utiliser le nom de votre choix, mais vous devez le noter. Le nom du groupe ( ${ARTIFACTORY_GROUP_NAME }) est requis à l’étape suivante.

Après cela, j’ai dû attribuer l’autorisation appropriée au groupe nouvellement créé. Accédez à Admin > Sécurité > Autorisations > Nouveau et sélectionnez le référentiel approprié sur l’onglet Ressources. Dans l’onglet Groupe, vous devez sélectionner le groupe récemment créé et cocher la case Lire dans le panneau Actions du référentiel.

Générer un jeton d’accès dans Artifactory

Comme nous l’avons déjà mentionné, le jeton d’accès est utilisé par GitHub Actions pour accéder au serveur Artifactory.

La documentation d’Artifactory ne le mentionne pas explicitement, mais vous devez générer le jeton d’accès à l’aide d’une requête API. Il n’y a (apparemment ?) aucun moyen de générer un jeton d’accès normal via l’interface utilisateur Web. Comme indiqué dans la documentation de l’API REST Artifactory, vous devez appeler le point de terminaison Create Token.

Sur la ligne de commande, demandez un nouveau jeton en appelant

curl -u « ${USERNAME} :${PASSWORD} » -XPOST « https://${ARTIFACTORY_HOST}/artifactory/api/security/token » \ -d « username=github-actions » \ -d scope="membre-des-groupes :${ARTIFACTORY_GROUP_NAME} » \ -d expires_in=0

Remplacez les variables ${...} par les valeurs appropriées.

  • La variable username n’existe que pour des raisons de commodité. Il n’est pas nécessaire que l’utilisateur lui-même existe. Il est juste important que member-of-groups pointe vers notre groupe précédemment créé.
  • Avec expires_in vous pouvez définir l’expiration du jeton d’accès en secondes. Un zéro signifie qu’aucune date d’expiration n’est définie.

Artifactory répondra avec un corps comme celui-ci :

200 { « access_token""xajajajaja... « , « expires_in » : 0, « scope » : « api :* membre-des-groupes :ci-cd », « token_type » : « Bearer » }

Notez le contenu du champ access_token (${ARTIFACTORY_ACCESS_TOKEN}). Ceci est nécessaire dans votre action et pom.xml GitHub.

Configurer votre projet Maven

Votre configuration Maven doit être modifiée pour que GitHub Actions utilise votre serveur Artifactory.

Mettez à jour votre pom.xml

Pour rendre les dépendances externes plus évidentes, j’ai décidé de mettre le dépôt privé dans notre pom.xml . Vous pouvez également l’ignorer et utiliser le settings.xml . Mais je le recommanderais de cette façon : les nouveaux développeurs verront lors du paiement que ce dépôt doit être configuré simplement en regardant le POM.

Il suffit d’ajouter l’URL de l’URL du référentiel de votre Artifactory à la pom.xml :

... </dependencies> <repositories> <repository> <snapshots> <enabled>true</enabled> </snapshots> <id>artifactory</id> <name>my-repo</name> <url>https://${ARTIFACTORY_HOST}/artifactory/my-repo</url> </repository> </repositories> ...

Notez le nom de l’identifiant du serveur artifactory ( <id> ${MAVEN_SERVER_ID}</id> ).

Testez le jeton d’accès en le mettant dans votre settings.xml local

Dans votre settings.xml (ex : ~/.m2/settings.xml ), vous devez ajouter un nouveau serveur :

<servers> <server> <id>${MAVEN_SERVER_ID}</id> <username>github-actions</username> <password>xajajaja... </password> </server> </servers>
  • Remplacez ${MAVEN_SERVER_ID} par l’id que vous avez précédemment utilisé dans votre pom.xml
  • Update le contenu de l’élément password avec la valeur ${ARTIFACTORY_ACCESS_TOKEN}.

Lorsque vous exécutez le package mvn , votre serveur Artifactory doit être utilisé pour télécharger les dépendances privées.

Dans

votre projet GitHub, accédez à Paramètres > Secrets et ajoutez deux nouveaux secrets :

  • ARTIFACTORY_TOKEN avec le contenu de votre ${ARTIFACTORY_ACCESS_TOKEN}
  • ARTIFACTORY_USERNAME avec n’importe quel contenu (voir utilisateur temporaire ci-dessus) ; pour des raisons de commodité, je vous suggère d’utiliser le même nom d’utilisateur que vous avez déjà utilisé dans la commande curl.

Après avoir ajouté les deux variables d’environnement, votre page Secrets doit ressembler à ce qui suit :

Configurer le workflow GitHub Actions

L’action action/setup-java contient déjà les modifications de workflow requises. L’action nous permet d’ajouter un référentiel personnalisé à la settings.xml . Personnalisez votre flux de travail GitHub Actions comme ceci :

nom : Construire Dreitier sur : push : branches : [ maître ] pull_request : branches : [ maître ] jobs : build : runs-on : ubuntu-latest steps : - utilisations : actions/checkout@v2 - nom : Configurer JDK 1.8 utilise : actions/setup-java@v1 avec : java-version : 1.8 - nom : Configurer notre instance Artifactory personnalisée utilise : actions/setup-java@v1 avec : # exécuter setup-java remplace à nouveau le settings.xml java-version : 1.8 server-id : artifactory # valeur du champ repository/id du pom.xml server-username : ARTIFACTORY_USERNAME_REF # env variable name pour le nom d’utilisateur du serveur Artifactory ; valeur peut être n’importe quoi, car il s’agit d’un transitoire user-server-password : ARTIFACTORY_TOKEN_REF # nom de variable env pour le jeton d’accès Artifactory # après avoir exécuté cette action, la balise <username> contient ${env. ARTIFACTORY_USERNAME_REF} et <password> contient ${env. ARTIFACTORY_TOKEN_REF} - name : Construire avec Maven run : mvn -B package env : # assigner la variable d’environnement env. ARTIFACTORY_TOKEN_REF avec les secrets ARTIFACTORY_TOKEN ARTIFACTORY_TOKEN_REF : ${{ précédemment configurés. ARTIFACTORY_TOKEN }} # assigne la variable d’environnement env. ARTIFACTORY_USERNAME_REF avec le ARTIFACTORY_USERNAME ARTIFACTORY_USERNAME_REF précédemment configuré : ${{ secrets. ARTIFACTORY_USERNAME }}

Lors de l’exécution du processus de construction, vous verrez que notre instance Artifactory personnalisée est utilisée :

Je vous demande un don.

Vous avez aimé le contenu ou cet article vous a aidé et réduit le temps dont vous disposez Vous avez du mal à résoudre ce problème ? S’il vous plaît, donnez quelques dollars pour que je puisse continuer à résoudre des défis.

Faites-le ainsi !