{"id":42200,"date":"2019-03-18T00:00:00","date_gmt":"2019-03-17T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/integratsiya-appcenter-i-gitlab"},"modified":"2020-02-18T13:45:01","modified_gmt":"2020-02-18T10:45:01","slug":"integratsiya-appcenter-i-gitlab","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/integratsiya-appcenter-i-gitlab","title":{"rendered":"Int\u00e9gration d'AppCenter et de GitLab","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bonjour !<\/p>\n<p><\/p>\n<p>Je souhaite partager mon exp\u00e9rience de configuration de l'int\u00e9gration de GitLab et AppCenter via BitBucket. <\/p>\n<p><\/p>\n<p>La n\u00e9cessit\u00e9 d'une telle int\u00e9gration est apparue lors de la configuration du lancement automatique des tests UI pour un projet multiplateforme sur Xamarin. Un tutoriel d\u00e9taill\u00e9 est disponible ici !<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>*<em> Concernant l'automatisation des tests UI dans le cadre du multiplateformisme, je ferai un article s\u00e9par\u00e9 si la publication suscite de l'int\u00e9r\u00eat.<\/em><\/p>\n<p><\/p>\n<p>Je n'ai trouv\u00e9 qu'un seul <noindex><a rel=\"nofollow\" href=\"https:\/\/www.novis.co\/post\/building-to-appcenter-from-gitlab\/\">article<\/a><\/noindex>. Par cons\u00e9quent, mon article pourrait \u00eatre utile \u00e0 quelqu'un.<\/p>\n<p><\/p>\n<p><b>La t\u00e2che<\/b>: Configurer le lancement automatique des tests UI sur AppCenter alors que notre \u00e9quipe utilise GitLab comme syst\u00e8me de contr\u00f4le de version. <\/p>\n<p><\/p>\n<p><b>Le probl\u00e8me <\/b>s'est av\u00e9r\u00e9 \u00eatre que AppCenter ne s'int\u00e8gre pas directement avec GitLab. Comme une des solutions, nous avons choisi de contourner cela par BitBucket. <\/p>\n<p><\/p>\n<h2 id=\"shagi\">\u00c9tapes<\/h2>\n<p><\/p>\n<h1 id=\"1-sozdayom-pustoy-repozitoriy-na-bitbucket\">1. Cr\u00e9er un d\u00e9p\u00f4t vide sur BitBucket<\/h1>\n<p><\/p>\n<p>Je ne vois pas la n\u00e9cessit\u00e9 de d\u00e9crire cela plus en d\u00e9tail \ud83d\ude42<\/p>\n<p><\/p>\n<h1 id=\"2-nastraivaem-gitlab\">2. Configurer GitLab<\/h1>\n<p><\/p>\n<p>Nous devons nous assurer que lors d'un push\/merge dans le d\u00e9p\u00f4t, les modifications sont envoy\u00e9es \u00e9galement sur BitBucket. Pour cela, nous ajoutons un runner (ou nous modifions le fichier .gitlab-ci.yml existant). <\/p>\n<p><\/p>\n<p>D'abord, ajoutons des commandes dans la section before_scripts<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> - git config --global user.email \"user@email\"\n - git config --global user.name \"username\"<\/code><\/pre>\n<p><\/p>\n<p>Ensuite, ajoutons la commande suivante dans la phase souhait\u00e9e :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">- git push --mirror https:\/\/username:password@bitbucket.org\/username\/projectname.git<\/code><\/pre>\n<p><\/p>\n<p>Dans mon cas, cela a donn\u00e9 le fichier suivant<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">before_script:\n - git config --global user.email \"user@email\"\n - git config --global user.name \"username\"\n\nstages:\n  - mirror\nmirror:\n  stage: mirror\n  script:\n    - git push --mirror https:\/\/****:*****@bitbucket.org\/****\/testapp.git<\/code><\/pre>\n<p><\/p>\n<p>Lan\u00e7ons la build et v\u00e9rifions que nos modifications\/fichiers ont bien \u00e9t\u00e9 envoy\u00e9s sur BitBucket.<br \/>\n<em>* Comme l'exp\u00e9rience l'a montr\u00e9, la configuration des cl\u00e9s SSH n'est pas obligatoire. Mais, par pr\u00e9caution, je fournirai ci-dessous l'algorithme de configuration de la connexion via SSH.<\/em><\/p>\n<p>\n<b class=\"spoiler_title\">Connexion via SSH<\/b><\/p>\n<p>Tout d'abord, il faut g\u00e9n\u00e9rer une cl\u00e9 SSH. De nombreuses articles en parlent. Vous pouvez consulter un exemple. <noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/book\/ru\/v2\/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%B3%D0%BE-SSH-%D0%BA%D0%BB%D1%8E%D1%87%D0%B0\">ici<\/a><\/noindex>.<br \/>\nLes cl\u00e9s g\u00e9n\u00e9r\u00e9es ressemblent \u00e0 ceci :<br \/>\n<img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/dc7eb14c3150d403556e58f26feb311c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ensuite <strong>la cl\u00e9 secr\u00e8te<\/strong> doit \u00eatre ajout\u00e9e en tant que variable sur GitLab. Pour cela, allez dans Settings &gt; CI\/CD &gt; Enviroment Variables. Ajoutez TOUT le contenu du fichier o\u00f9 vous avez enregistr\u00e9 la cl\u00e9 secr\u00e8te. Nommons la variable SSH_PRIVATE_KEY.<br \/>\n*<em> ce fichier, contrairement au fichier de cl\u00e9 publique, n'aura pas d'extension<\/em><br \/>\n<img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/1eed6ba32ccd64ec83e7b04aa8adfa52.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Super, maintenant il faut ajouter la cl\u00e9 publique sur BitBucket. Pour cela, ouvrez le d\u00e9p\u00f4t, allez dans Settings &gt; Access Keys. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/99ddececc47bc9ad30baf539b333b537.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cliquez sur Ajouter une cl\u00e9 et collez le contenu du fichier contenant la cl\u00e9 publique (fichier avec l'extension .pub).<\/p>\n<p><\/p>\n<p>La prochaine \u00e9tape sera d'utiliser des cl\u00e9s dans gitlab-runner. Utilisez ces commandes, mais remplacez les ast\u00e9risques par vos donn\u00e9es.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">image: timbru31\/node-alpine-git:latest\n\nstages:\n  - mirror\n\nbefore_script:\n  - eval $(ssh-agent -s)\n  - echo \"$SSH_PRIVATE_KEY\" | tr -d 'r' | ssh-add - &gt; \/dev\/null\n  - mkdir -p ~\/.ssh\n  - chmod 700 ~\/.ssh\n  - ssh-keyscan bitbucket.org &gt;&gt; ~\/.ssh\/known_hosts\n  - chmod 644 ~\/.ssh\/known_hosts\n  - git config --global user.email \"*****@***\"\n  - git config --global user.name \"****\"\n  - ssh -T git@bitbucket.org\n\nmirror:\n  stage: mirror\n  script:\n    - git push --mirror https:\/\/****:****@bitbucket.org\/*****\/*.git<\/code><\/pre>\n<p><\/p>\n<h1 id=\"3-nastroyka-appcenter\">3. Configuration de l'AppCenter<\/h1>\n<p><\/p>\n<p>Cr\u00e9ons une nouvelle application sur AppCenter. <\/p>\n<p>\n<img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/fa141c0f83b9ea3e18596e007bcab82a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Indiquez la langue\/plateforme<\/p>\n<p>\n<img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/c0f072b2486a162bd5337185efe582a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ensuite, acc\u00e9dez \u00e0 la section Build de l'application nouvellement cr\u00e9\u00e9e. S\u00e9lectionnez BitBucket et le d\u00e9p\u00f4t cr\u00e9\u00e9 \u00e0 l'\u00e9tape 1.<\/p>\n<p><\/p>\n<p>Super, maintenant nous devons configurer la build. Pour cela, cherchons l'ic\u00f4ne d'engrenage.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/c88755c8d665dc9c73c141efa1591441.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>En principe, tout est intuitif. Choisissez le projet et la configuration. Si n\u00e9cessaire, activez l'ex\u00e9cution des tests apr\u00e8s la build. Ils seront lanc\u00e9s automatiquement.<\/p>\n<p><\/p>\n<p>En gros, c'est tout. Cela semble simple, mais, bien s\u00fbr, tout ne se passera pas sans accroc. Par cons\u00e9quent, je vais d\u00e9crire quelques erreurs auxquelles j'ai \u00e9t\u00e9 confront\u00e9e lors de l'utilisation :<\/p>\n<p>\n<b class=\"spoiler_title\">'ssh-keygen' n'est pas reconnu comme une commande interne ou externe.<\/b><\/p>\n<p>Cela se produit parce que le chemin vers ssh-keygen.exe n'est pas ajout\u00e9 aux variables d'environnement.<br \/>\nIl y a deux options : ajoutez C:Program FilesGitusrbin dans les variables d'environnement (cela s'appliquera apr\u00e8s le red\u00e9marrage de la machine), ou ex\u00e9cutez la console depuis ce r\u00e9pertoire. <\/p>\n<p>\n<b class=\"spoiler_title\">L'AppCenter ne s'est pas connect\u00e9 au bon compte BitBucket ?<\/b><\/p>\n<p>Pour r\u00e9soudre ce probl\u00e8me, il faut dissocier le compte BitBucket de l'AppCenter. Acc\u00e9dez au mauvais compte BitBucket et allez dans le profil utilisateur.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/061f37840354cc53be631b1b366b2758.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ensuite, allez dans Param\u00e8tres &gt; Gestion des acc\u00e8s &gt; OAuth<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/73b523f5b52be6a7f3164c26c94c3407.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cliquez sur R\u00e9voquer pour dissocier le compte.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/f67da9607ec992ba5ab54ab16433a2d2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Apr\u00e8s cela, il faut se connecter avec le bon compte BitBucket.<br \/>\n*<em> En dernier recours, vous pouvez \u00e9galement vider le cache du navigateur.<\/em><\/p>\n<p><\/p>\n<p>Maintenant, retournons dans l'AppCenter. Acc\u00e9dez \u00e0 la section Build, cliquez sur D\u00e9connecter le compte BitBucket.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Int\u00e9gration d&#039;AppCenter et de GitLab\" src=\"\/wp-content\/uploads\/2019\/03\/ed50959b99e0a22ab0c85fbc4cca9b5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lorsque l'ancien compte sera d\u00e9connect\u00e9, associez \u00e0 nouveau l'AppCenter. Cette fois au bon compte.<\/p>\n<p>\n<b class=\"spoiler_title\">'eval' n'est pas reconnu comme une commande interne ou externe.<\/b><\/p>\n<p>Utilisez \u00e0 la place la commande<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">  - eval $(ssh-agent -s)<\/code><\/pre>\n<p><\/p>\n<p>La commande :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">  - ssh-agent<\/code><\/pre>\n<p><\/p>\n<p>Dans certains cas, il faudra soit indiquer le chemin complet vers C:Program FilesGitusrbinssh-agent.exe, soit ajouter ce chemin aux variables syst\u00e8me sur la machine o\u00f9 le runner est lanc\u00e9.<\/p>\n<p>\n<b class=\"spoiler_title\">L'AppCenter Build essaie de lancer la build pour un projet \u00e0 partir d'un d\u00e9p\u00f4t BitBucket obsol\u00e8te.<\/b><\/p>\n<p>Dans mon cas, le probl\u00e8me est survenu parce que je travaillais avec plusieurs comptes. Il a \u00e9t\u00e9 r\u00e9solu en vidant le cache.<\/p>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444136\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0422\u0440\u044f\u043c, \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435! \u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0451\u043c \u043e\u043f\u044b\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0433\u0430\u0446\u0438\u0438 GitLab \u0438 AppCenter \u0447\u0435\u0440\u0435\u0437 BitBucket. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0432 \u0445\u043e\u0434\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 UI \u0442\u0435\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 Xamarin. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c! * \u041e\u0431 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 UI \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u0434\u0435\u043b\u0430\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0435\u0441\u043b\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f. \u041f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043d\u0430\u0440\u044b\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0441\u0442\u0430\u0442\u044c\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-42200","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0422\u0440\u044f\u043c, \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435! \u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0451\u043c \u043e\u043f\u044b\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0433\u0430\u0446\u0438\u0438 GitLab \u0438 AppCenter \u0447\u0435\u0440\u0435\u0437 BitBucket.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/integratsiya-appcenter-i-gitlab\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f AppCenter \u0438 GitLab | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0422\u0440\u044f\u043c, \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435! \u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0451\u043c \u043e\u043f\u044b\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0433\u0430\u0446\u0438\u0438 GitLab \u0438 AppCenter \u0447\u0435\u0440\u0435\u0437 BitBucket.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/integratsiya-appcenter-i-gitlab\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-03-17T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:45:01+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Int\u00e9gration d'AppCenter et GitLab | ProHoster","description":"Bonjour ! Je souhaite partager mon exp\u00e9rience concernant la configuration de l'int\u00e9gration entre GitLab et AppCenter via BitBucket.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/integratsiya-appcenter-i-gitlab","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f AppCenter \u0438 GitLab | ProHoster","og:description":"\u0422\u0440\u044f\u043c, \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435! \u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0451\u043c \u043e\u043f\u044b\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0433\u0430\u0446\u0438\u0438 GitLab \u0438 AppCenter \u0447\u0435\u0440\u0435\u0437 BitBucket.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/integratsiya-appcenter-i-gitlab","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-03-17T21:00:00+00:00","article:modified_time":"2020-02-18T10:45:01+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"42200","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 07:36:23","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:42:04","updated":"2026-01-22 07:36:23","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/42200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=42200"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/42200\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=42200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=42200"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=42200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}