{"id":5859,"date":"2025-02-18T22:45:37","date_gmt":"2025-02-18T21:45:37","guid":{"rendered":"https:\/\/www.dontesta.it\/?p=5859"},"modified":"2025-02-19T10:11:27","modified_gmt":"2025-02-19T09:11:27","slug":"github-actions-build-e-push-di-immagini-container-con-quarkus-cli","status":"publish","type":"post","link":"https:\/\/www.dontesta.it\/en\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/","title":{"rendered":"(Italiano) GitHub Actions: Build e Push di Immagini Container con Quarkus CLI"},"content":{"rendered":"<p class=\"qtranxs-available-languages-message qtranxs-available-languages-message-en\">Sorry, this entry is only available in <a href=\"https:\/\/www.dontesta.it\/it\/wp-json\/wp\/v2\/posts\/5859\" class=\"qtranxs-available-language-link qtranxs-available-language-link-it\" title=\"Italiano\">Italiano<\/a>.<\/p><p>Questo articolo nasce come compendio dell'articolo&nbsp;<strong><a href=\"https:\/\/bit.ly\/4gPhcm5\" target=\"_blank\" rel=\"noreferrer noopener\">Quarkus: guida avanzata per il deploy su OpenShift<\/a><\/strong>&nbsp;pubblicato su Codemotion Magazine. Qui approfondiamo l'automazione della build e distribuzione di immagini native con <strong>GitHub Actions<\/strong> e <strong>Quarkus CLI<\/strong>, fornendo una guida pratica all'implementazione di una pipeline CI\/CD efficace.<\/p>\n\n\n\n<p>L'automazione del processo di build e distribuzione di immagini native rappresenta un elemento chiave nell'ottimizzazione del ciclo di sviluppo e rilascio di applicazioni. Questo articolo analizza come&nbsp;GitHub Actions&nbsp;possa essere sfruttato per orchestrare la build e la pubblicazione di immagini native di applicazioni Quarkus, utilizzando&nbsp;Quarkus CLI.<\/p>\n\n\n\n<p>Il workflow descritto \u00e8 implementato nel progetto&nbsp;<a href=\"https:\/\/github.com\/amusarra\/quarkus-graphql-quickstart\">quarkus-graphql-quickstart<\/a>&nbsp;e si occupa di generare un'immagine nativa e distribuirla su un container registry. L'obiettivo principale \u00e8 garantire efficienza, riproducibilit\u00e0 e scalabilit\u00e0, minimizando l'intervento manuale nel processo di deployment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configurazione della GitHub Action<\/h2>\n\n\n\n<p>Il workflow \u00e8 definito nel file&nbsp;<code><a href=\"https:\/\/github.com\/amusarra\/quarkus-graphql-quickstart\/blob\/main\/.github\/workflows\/docker_publish_native_quarkus_cli.yml\">docker_publish_native_quarkus_cli.yml<\/a><\/code>. Di seguito, ne analizziamo le componenti principali, esplorando ogni aspetto in dettaglio.<\/p>\n\n\n\n<p>Nella nostra GitHub Action, utilizziamo&nbsp;Quarkus CLI&nbsp;al posto di&nbsp;Maven&nbsp;per diversi motivi. Quarkus CLI offre un approccio pi\u00f9 astratto rispetto a Maven, specialmente quando si lavora con diversi strumenti di build. Ecco alcuni motivi per preferire Quarkus CLI a Maven nelle pipeline:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Astrazione dello strumento di build:<\/strong> Quarkus CLI permette di interagire con progetti sia Maven che Gradle allo stesso modo. Questo significa che i comandi rimangono consistenti indipendentemente dal sistema di build sottostante.<\/li>\n\n\n\n<li><strong>Gestione semplificata delle estensioni:<\/strong> Quarkus CLI fornisce comandi intuitivi per trovare, aggiungere e rimuovere estensioni Quarkus, semplificando la gestione delle dipendenze del progetto.<\/li>\n\n\n\n<li><strong>Coerenza:<\/strong> L'uso di Quarkus CLI garantisce una maggiore coerenza tra i diversi progetti, specialmente in ambienti dove sia Maven che Gradle sono utilizzati.<\/li>\n<\/ul>\n\n\n\n<p>In sintesi, l'uso di Quarkus CLI pu\u00f2 semplificare e uniformare le operazioni di build, rendendo le pipeline pi\u00f9 manutenibili e meno dipendenti dallo strumento di build specifico del progetto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Eventi Trigger<\/h3>\n\n\n\n<p>Gli eventi trigger determinano quando la pipeline viene eseguita automaticamente. In questo caso, la pipeline si attiva nei seguenti scenari:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"on:\n  push:\n    branches:\n      - develop\n      - main\n  release:\n    types: [ published ]\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">on<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">push<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">branches<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">develop<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">main<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">release<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">types<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">published<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">]<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">YAML<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Push su&nbsp;<\/strong><code><strong>develop<\/strong><\/code><strong>&nbsp;e&nbsp;<\/strong><code><strong>main<\/strong><\/code>: ogni volta che viene effettuato un push su queste branch, il workflow viene avviato per garantire che le ultime modifiche siano costruite e pubblicate immediatamente. Questo aiuta a mantenere aggiornate le immagini e a testare il codice pi\u00f9 recente.<\/li>\n\n\n\n<li><strong>Pubblicazione di una release<\/strong>: quando viene pubblicata una nuova release, la pipeline si avvia automaticamente per costruire e distribuire un'immagine nativa basata sul codice stabile della release. Questo garantisce che le versioni ufficiali dell'applicazione siano immediatamente disponibili per l'uso in produzione.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Configurazione dei Job<\/h3>\n\n\n\n<p>La configurazione dei job definisce l'ambiente e la strategia di esecuzione della pipeline. In questo caso, il workflow utilizza una matrice di esecuzione per garantire compatibilit\u00e0 su diverse piattaforme e architetture.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"jobs:\n  docker:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ 'ubuntu-24.04', 'ubuntu-24.04-arm' ]\n        include:\n          - os: ubuntu-24.04\n            current_platform: 'amd64'\n          - os: ubuntu-24.04-arm\n            current_platform: 'arm64'\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8FBCBB\">jobs<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">docker<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">runs-on<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ matrix.os }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">strategy<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #8FBCBB\">matrix<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">os<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">ubuntu-24.04<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">ubuntu-24.04-arm<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #8FBCBB\">include<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">os<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ubuntu-24.04<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #8FBCBB\">current_platform<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">amd64<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">os<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ubuntu-24.04-arm<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #8FBCBB\">current_platform<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">arm64<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">YAML<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Ogni job viene eseguito su uno dei due ambienti definiti nella matrice:&nbsp;<strong>Ubuntu 24.04 per AMD64<\/strong>&nbsp;e&nbsp;<strong>Ubuntu 24.04 per ARM64<\/strong>. La strategia della matrice permette di eseguire il workflow su entrambe le architetture contemporaneamente, assicurando che il codice sia compatibile sia con sistemi x86_64 che ARM.<\/p>\n\n\n\n<p>&#x26a0;&nbsp;<strong>Nota:<\/strong>&nbsp;<em>L'esecuzione su Linux ARM64 \u00e8 attualmente in anteprima pubblica ed \u00e8 soggetta a modifiche. L'uso di questa architettura consente di testare e ottimizzare le prestazioni dell'applicazione su dispositivi ARM, sempre pi\u00f9 diffusi in ambito cloud e edge computing.<\/em> Per maggiori informazioni fare riferimento alla documentazione <a href=\"https:\/\/docs.github.com\/en\/actions\/using-github-hosted-runners\/using-github-hosted-runners\/about-github-hosted-runners\">About GitHub-hosted runners<\/a>.<\/p>\n\n\n\n<p>Questa strategia garantisce compatibilit\u00e0 con diverse architetture hardware, migliorando la portabilit\u00e0 dell'applicazione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Passaggi della Pipeline<\/h2>\n\n\n\n<p>La pipeline \u00e8 composta da una serie di step che permettono di automatizzare il processo di build e distribuzione dell\u2019applicazione. Ogni step viene eseguito sequenzialmente per garantire che il codice venga recuperato, compilato, testato e infine pubblicato come immagine container.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Clonazione del Repository<\/h3>\n\n\n\n<p>Il primo step assicura che il codice sorgente pi\u00f9 recente sia disponibile per la pipeline.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"- uses: actions\/checkout@v3\n  with:\n    fetch-depth: 0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">uses<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">actions\/checkout@v3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">with<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">fetch-depth<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">YAML<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Cosa fa il primo step?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Clona l\u2019intero repository, garantendo accesso alla cronologia completa dei commit.<\/li>\n\n\n\n<li>Il valore fetch-depth: 0 permette di recuperare tutti i commit, utile per calcoli di differenza tra versioni.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Configurazione di GraalVM<\/h3>\n\n\n\n<p>GraalVM \u00e8 essenziale per la creazione di immagini native altamente ottimizzate, riducendo il tempo di avvio e il consumo di memoria dell'applicazione. Per approfondimenti sulla configurazione della GitHub Action <code>graalvm\/setup-graalvm@v1<\/code>, consulta la <a href=\"https:\/\/github.com\/graalvm\/setup-graalvm\">documentazione ufficiale<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"- name: Set up GraalVM\n  uses: graalvm\/setup-graalvm@v1\n  with:\n    java-version: '23.0.2'\n    distribution: 'graalvm'\n    github-token: ${{ secrets.TOKEN_GITHUB }}\n    native-image-job-reports: 'true'\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Set up GraalVM<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">uses<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">graalvm\/setup-graalvm@v1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">with<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">java-version<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">23.0.2<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">distribution<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">graalvm<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">github-token<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ secrets.TOKEN_GITHUB }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">native-image-job-reports<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">true<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">YAML<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Cosa fa questo secondo step?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Installa e configura GraalVM per l\u2019ambiente di esecuzione.<\/li>\n\n\n\n<li>Imposta Java 23.0.2 e attiva la generazione di report per la build nativa.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. Installazione di JBang e Quarkus CLI<\/h3>\n\n\n\n<p>Quarkus CLI consente di gestire e costruire applicazioni Quarkus in modo efficiente, semplificando la gestione delle dipendenze e delle configurazioni.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"- name: Install JBang and Quarkus CLI\n  run: |\n    curl -Ls https:\/\/sh.jbang.dev | bash -s - trust add https:\/\/repo1.maven.org\/maven2\/io\/quarkus\/quarkus-cli\/\n    curl -Ls https:\/\/sh.jbang.dev | bash -s - app install --fresh --force quarkus@quarkusio\n    echo &quot;PATH=$PATH:\/home\/runner\/.jbang\/bin&quot; &gt;&gt; $GITHUB_ENV\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Install JBang and Quarkus CLI<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">run<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    curl -Ls https:\/\/sh.jbang.dev | bash -s - trust add https:\/\/repo1.maven.org\/maven2\/io\/quarkus\/quarkus-cli\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    curl -Ls https:\/\/sh.jbang.dev | bash -s - app install --fresh --force quarkus@quarkusio<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    echo &quot;PATH=$PATH:\/home\/runner\/.jbang\/bin&quot; &gt;&gt; $GITHUB_ENV<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">YAML<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>&nbsp;<strong>Cosa fa questo terzo step?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Installa JBang, un tool per la gestione di script Java.<\/li>\n\n\n\n<li>Installa e configura Quarkus CLI per eseguire build e gestire le dipendenze.<\/li>\n<\/ul>\n\n\n\n<p>Per ulteriori dettagli sull\u2019installazione della Quarkus CLI, consulta la <a href=\"https:\/\/quarkus.io\/guides\/cli-tooling\">documentazione ufficiale<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Autenticazione su Docker Hub<\/h3>\n\n\n\n<p>Prima di pubblicare l\u2019immagine container, \u00e8 necessario effettuare l\u2019accesso a Docker Hub.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"- name: Login to Docker Hub\n  uses: docker\/login-action@v3\n  with:\n    username: ${{ secrets.DOCKER_USERNAME }}\n    password: ${{ secrets.DOCKER_TOKEN }}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Login to Docker Hub<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">uses<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">docker\/login-action@v3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">with<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">username<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ secrets.DOCKER_USERNAME }}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">password<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">${{ secrets.DOCKER_TOKEN }}<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">YAML<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Cosa fa questo quarto step?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usa le credenziali salvate nei <strong>GitHub Secrets<\/strong> per effettuare il login a Docker Hub.<\/li>\n\n\n\n<li>Questo passaggio \u00e8 fondamentale per poter pubblicare l\u2019immagine nel repository remoto.<\/li>\n<\/ul>\n\n\n\n<p>Per approfondimenti sulla gestione dei secrets in GitHub Actions, consulta la <a href=\"https:\/\/docs.github.com\/en\/actions\/security-guides\/encrypted-secrets\">documentazione ufficiale<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Creazione dell\u2019artefatto nativo<\/h3>\n\n\n\n<p>Questo step compila l\u2019applicazione in un eseguibile nativo utilizzando Quarkus CLI.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"- name: Build Native Artifact\n  run: |\n    quarkus build --native\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Build Native Artifact<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">run<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    quarkus build --native<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">YAML<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Cosa fa questo quinto step?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Compila il codice sorgente generando un eseguibile nativo altamente performante.<\/li>\n\n\n\n<li>Il codice risultante \u00e8 ottimizzato per ridurre il consumo di memoria e migliorare il tempo di avvio.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6. Creazione e pubblicazione dell\u2019immagine Docker<\/h3>\n\n\n\n<p>Infine, il codice compilato viene trasformato in un\u2019immagine container e pubblicato su Docker Hub.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Build the native image and push the Docker image\n- name: Build Native Image and Push Docker Image\n  run: |\n    quarkus image build --native \\\n    -Dquarkus.native.additional-build-args=-march=native,-H:BuildOutputJSONFile=\/tmp\/native-image-build-output.json \\\n    -Dquarkus.native.container-build=false \\\n    -Dquarkus.container-image.push=true \\\n    -Dquarkus.container-image.registry=docker.io \\\n    -Dquarkus.container-image.username=${{ secrets.DOCKER_USERNAME }} \\\n    -Dquarkus.container-image.image=${{ secrets.DOCKER_USERNAME }}\/${{ github.event.repository.name }}-native:${{ github.ref_name }}-${{ matrix.current_platform }} \\\n    -Dquarkus.container-image.additional-tags=&quot;latest-${{ matrix.current_platform }}&quot; \\\n    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.title\\&quot;=&quot;${{ github.event.repository.name }}&quot; \\\n    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.description\\&quot;=&quot;A native image built with Quarkus CLI&quot; \\\n    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.url\\&quot;=&quot;https:\/\/github.com\/${{ github.repository }}&quot; \\\n    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.source\\&quot;=&quot;https:\/\/github.com\/${{ github.repository }}&quot; \\\n    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.version\\&quot;=&quot;${{ github.ref_name }}&quot; \\\n    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.created\\&quot;=&quot;${{ steps.prep.outputs.created }}&quot; \\\n    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.revision\\&quot;=&quot;${{ github.sha }}&quot; \\\n    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.authors\\&quot;=&quot;Antonio Musarra &lt;antonio.musarra@gmail.com&gt;&quot; \\\n    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.licenses\\&quot;=&quot;MIT&quot;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\"># Build the native image and push the Docker image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Build Native Image and Push Docker Image<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #8FBCBB\">run<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">|<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    quarkus image build --native \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.native.additional-build-args=-march=native,-H:BuildOutputJSONFile=\/tmp\/native-image-build-output.json \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.native.container-build=false \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.push=true \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.registry=docker.io \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.username=${{ secrets.DOCKER_USERNAME }} \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.image=${{ secrets.DOCKER_USERNAME }}\/${{ github.event.repository.name }}-native:${{ github.ref_name }}-${{ matrix.current_platform }} \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.additional-tags=&quot;latest-${{ matrix.current_platform }}&quot; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.title\\&quot;=&quot;${{ github.event.repository.name }}&quot; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.description\\&quot;=&quot;A native image built with Quarkus CLI&quot; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.url\\&quot;=&quot;https:\/\/github.com\/${{ github.repository }}&quot; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.source\\&quot;=&quot;https:\/\/github.com\/${{ github.repository }}&quot; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.version\\&quot;=&quot;${{ github.ref_name }}&quot; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.created\\&quot;=&quot;${{ steps.prep.outputs.created }}&quot; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.revision\\&quot;=&quot;${{ github.sha }}&quot; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.authors\\&quot;=&quot;Antonio Musarra &lt;antonio.musarra@gmail.com&gt;&quot; \\<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A3BE8C\">    -Dquarkus.container-image.labels.\\&quot;org.opencontainers.image.licenses\\&quot;=&quot;MIT&quot;<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-start;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative\">YAML<\/span><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Cosa fa questo sesto step?<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Crea un\u2019immagine container contenente l\u2019eseguibile nativo.<\/li>\n\n\n\n<li>Applica tag specifici per identificare le versioni dell\u2019immagine.<\/li>\n\n\n\n<li>Applica un set di label Open Containers (come description, url, source, etc.).<\/li>\n\n\n\n<li>Pubblica automaticamente l\u2019immagine su Docker Hub.<\/li>\n<\/ul>\n\n\n\n<p>Per ulteriori dettagli sulle specifiche Open Containers, consulta la <a href=\"https:\/\/opencontainers.org\/\">documentazione ufficiale<\/a> e in particolare la sezione <a href=\"https:\/\/github.com\/opencontainers\/image-spec\/blob\/main\/annotations.md\">Annotations<\/a> sul repository GitHub.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Esecuzione della GitHub Action<\/strong><\/h2>\n\n\n\n<p>La pipeline di GitHub Actions si avvia automaticamente in risposta a eventi specifici, garantendo un processo di build e deploy completamente automatizzato.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Quando si Attiva la Pipeline?<\/h3>\n\n\n\n<p>Il workflow viene eseguito nei seguenti scenari:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Push su develop e main<\/strong>: ogni modifica su queste branch avvia automaticamente il workflow per garantire che il codice aggiornato venga compilato e pubblicato.<\/li>\n\n\n\n<li><strong>Pubblicazione di una release<\/strong>: ogni volta che viene creata una nuova release, la pipeline si attiva per generare e distribuire un\u2019immagine nativa della versione stabile.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Monitoraggio dell\u2019Esecuzione<\/h3>\n\n\n\n<p>Una volta avviata, l\u2019esecuzione della pipeline pu\u00f2 essere monitorata direttamente dalla scheda <strong>Actions<\/strong> del repository GitHub. Qui \u00e8 possibile:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Osservare lo stato di avanzamento del workflow in tempo reale.<\/li>\n\n\n\n<li>Visualizzare i log dettagliati di ogni step per diagnosticare eventuali problemi.<\/li>\n\n\n\n<li>Identificare rapidamente errori grazie all\u2019evidenziazione dei messaggi di errore e warning.<\/li>\n<\/ul>\n\n\n\n<p>Le immagini a seguire evidenziano il processo automatizzato di build e deployment dell\u2019immagine nativa del progetto su Docker Hub, mostrando, sia il <strong>workflow GitHub Actions completato con successo<\/strong>, sia il <strong>report dettagliato<\/strong> della compilazione GraalVM (grazie al parametro <code>native-image-job-reports:true<\/code>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img width=\"1024\" height=\"301\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_1-1024x301.jpg\" alt=\"Figura 1 - Workflow GitHub Actions completato con successo\" class=\"wp-image-5873\" style=\"width:864px;height:auto\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_1-1024x301.jpg 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_1-300x88.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_1-768x226.jpg 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_1-1536x452.jpg 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_1-2048x603.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figura 1 - Workflow GitHub Actions completato con successo<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"1302\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_2-1024x1302.jpg\" alt=\"Figura 2 - Report dettagliato della compilazione GraalVM\" class=\"wp-image-5874\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_2-1024x1302.jpg 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_2-300x381.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_2-768x977.jpg 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_2-1208x1536.jpg 1208w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_2.jpg 1414w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figura 2 - Report dettagliato della compilazione GraalVM<\/figcaption><\/figure>\n\n\n\n<p>Puoi vedere i log completi di questo specifico workflow e job <a href=\"https:\/\/github.com\/amusarra\/quarkus-graphql-quickstart\/actions\/runs\/13394381955\/job\/37409584528#logs\" class=\"broken_link\">docker (ubuntu-24.04)<\/a> di cui a seguire \u00e8 mostrato l'esempio di ci\u00f2 che vedresti.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"608\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_3-1024x608.jpg\" alt=\"Figura 3 - Log del workflow job docker (ubuntu-24-04)\" class=\"wp-image-5877\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_3-1024x608.jpg 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_3-300x178.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_3-768x456.jpg 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_3-1536x912.jpg 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/report_github_action_3-2048x1216.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figura 3 - Log del workflow job docker (ubuntu-24-04)<\/figcaption><\/figure>\n\n\n\n<p>Nel caso in cui avessi installato il <a href=\"https:\/\/github.com\/cli\/cli\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub CLI (gh)<\/a>, potresti usare per esempio, il comando <code>gh run list -b main --workflow build_via_quarkus_cli.yml<\/code>, per elencare le esecuzioni del workflow GitHub Actions build_via_quarkus_cli.yml sul branch main.&nbsp;<\/p>\n\n\n\n<p>Questo comando \u00e8 utile per monitorare rapidamente lo stato delle build eseguite tramite Quarkus CLI senza dover accedere manualmente all\u2019interfaccia web di GitHub Actions. A seguire un esempio di output.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"328\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/lista_esecuzioni_github_workflow_1-1024x328.jpg\" alt=\"Figura 4 - Output del comando gh run list -b main --workflow build_via_quarkus_cli.yml\" class=\"wp-image-5880\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/lista_esecuzioni_github_workflow_1-1024x328.jpg 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/lista_esecuzioni_github_workflow_1-300x96.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/lista_esecuzioni_github_workflow_1-768x246.jpg 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/lista_esecuzioni_github_workflow_1-1536x492.jpg 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/lista_esecuzioni_github_workflow_1-2048x655.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figura 4 - Output del comando gh run list -b main --workflow build_via_quarkus_cli.yml<\/figcaption><\/figure>\n\n\n\n<p>Al termine del workflow, l\u2019immagine container sar\u00e0 quindi disponibile nel container registry configurato nel file di workflow, pronta per essere utilizzata in ambienti di sviluppo o produzione. A seguire sono mostrate le due immagini native, una per ARM64 e una per AMD64, contrassegnate dai rispettivi tag.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img width=\"1024\" height=\"484\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/view_docker_hub_reg-1024x484.jpg\" alt=\"Figura 5 - Immagini container native pubblicate su Docker Hub tramite la GitHub Action\" class=\"wp-image-5881\" srcset=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/view_docker_hub_reg-1024x484.jpg 1024w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/view_docker_hub_reg-300x142.jpg 300w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/view_docker_hub_reg-768x363.jpg 768w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/view_docker_hub_reg-1536x726.jpg 1536w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/view_docker_hub_reg-2048x968.jpg 2048w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/view_docker_hub_reg-520x245.jpg 520w, https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/view_docker_hub_reg-720x340.jpg 720w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figura 5 - Immagini container native pubblicate su Docker Hub tramite la GitHub Action<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusioni<\/h2>\n\n\n\n<p>Questa pipeline GitHub Actions automatizza l\u2019intero ciclo di sviluppo, dalla compilazione al rilascio dell\u2019immagine container. L\u2019uso combinato di <strong>Quarkus CLI, GraalVM e Docker<\/strong> garantisce build efficienti, rapide e compatibili con diverse architetture.<\/p>\n\n\n\n<p>Per approfondire:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/quarkus.io\/guides\/\">Documentazione ufficiale di Quarkus<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.github.com\/en\/actions\">GitHub Actions<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/amusarra\/quarkus-graphql-quickstart\">Repository del progetto<\/a><\/li>\n\n\n\n<li>Metodo classico via <a href=\"https:\/\/github.com\/docker\/buildx\" target=\"_blank\" rel=\"noreferrer noopener\">Buildx<\/a>: <a href=\"https:\/\/www.youtube.com\/watch?v=AGldK5g30Xg\" target=\"_blank\" rel=\"noreferrer noopener\">Pubblica su Docker Hub con le GitHub Actions<\/a> - Canale YouTube <a href=\"https:\/\/www.youtube.com\/@EmmeCiLab\">EmmeCiLab - Informatica e Matematica<\/a><\/li>\n\n\n\n<li>Progetto <a href=\"Graalkus: Let Quarkus fly high with GraalVM. \">Graalkus: Let Quarkus fly high with GraalVM<\/a>: <a href=\"https:\/\/github.com\/fugerit-org\/graalkus\/blob\/d1c045ac5cd462c70a97b11c8d184444694f7938\/.github\/workflows\/docker_publish_native.yml#L60\">come creare l'immagine nativa per pi\u00f9 piattaforme<\/a> usando Buildx<\/li>\n<\/ul>\n\n\n\n<p>Se hai domande o suggerimenti, lascia un commento qui sotto!<\/p>\n\n\n\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Sorry, this entry is only available in Italiano. Questo articolo nasce come compendio dell&#8217;articolo&nbsp;Quarkus: guida avanzata per il deploy su OpenShift&nbsp;pubblicato su Codemotion Magazine. Qui approfondiamo l&#8217;automazione della build e distribuzione di immagini native&#46;&#46;&#46;<\/p>\n","protected":false},"author":3,"featured_media":5885,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"image","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[490,693],"tags":[],"class_list":["post-5859","post","type-post","status-publish","format-image","has-post-thumbnail","hentry","category-blog-2","category-containers","post_format-post-format-image"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>(Italiano) GitHub Actions: Build e Push di Immagini Container con Quarkus CLI<\/title>\n<meta name=\"description\" content=\"Automatizza build e push di immagini container con Quarkus CLI e GitHub Actions per un deploy rapido ed efficiente.\" \/>\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.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"(Italiano) GitHub Actions: Build e Push di Immagini Container con Quarkus CLI\" \/>\n<meta property=\"og:description\" content=\"Automatizza build e push di immagini container con Quarkus CLI e GitHub Actions per un deploy rapido ed efficiente.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/\" \/>\n<meta property=\"og:site_name\" content=\"Antonio Musarra&#039;s Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/antoniomusarrablog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/antoniomusarrablog\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-18T21:45:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-19T09:11:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Antonio Musarra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@antonio_musarra\" \/>\n<meta name=\"twitter:site\" content=\"@antonio_musarra\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Antonio Musarra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/\"},\"author\":{\"name\":\"Antonio Musarra\",\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"headline\":\"(Italiano) GitHub Actions: Build e Push di Immagini Container con Quarkus CLI\",\"datePublished\":\"2025-02-18T21:45:37+00:00\",\"dateModified\":\"2025-02-19T09:11:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/\"},\"wordCount\":1478,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"image\":{\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png\",\"articleSection\":[\"Blog\",\"Containers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/\",\"url\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/\",\"name\":\"(Italiano) GitHub Actions: Build e Push di Immagini Container con Quarkus CLI\",\"isPartOf\":{\"@id\":\"https:\/\/www.dontesta.it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png\",\"datePublished\":\"2025-02-18T21:45:37+00:00\",\"dateModified\":\"2025-02-19T09:11:27+00:00\",\"description\":\"Automatizza build e push di immagini container con Quarkus CLI e GitHub Actions per un deploy rapido ed efficiente.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#primaryimage\",\"url\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png\",\"contentUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png\",\"width\":1024,\"height\":512,\"caption\":\"GitHub Actions: Build e Push di Immagini Container con Quarkus CLI\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.dontesta.it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GitHub Actions: Build e Push di Immagini Container con Quarkus CLI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dontesta.it\/#website\",\"url\":\"https:\/\/www.dontesta.it\/\",\"name\":\"Antonio Musarra&#039;s Blog\",\"description\":\"The ideal solution for a problem\",\"publisher\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dontesta.it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24\",\"name\":\"Antonio Musarra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png\",\"contentUrl\":\"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png\",\"width\":512,\"height\":512,\"caption\":\"Antonio Musarra\"},\"logo\":{\"@id\":\"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/\"},\"description\":\"I began my journey into the world of computing from an Olivetti M24 PC (http:\/\/it.wikipedia.org\/wiki\/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until \u2026 Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.\",\"sameAs\":[\"https:\/\/www.dontesta.it\",\"https:\/\/www.facebook.com\/antoniomusarrablog\",\"https:\/\/www.linkedin.com\/in\/amusarra\/\",\"https:\/\/x.com\/antonio_musarra\",\"https:\/\/www.youtube.com\/channel\/UC5D3_EtVPbZYUhrUcEK_THA\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"(Italiano) GitHub Actions: Build e Push di Immagini Container con Quarkus CLI","description":"Automatizza build e push di immagini container con Quarkus CLI e GitHub Actions per un deploy rapido ed efficiente.","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.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/","og_locale":"en_US","og_type":"article","og_title":"(Italiano) GitHub Actions: Build e Push di Immagini Container con Quarkus CLI","og_description":"Automatizza build e push di immagini container con Quarkus CLI e GitHub Actions per un deploy rapido ed efficiente.","og_url":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/","og_site_name":"Antonio Musarra&#039;s Blog","article_publisher":"https:\/\/www.facebook.com\/antoniomusarrablog","article_author":"https:\/\/www.facebook.com\/antoniomusarrablog","article_published_time":"2025-02-18T21:45:37+00:00","article_modified_time":"2025-02-19T09:11:27+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png","type":"image\/png"}],"author":"Antonio Musarra","twitter_card":"summary_large_image","twitter_creator":"@antonio_musarra","twitter_site":"@antonio_musarra","twitter_misc":{"Written by":"Antonio Musarra","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#article","isPartOf":{"@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/"},"author":{"name":"Antonio Musarra","@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"headline":"(Italiano) GitHub Actions: Build e Push di Immagini Container con Quarkus CLI","datePublished":"2025-02-18T21:45:37+00:00","dateModified":"2025-02-19T09:11:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/"},"wordCount":1478,"commentCount":0,"publisher":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"image":{"@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png","articleSection":["Blog","Containers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/","url":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/","name":"(Italiano) GitHub Actions: Build e Push di Immagini Container con Quarkus CLI","isPartOf":{"@id":"https:\/\/www.dontesta.it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#primaryimage"},"image":{"@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png","datePublished":"2025-02-18T21:45:37+00:00","dateModified":"2025-02-19T09:11:27+00:00","description":"Automatizza build e push di immagini container con Quarkus CLI e GitHub Actions per un deploy rapido ed efficiente.","breadcrumb":{"@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#primaryimage","url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png","contentUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2025\/02\/feature_image_GitHub_Actions_Build_-Push_Immagini_Container_Quarkus_CLI.png","width":1024,"height":512,"caption":"GitHub Actions: Build e Push di Immagini Container con Quarkus CLI"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dontesta.it\/2025\/02\/18\/github-actions-build-e-push-di-immagini-container-con-quarkus-cli\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dontesta.it\/"},{"@type":"ListItem","position":2,"name":"GitHub Actions: Build e Push di Immagini Container con Quarkus CLI"}]},{"@type":"WebSite","@id":"https:\/\/www.dontesta.it\/#website","url":"https:\/\/www.dontesta.it\/","name":"Antonio Musarra&#039;s Blog","description":"The ideal solution for a problem","publisher":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dontesta.it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/0c69ed36230e1477875d6171b48b9b24","name":"Antonio Musarra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/","url":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png","contentUrl":"https:\/\/www.dontesta.it\/wp-content\/uploads\/2024\/06\/cropped-foto_profilo.png","width":512,"height":512,"caption":"Antonio Musarra"},"logo":{"@id":"https:\/\/www.dontesta.it\/#\/schema\/person\/image\/"},"description":"I began my journey into the world of computing from an Olivetti M24 PC (http:\/\/it.wikipedia.org\/wiki\/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until \u2026 Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.","sameAs":["https:\/\/www.dontesta.it","https:\/\/www.facebook.com\/antoniomusarrablog","https:\/\/www.linkedin.com\/in\/amusarra\/","https:\/\/x.com\/antonio_musarra","https:\/\/www.youtube.com\/channel\/UC5D3_EtVPbZYUhrUcEK_THA\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts\/5859","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/comments?post=5859"}],"version-history":[{"count":28,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts\/5859\/revisions"}],"predecessor-version":[{"id":5901,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/posts\/5859\/revisions\/5901"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/media\/5885"}],"wp:attachment":[{"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/media?parent=5859"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/categories?post=5859"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dontesta.it\/en\/wp-json\/wp\/v2\/tags?post=5859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}