1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Github Action 快速上手指南

        共 2685字,需瀏覽 6分鐘

         ·

        2021-02-20 14:55

        前言

        各位讀者,新年快樂,我是過了年匆忙趕回上海努力搬磚的蠻三刀。

        Github之前更新了一個(gè)Action功能(應(yīng)該是很久以前了),可以實(shí)現(xiàn)很多自動(dòng)化操作。用來替代用戶自己設(shè)置的自動(dòng)化腳本(比如:鉤子+Jenkins)。

        由于平時(shí)根本不會(huì)有需求用到它,畢竟平時(shí)都在用公司的CI/CD流程,所以一直沒有機(jī)會(huì)玩Action。

        借著春節(jié)放假,就自己寫個(gè)小Demo體驗(yàn)一下。

        本文通過實(shí)現(xiàn)一個(gè)提交代碼后自動(dòng)執(zhí)行Junit單元測試并輸出測試報(bào)告的自動(dòng)化流程小Demo,來快速上手Github Action。

        Github Action 是什么?

        如果你對Github Action完全沒有概念,我推薦先去看一下CI/CD(持續(xù)集成/持續(xù)交付)的概念:

        https://www.redhat.com/zh/topics/devops/what-is-ci-cd

        Github Action官方文檔中對自身的定義:

        在 GitHub Actions 的倉庫中自動(dòng)化、自定義和執(zhí)行軟件開發(fā)工作流程。您可以發(fā)現(xiàn)、創(chuàng)建和共享操作以執(zhí)行您喜歡的任何作業(yè)(包括 CI/CD),并將操作合并到完全自定義的工作流程中。

        用人話說,就是你可以給你的代碼倉庫部署一系列自動(dòng)化腳本,在你進(jìn)行了提交/合并分支等操作后,自動(dòng)執(zhí)行腳本。

        阮一峰Github Action指南中的介紹:

        大家知道,持續(xù)集成由很多操作組成,比如抓取代碼、運(yùn)行測試、登錄遠(yuǎn)程服務(wù)器,發(fā)布到第三方服務(wù)等等。GitHub 把這些操作就稱為 actions。

        很多操作在不同項(xiàng)目里面是類似的,完全可以共享。GitHub 注意到了這一點(diǎn),想出了一個(gè)很妙的點(diǎn)子,允許開發(fā)者把每個(gè)操作寫成獨(dú)立的腳本文件,存放到代碼倉庫,使得其他開發(fā)者可以引用。

        如果你需要某個(gè) action,不必自己寫復(fù)雜的腳本,直接引用他人寫好的 action 即可,整個(gè)持續(xù)集成過程,就變成了一個(gè) actions 的組合。這就是 GitHub Actions 最特別的地方。

        GitHub Actions 有一些自己的術(shù)語:

        • workflow (工作流程):持續(xù)集成一次運(yùn)行的過程,就是一個(gè) workflow。
        • job (任務(wù)):一個(gè) workflow 由一個(gè)或多個(gè) jobs 構(gòu)成,含義是一次持續(xù)集成的運(yùn)行,可以完成多個(gè)任務(wù)。
        • step(步驟):每個(gè) job 由多個(gè) step 構(gòu)成,一步步完成。
        • action (動(dòng)作):每個(gè) step 可以依次執(zhí)行一個(gè)或多個(gè)命令(action)。

        看這些介紹和定義,其實(shí)比較枯燥,我們直接來看代碼實(shí)現(xiàn),在代碼中來理解這些定義和指令。

        快速上手

        給倉庫創(chuàng)建新文件夾.github/workflow

        首先,用你自己的任意GitHub倉庫,在倉庫內(nèi)添加文件夾.github/workflow 或者.github/workflows

        一個(gè)庫可以有多個(gè) workflow 文件。GitHub 只要發(fā)現(xiàn).github/workflows目錄里面有.yml文件,就會(huì)自動(dòng)運(yùn)行該文件。

        撰寫你的workflow

        一個(gè)yml腳本便是Action的核心了,我們新建一個(gè)blank.yml,內(nèi)容如下:

        我在代碼里做了一些注釋,幫助大家理解每個(gè)指令的含義。

        整個(gè)腳本大致的流程如下:

        • 指定在push或者pull request時(shí)觸發(fā)腳本執(zhí)行
        • 拉取ubuntu最新版的鏡像
        • 緩存Maven依賴目錄,避免每次都下載全量依賴包,加快執(zhí)行速度
        • 安裝Java8
        • 指定pom.xml文件路徑,隨后用Maven編譯項(xiàng)目
        • 運(yùn)行Junit單元測試

        給項(xiàng)目撰寫單元測試代碼

        ok,寫完腳本,我們需要來編寫一些測試代碼,讓Junit有事可做。

        我使用了自己的一個(gè)倉庫,上面有完整的action腳本和測試類代碼,供參考:

        https://github.com/qqxx6661/awesome-utils

        這是一個(gè)Maven倉庫,我們在test文件夾內(nèi)加入測試代碼。

        上面的測試代碼測試的是下面的一個(gè)靜態(tài)方法:

        提交代碼,觸發(fā)Github Action執(zhí)行

        將代碼commit并push后,點(diǎn)開你的倉庫主頁,點(diǎn)擊Action標(biāo)簽:

        可以看到已經(jīng)有了執(zhí)行信息。

        接著看下我們的Action到底有沒有執(zhí)行,點(diǎn)開Action標(biāo)簽,已經(jīng)發(fā)現(xiàn)了Junit:

        可以進(jìn)行腳本代碼的在線編輯:

        點(diǎn)進(jìn)本次commit執(zhí)行的記錄,可以看到,action順利完成了幾個(gè)步驟:

        點(diǎn)開Maven的構(gòu)建日志,可以看到我們第一次跑action,所有的依賴還是即時(shí)下載的:

        單元測試運(yùn)行的日志輸出正常:

        為了試驗(yàn)Maven的依賴包是否能夠使用到緩存,我們再寫幾個(gè)單元測試,然后commit:

        可以看到,新的action日志里直接開始了編譯,不再需要下載全量的包:

        單元測試頁成功執(zhí)行:

        至此,我們的簡易入門教程便結(jié)束了。

        還有很多功能等待探索

        當(dāng)然,這還只是Action的冰山一角,其能做的事情遠(yuǎn)不止于此:

        • 編譯打包代碼
        • 自動(dòng)上傳至公有云/App容器
        • 單元測試/代碼覆蓋率測試/文檔同步/發(fā)布版本

        等著你們的探索。

        參考

        https://docs.github.com/cn/actions/guides/building-and-testing-python#publishing-to-package-registries

        http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html

        關(guān)注我

        我是一名奮斗在一線的互聯(lián)網(wǎng)后端開發(fā)工程師。

        平時(shí)主要關(guān)注后端開發(fā),數(shù)據(jù)安全,邊緣計(jì)算等方向,歡迎交流。

        各大平臺(tái)都能找到我

        • 微信公眾號(hào):后端技術(shù)漫談
        • Github:@qqxx6661
        • CSDN:@蠻三刀把刀
        • 知乎:@后端技術(shù)漫談
        • 掘金:@蠻三刀把刀
        • 騰訊云+社區(qū):@后端技術(shù)漫談
        • 博客園:@后端技術(shù)漫談
        • BiliBili:@蠻三刀把刀

        原創(chuàng)文章主要內(nèi)容

        • 后端開發(fā)實(shí)戰(zhàn)
        • 后端技術(shù)面試
        • 算法題解/數(shù)據(jù)結(jié)構(gòu)/設(shè)計(jì)模式
        • 生活感悟

        個(gè)人公眾號(hào):后端技術(shù)漫談

        往期精彩文章:


        闊別2020 ?| ?我的年度總結(jié)


        我給Apache頂級(jí)項(xiàng)目提了個(gè)Bug


        工作六年后,我對軟件開發(fā)的認(rèn)知轉(zhuǎn)變


        一枚程序猿的MacBook M1使用體驗(yàn)


        廢棄fastjson!大型項(xiàng)目遷移Gson保姆級(jí)實(shí)戰(zhàn)



        如果文章對你有幫助,求各位大佬點(diǎn)贊支持一下,你的點(diǎn)贊和在看是我更新的動(dòng)力~

        瀏覽 67
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚州性 | 免费的av | 欧美一区二区三区免费A片老妇人 | 91在线无码精品秘 入口动漫板 | 操鼻视频素材大全免费观看 | a黄网站| 91一区二区三区在线观看 | 成人视频在线观看18 | 夜夜夜夜曰天天天天拍国产 | 成人做爰A片免费播放金桔视频 |