{"id":20002,"date":"2026-09-14T21:17:51","date_gmt":"2026-09-14T21:17:51","guid":{"rendered":"https:\/\/www.mailgun.com\/blog\/github-actions-templates-2\/"},"modified":"2026-09-14T21:17:51","modified_gmt":"2026-09-14T21:17:51","slug":"github-actions-templates","status":"publish","type":"blog","link":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/","title":{"rendered":"Mod\u00e8les GitHub Actions priv\u00e9s pour votre organisation"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">GitHub Actions est le petit nouveau dans le domaine de l&rsquo;int\u00e9gration et du d\u00e9ploiement continus (CI\/CD), mais il surpasse rapidement les serveurs d&rsquo;automatisation open source traditionnels. Depuis un certain temps, l&rsquo;\u00e9quipe de d\u00e9veloppement de Sinch Mailgun sait que certains des outils et technologies utilis\u00e9s pour la configuration voient leur communaut\u00e9 se r\u00e9duire, et risquent de devenir trop sp\u00e9cialis\u00e9s pour \u00eatre raisonnablement maintenus. C&rsquo;est pour ces raisons que nous effectuons actuellement une migration de notre syst\u00e8me CI\/CD bas\u00e9 sur Jenkins vers le CI\/CD de GitHub Actions. En toute transparence : parfois, certaines fonctionnalit\u00e9s manquent \u00e0 l&rsquo;appel, \u00e0 moins que vous ne soyez un client GitHub Enterprise&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si je dis cela, c&rsquo;est parce que, jusqu&rsquo;\u00e0 tr\u00e8s r\u00e9cemment, les mod\u00e8les de flux de travail dans les d\u00e9p\u00f4ts priv\u00e9s n&rsquo;\u00e9taient pas pris en charge, ce qui nous a oblig\u00e9s \u00e0 utiliser une solution de contournement. Heureusement, <a href=\"https:\/\/github.blog\/changelog\/2022-03-04-sharing-github-actions-within-your-enterprise-is-now-ga\/\" target=\"_tabs\" rel=\"noopener noreferrer\">GitHub a r\u00e9cemment publi\u00e9 une mise \u00e0 jour<\/a> qui prend d\u00e9sormais en charge cette fonctionnalit\u00e9 pour ses abonnements Enterprise. Mais <b>pour les personnes utilisant les abonnements Free ou Team de GitHub, le probl\u00e8me persiste. <\/b>Nous ignorons si, et quand, GitHub d\u00e9ploiera cette mise \u00e0 jour pour d&rsquo;autres abonnements. En attendant, voici ce que nous avons v\u00e9cu et la mani\u00e8re dont nous avons r\u00e9solu le probl\u00e8me.<\/p>\n\n\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-3626\"><p class=\"h5 m-0\" id=\"toc-title-3626\">Table des mati\u00e8res<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#le-defi-lie-a-la-reutilisation-des-flux-de-travail\">Le d\u00e9fi li\u00e9 \u00e0 la r\u00e9utilisation des flux de travail<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#synchronisation-des-modeles-de-flux-de-travail\">Synchronisation des mod\u00e8les de flux de travail\u00a0<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#modeles-github-actions-une-solution-de-contournement-acceptable-pour-les-abonnements-hors-enterprise\">Mod\u00e8les GitHub Actions : une solution de contournement acceptable pour les abonnements hors Enterprise<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#simplifier-la-configuration-a-laide-dun-gestionnaire-de-paquets-base-sur-git\">Simplifier la configuration \u00e0 l&rsquo;aide d&rsquo;un gestionnaire de paquets bas\u00e9 sur Git<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#avantages-et-inconvenients-de-github-actions\">Avantages et inconv\u00e9nients de GitHub Actions<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">06<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#perspectives\">Perspectives<\/a><\/div><\/div><\/nav>\n\n\n<h2 class=\"wp-block-heading\">Le d\u00e9fi li\u00e9 \u00e0 la r\u00e9utilisation des flux de travail<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mon exp\u00e9rience pr\u00e9alable avec GitLab CI a facilit\u00e9 mon apprentissage de GitHub Actions, mais les d\u00e9tails plus subtils se sont av\u00e9r\u00e9s diff\u00e9rents. Par exemple, l&rsquo;inclusion d&rsquo;un ensemble d&rsquo;\u00e9tapes d&rsquo;un projet dans un autre est tr\u00e8s diff\u00e9rente. GitHub Actions et GitLab CI prennent tous deux en charge la r\u00e9utilisation d&rsquo;\u00e9tapes d&rsquo;un d\u00e9p\u00f4t \u00e0 un autre, mais <b>les abonnements Free et Team de GitHub Actions exigent que les \u00e9tapes \u00e0 inclure soient accessibles publiquement<\/b>. Dans GitLab CI, on peut utiliser l&rsquo;authentification pour importer les t\u00e2ches, \u00e9tapes, variables, etc. d&rsquo;un d\u00e9p\u00f4t priv\u00e9 \u00e0 l&rsquo;aide de la directive  <a href=\"https:\/\/docs.gitlab.com\/ee\/ci\/yaml\/index.html#include\" target=\"_tabs\" rel=\"noopener noreferrer\">includes<\/a> directive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au moment de la r\u00e9daction de cet article, GitHub Actions comptait <a href=\"https:\/\/stackoverflow.com\/questions\/4659549\/maintain-git-repo-inside-another-git-repo\/4660048#4660048\" target=\"_tabs\" rel=\"noopener noreferrer\">plusieurs tickets<\/a> (<a href=\"https:\/\/github.com\/github\/roadmap\/issues\/74\" target=\"_tabs\" rel=\"noopener noreferrer\">en fait, deux<\/a>) pour le suivi de cette fonctionnalit\u00e9 tr\u00e8s attendue concernant les d\u00e9p\u00f4ts priv\u00e9s. Ces tickets \u00e9taient ouverts depuis pr\u00e8s de 18 mois et la fonctionnalit\u00e9 vient tout juste d&rsquo;\u00eatre ajout\u00e9e pour les abonnements Enterprise. Je ne sais pas quand (ni si) cette fonctionnalit\u00e9 sera disponible pour tout le monde, mais il s&rsquo;agit d&rsquo;une fonction essentielle pour prendre en charge la r\u00e9utilisation priv\u00e9e des flux de travail.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Synchronisation des mod\u00e8les de flux de travail\u00a0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai parcouru les publications de Stack Overflow et creus\u00e9 les fils de discussion des tickets GitHub, mais je n&rsquo;ai trouv\u00e9 aucune solution de contournement satisfaisante pour pallier l&rsquo;impossibilit\u00e9 d&rsquo;inclure des flux de travail d&rsquo;autres d\u00e9p\u00f4ts priv\u00e9s au sein d&rsquo;une m\u00eame organisation.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai pens\u00e9 que les sous-modules git pourraient constituer une solution envisageable. Apr\u00e8s tout, cela permet \u00e0 un d\u00e9p\u00f4t d&rsquo;en inclure un autre. Pouvions-nous inclure nos mod\u00e8les de flux de travail en tant que sous-module dans notre d\u00e9p\u00f4t et utiliser la gestion des sous-modules de git pour maintenir les mod\u00e8les \u00e0 jour ? C&rsquo;\u00e9tait possible, mais pas si nous voulions conserver des mod\u00e8les non pertinents pour certains d\u00e9p\u00f4ts dans le d\u00e9p\u00f4t de mod\u00e8les. <b>Git consid\u00e8re un d\u00e9p\u00f4t comme la plus petite unit\u00e9 dans la gestion des sous-modules<\/b>. Notre solution consistait donc \u00e0 disposer d&rsquo;un d\u00e9p\u00f4t contenant uniquement les flux de travail pertinents, ou \u00e0 \u00e9viter compl\u00e8tement d&rsquo;utiliser les sous-modules.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons choisi de ne pas utiliser de sous-modules, car nous souhaitions qu&rsquo;un seul d\u00e9p\u00f4t de flux de travail contienne des mod\u00e8les Go et Python (entre autres), mais cette r\u00e9flexion m&rsquo;a permis de recueillir des informations pr\u00e9cieuses. Certaines <a href=\"https:\/\/stackoverflow.com\/a\/4660048\" target=\"_tabs\" rel=\"noopener noreferrer\">l&rsquo;utilisation de liens symboliques pour inclure des parties d&rsquo;un d\u00e9p\u00f4t dans un autre <\/a>au lieu de sous-modules.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons donc essay\u00e9 de lier notre mod\u00e8le au flux de travail de notre application. <b><code>ln $DIR\/workflows\/go\/build_and_push.yml $DIR\/my-app\/.github\/workflows\/build_and_push.yml<\/code><\/b> fonctionne pour maintenir notre mod\u00e8le de flux de travail en synchronisation avec notre application\u2026 jusqu&rsquo;\u00e0 ce que nous ex\u00e9cutions une commande git qui modifie le mod\u00e8le (git change les inodes des fichiers qu&rsquo;il modifie). Puisque nous voulions pouvoir utiliser la commande git pull pour obtenir les mises \u00e0 jour des mod\u00e8les, il nous fallait trouver un moyen d&rsquo;appliquer automatiquement les modifications du d\u00e9p\u00f4t de mod\u00e8les au fichier d&rsquo;une application.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mod\u00e8les GitHub Actions : une solution de contournement acceptable pour les abonnements hors Enterprise<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En l&rsquo;absence de fonctionnalit\u00e9 native pour inclure des mod\u00e8les priv\u00e9s dans nos flux de travail et face \u00e0 notre d\u00e9sir d&rsquo;avoir un d\u00e9p\u00f4t unique stockant nos mod\u00e8les de flux de travail, nous avons opt\u00e9 pour cette solution simple qui permet d&rsquo;optimiser la facilit\u00e9 d&rsquo;application des mises \u00e0 jour de mod\u00e8les. En attendant que les abonnements Free et Team de GitHub prennent en charge les mod\u00e8les priv\u00e9s, vous pouvez migrer, mais voici une solution possible que nous avons essay\u00e9e et test\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous incluons des exemples de hooks git dans notre d\u00e9p\u00f4t de mod\u00e8les (par ex., <code>hooks\/post-checkout.sample<\/code>), car toute commande git susceptible de rompre des liens doit \u00e9galement les r\u00e9tablir. Les hooks pour <code>post-checkout<\/code> et <code>post-merge<\/code> ressemblent \u00e0 ceci :<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    #!\/bin\/sh\r\n#\r\n# An example hook script to keep your application workflow up-to-date with this\r\n# template. For example, this updates my-app&#039;s workflow with the go template.\r\n#\r\n# To activate, this must have execute permission and be copied like so:\r\n#\r\n# $ cp hooks\/post-checkout.sample .git\/hooks\/post-checkout\r\n# $ chmod +x .git\/hooks\/post-checkout\r\n\r\n# setup our project directory, assumes my-app is sibling\r\nexport PROJ_DIR=..\r\n# remove existing workflow for clean install\r\nrm $PROJ_DIR\/my-app\/.github\/workflows\/build_and_push.yml\r\n# link app workflow to template\r\nln -v $PROJ_DIR\/workflows\/go\/build_and_push.yml $PROJ_DIR\/my-app\/.github\/workflows\/build_and_push.yml\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\"><code>git merge<\/code> et <code>git checkout<\/code> sont des op\u00e9rations courantes qui rompent les liens ; nous ex\u00e9cutons donc ce script apr\u00e8s ces actions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ainsi, pour que les utilisateurs puissent appliquer des mod\u00e8les de flux de travail \u00e0 leurs applications, ils doivent :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Cloner notre d\u00e9p\u00f4t <code>workflows<\/code>.<\/li>\n\n\n\n<li>Modifier <code>hooks\/post-checkout.sample<\/code> et <code>hooks\/post-merge.sample<\/code> pour les adapter \u00e0 leur(s) application(s).<\/li>\n\n\n\n<li>Les copier dans leurs emplacements <code>.git\/hooks<\/code> respectifs et leur accorder les autorisations d&rsquo;ex\u00e9cution.<\/li>\n\n\n\n<li>Effectuer un <code>git checkout<\/code> ou un <code>git pull<\/code> (<code>git checkout master<\/code> depuis la branche principale fonctionne).<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Malheureusement, cela ne permet pas de maintenir le d\u00e9p\u00f4t de mod\u00e8les \u00e0 jour de mani\u00e8re autonome, et n\u00e9cessite une certaine interaction de la part des personnes responsables du projet pour adopter les mises \u00e0 jour : apr\u00e8s tout, les modifications doivent \u00eatre appliqu\u00e9es au d\u00e9p\u00f4t distant. Il est possible de le faire via les commandes suivantes :<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    # from the workflow templates repo\r\n$ git pull\r\n# from the project repo\r\n$ git add .github\/workflows\/\r\n$ git commit -m &quot;upgrade workflow template&quot;\r\n$ git push\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<p class=\"wp-block-paragraph\">Ensuite, le flux de travail s&rsquo;ex\u00e9cutera avec les modifications les plus r\u00e9centes provenant du d\u00e9p\u00f4t de mod\u00e8les.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Simplifier la configuration \u00e0 l&rsquo;aide d&rsquo;un gestionnaire de paquets bas\u00e9 sur Git<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Puisque nous avons choisi d&rsquo;optimiser la facilit\u00e9 d&rsquo;application des mod\u00e8les, nous avons d\u00fb faire d&rsquo;autres compromis avec notre solution de contournement. Le plus \u00e9vident est la configuration requise. Nous demandons aux utilisateurs d&rsquo;organiser leurs d\u00e9p\u00f4ts d&rsquo;une mani\u00e8re bien pr\u00e9cise et de copier-coller manuellement des fichiers. Ces exigences entra\u00eenent une certaine fragilit\u00e9, le syst\u00e8me pouvant tomber en panne si des fichiers sont d\u00e9plac\u00e9s ou si les inodes changent sans que nous en ayons connaissance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cependant, cette solution de contournement pr\u00e9sente un avantage int\u00e9ressant. Nous avons d\u00e9couvert un ensemble d&rsquo;outils et de scripts qui peuvent fonctionner dans un contexte g\u00e9n\u00e9rique. Nous avons cr\u00e9\u00e9 un gestionnaire de paquets g\u00e9n\u00e9rique bas\u00e9 sur git, qui utilise des liens et des hooks git pour mettre \u00e0 jour les fichiers entre diff\u00e9rents d\u00e9p\u00f4ts git :<\/p>\n\n\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#code_0\" type=\"button\" role=\"tab\" aria-controls=\"code_0\" aria-selected=\"true\">\r\n                                PHP                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"code_0\" role=\"tabpanel\" aria-labelledby=\"code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#code_0_content\" data-clipboard-label=\"Copier dans le presse-papiers\" data-clipboard-success-label=\"Copi\u00e9\u00a0!\" data-clipboard-error-label=\"Impossible de copier\" data-tooltip=\"Copier dans le presse-papiers\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"Copier dans le presse-papiers\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/www.mailgun.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                            <pre class=\"w-100 h-100 m-0 line-numbers language-PHP\">\r\n                                <code id=\"code_0_content\" class=\"language-PHP\">\r\n\r\n                                    #!\/bin\/sh\r\n\r\n# set paths\/files (relative to workflows repo)\r\nexport TEMPLATE_DIR=.\r\nexport APP_DIR=..\/my-app\r\nexport DOCKER_TEMPL=go\/Dockerfile\r\nexport WKFLW_TEMPL=go\/build.yml\r\n\r\n#remove files for clean install\r\nrm $APP_DIR\/Dockerfil $APP_DIR\/.github\/workflows\/build.yml\r\n\r\n# link app workflow to template\r\nln -v $TEMPLATE_DIR\/$DOCKER_TEMPL $APP_DIR\/Dockerfile\r\nln -v $TEMPLATE_DIR\/$WKFLW_TEMPL $APP_DIR\/.github\/workflows\/build.yml\r\n\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n\n\n<h2 class=\"wp-block-heading\">Avantages et inconv\u00e9nients de GitHub Actions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Alors, pourquoi GitHub Actions ? Eh bien, notre syst\u00e8me actuel n\u00e9cessite des modifications, des pull requests, des d\u00e9ploiements et bien plus encore pour int\u00e9grer un nouveau service. De plus, en tant qu&rsquo;utilisateur de GitHub Enterprise, nous disposons d&rsquo;un quota important de minutes d&rsquo;ex\u00e9cution dans GitHub Actions, et nous avons donc d\u00e9cid\u00e9 d&rsquo;\u00e9valuer cette alternative.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant que nous utilisons GitHub Actions depuis un certain temps, voici mes conclusions : <\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\nAvantages de GitHub Actions\n<\/th><th>\nInconv\u00e9nients de GitHub Actions\n<\/th><\/tr><\/thead><tbody><tr><td>\nL&rsquo;utilisation d&rsquo;ex\u00e9cuteurs h\u00e9berg\u00e9s nous \u00e9vite d&rsquo;avoir \u00e0 nous soucier de leur maintenance.\n<\/td><td>\nLa facturation se fait \u00e0 la minute d&rsquo;ex\u00e9cution, ce qui nous dissuade d&rsquo;effectuer des tests de longue dur\u00e9e sur les ex\u00e9cuteurs h\u00e9berg\u00e9s par GitHub.\n<\/td><\/tr><tr><td>\nIl offre certains avantages en mati\u00e8re de s\u00e9curit\u00e9 (bien qu&rsquo;ils viennent tout juste de subir une  <a href=\"https:\/\/www.theregister.com\/2022\/04\/21\/github-stolen-oauth-tokens-used-in-breaches\/\">faille<\/a>).\n<\/td><td>\nIl lui manque encore certaines fonctionnalit\u00e9s offertes par Jenkins.\n<\/td><\/tr><tr><td>\nIl poss\u00e8de une syntaxe CI\/CD d\u00e9finie par YAML plus courante.\n<\/td><td>\nGitHub utilise des m\u00e9taphores et un langage similaires \u00e0 ceux de ses concurrents dans Actions, mais les m\u00e9taphores ne sont pas toujours identiques. Cela rend la migration et l&rsquo;apprentissage un peu plus difficiles.\n<\/td><\/tr><tr><td>\nIl est plus facile d&rsquo;int\u00e9grer des t\u00e2ches open source\/publiques.\n<\/td><td>\nLe travail avec des secrets peut \u00eatre dangereux et l&rsquo;\u00e9quipe de d\u00e9veloppement peut divulguer des donn\u00e9es sans le savoir.\n<\/td><\/tr><tr><td>\nL&rsquo;int\u00e9gration avec l&rsquo;interface utilisateur de GitHub facilite la consultation des r\u00e9sultats CI.\n<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Comme vous pouvez le constater, l&rsquo;herbe n&rsquo;est pas toujours plus verte ailleurs. Cependant, nous pr\u00e9disons que GitHub, b\u00e9n\u00e9ficiant des ressources in\u00e9puisables de Microsoft, finira par distancer Jenkins \u00e0 long terme.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Perspectives<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bien que notre solution de contournement ne soit pas parfaite, elle fonctionne en attendant que GitHub prenne en charge les mod\u00e8les priv\u00e9s pour les abonnements hors Enterprise. Si cela se produit, vous pourrez migrer vos mod\u00e8les vers un d\u00e9p\u00f4t unique.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cela dit, nous poss\u00e9dons un compte GitHub Enterprise, mais nous n&rsquo;avons pas encore la possibilit\u00e9 d&rsquo;activer la fonctionnalit\u00e9 de d\u00e9p\u00f4t priv\u00e9 que GitHub vient d&rsquo;ajouter.\u00a0Nous essayons encore d&rsquo;en d\u00e9terminer la cause.\u00a0En attendant, nous utilisons notre solution de contournement et v\u00e9rifierons \u00e0 l&rsquo;avenir si nous pouvons acc\u00e9der \u00e0 cette nouvelle fonctionnalit\u00e9. Restez \u00e0 l&rsquo;\u00e9coute\u00a0!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s avoir utilis\u00e9 Jenkins pendant plusieurs ann\u00e9es, nous avons d\u00e9cid\u00e9 de migrer vers GitHub Actions, mais nous avons rencontr\u00e9 quelques difficult\u00e9s. Nous avons donc mis au point une solution de contournement qui permet aux utilisateurs GitHub n&rsquo;ayant pas d&rsquo;abonnement Enterprise, mais disposant de d\u00e9p\u00f4ts priv\u00e9s, de mettre \u00e0 jour leurs mod\u00e8les de flux de travail.<\/p>\n","protected":false},"author":16,"featured_media":3952,"menu_order":0,"template":"","meta":{"_acf_changed":true,"footnotes":""},"blog_category":[19],"class_list":["post-20002","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-dev-life"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Comment utiliser les d\u00e9p\u00f4ts priv\u00e9s avec GitHub Actions - Transactional Email API Service For Developers | Mailgun<\/title>\n<meta name=\"description\" content=\"La migration de votre CI\/CD vers GitHub Actions peut s&#039;av\u00e9rer d\u00e9licate si vous souhaitez utiliser des mod\u00e8les priv\u00e9s. Heureusement, nous avons cr\u00e9\u00e9 cette solution de contournement pour appliquer les mises \u00e0 jour de mod\u00e8les.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comment utiliser les d\u00e9p\u00f4ts priv\u00e9s avec GitHub Actions - Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:description\" content=\"La migration de votre CI\/CD vers GitHub Actions peut s&#039;av\u00e9rer d\u00e9licate si vous souhaitez utiliser des mod\u00e8les priv\u00e9s. Heureusement, nous avons cr\u00e9\u00e9 cette solution de contournement pour appliquer les mises \u00e0 jour de mod\u00e8les.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/\" \/>\n<meta property=\"og:site_name\" content=\"Transactional Email API Service For Developers | Mailgun\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png\" \/>\n\t<meta property=\"og:image:width\" content=\"720\" \/>\n\t<meta property=\"og:image:height\" content=\"448\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/dev-life\\\/github-actions-templates\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/dev-life\\\/github-actions-templates\\\/\",\"name\":\"Comment utiliser les d\u00e9p\u00f4ts priv\u00e9s avec GitHub Actions - Transactional Email API Service For Developers | Mailgun\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/dev-life\\\/github-actions-templates\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/dev-life\\\/github-actions-templates\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"datePublished\":\"2026-09-14T21:17:51+00:00\",\"description\":\"La migration de votre CI\\\/CD vers GitHub Actions peut s'av\u00e9rer d\u00e9licate si vous souhaitez utiliser des mod\u00e8les priv\u00e9s. Heureusement, nous avons cr\u00e9\u00e9 cette solution de contournement pour appliquer les mises \u00e0 jour de mod\u00e8les.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/dev-life\\\/github-actions-templates\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/dev-life\\\/github-actions-templates\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/dev-life\\\/github-actions-templates\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/MG-Blog-Dev-Life.png\",\"width\":720,\"height\":448},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/dev-life\\\/github-actions-templates\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Mod\u00e8les GitHub Actions priv\u00e9s pour votre organisation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"description\":\"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#organization\",\"name\":\"Transactional Email API Service For Developers | Mailgun\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"contentUrl\":\"https:\\\/\\\/www.mailgun.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-android-chrome-512x512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Transactional Email API Service For Developers | Mailgun\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mailgun.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Comment utiliser les d\u00e9p\u00f4ts priv\u00e9s avec GitHub Actions - Transactional Email API Service For Developers | Mailgun","description":"La migration de votre CI\/CD vers GitHub Actions peut s'av\u00e9rer d\u00e9licate si vous souhaitez utiliser des mod\u00e8les priv\u00e9s. Heureusement, nous avons cr\u00e9\u00e9 cette solution de contournement pour appliquer les mises \u00e0 jour de mod\u00e8les.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/","og_locale":"fr_FR","og_type":"article","og_title":"Comment utiliser les d\u00e9p\u00f4ts priv\u00e9s avec GitHub Actions - Transactional Email API Service For Developers | Mailgun","og_description":"La migration de votre CI\/CD vers GitHub Actions peut s'av\u00e9rer d\u00e9licate si vous souhaitez utiliser des mod\u00e8les priv\u00e9s. Heureusement, nous avons cr\u00e9\u00e9 cette solution de contournement pour appliquer les mises \u00e0 jour de mod\u00e8les.","og_url":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/","og_site_name":"Transactional Email API Service For Developers | Mailgun","og_image":[{"width":720,"height":448,"url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/","url":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/","name":"Comment utiliser les d\u00e9p\u00f4ts priv\u00e9s avec GitHub Actions - Transactional Email API Service For Developers | Mailgun","isPartOf":{"@id":"https:\/\/www.mailgun.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/#primaryimage"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","datePublished":"2026-09-14T21:17:51+00:00","description":"La migration de votre CI\/CD vers GitHub Actions peut s'av\u00e9rer d\u00e9licate si vous souhaitez utiliser des mod\u00e8les priv\u00e9s. Heureusement, nous avons cr\u00e9\u00e9 cette solution de contournement pour appliquer les mises \u00e0 jour de mod\u00e8les.","breadcrumb":{"@id":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/#primaryimage","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/07\/MG-Blog-Dev-Life.png","width":720,"height":448},{"@type":"BreadcrumbList","@id":"https:\/\/www.mailgun.com\/fr\/blog\/dev-life\/github-actions-templates\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.mailgun.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.mailgun.com\/fr\/blog\/"},{"@type":"ListItem","position":3,"name":"Mod\u00e8les GitHub Actions priv\u00e9s pour votre organisation"}]},{"@type":"WebSite","@id":"https:\/\/www.mailgun.com\/fr\/#website","url":"https:\/\/www.mailgun.com\/fr\/","name":"Transactional Email API Service For Developers | Mailgun","description":"Des API d\u2019emails transactionnels puissantes qui vous permettent d'envoyer, de recevoir et de suivre des emails, con\u00e7ues pour les d\u00e9veloppeurs. En savoir plus d\u00e8s aujourd'hui !","publisher":{"@id":"https:\/\/www.mailgun.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mailgun.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.mailgun.com\/fr\/#organization","name":"Transactional Email API Service For Developers | Mailgun","url":"https:\/\/www.mailgun.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","contentUrl":"https:\/\/www.mailgun.com\/wp-content\/uploads\/2025\/06\/cropped-android-chrome-512x512-1.png","width":512,"height":512,"caption":"Transactional Email API Service For Developers | Mailgun"},"image":{"@id":"https:\/\/www.mailgun.com\/fr\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/20002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/users\/16"}],"version-history":[{"count":0,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog\/20002\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media\/3952"}],"wp:attachment":[{"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/media?parent=20002"}],"wp:term":[{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/www.mailgun.com\/fr\/wp-json\/wp\/v2\/blog_category?post=20002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}