如何能在git bash中使用mvn命令_使用Github Actions完成CI/CD工作
在本文中,我們將介紹如何使用 Github Actions 自動化開發(fā)部署工作流,使版本控制和 CI/CD 平臺在同一個地方完成。
自2019年開始,github便提供了CI/CD工具,對于public類型的代碼庫是免費的,對于private類型的代碼庫每個月2000分鐘免費。
我們可以使用GitHub Actions直接在我們的倉庫中管理和自動化我們的開發(fā)工作流。其API支持多種操作系統(tǒng)(Linux、Windows、MacOS......)和不同語言。
在本文中,我將介紹一個使用Github Actions為Spring boot 2.x (java 8)web服務(wù)建立CI/CD管道的例子。
1
簡介
這個想法是通過使用Github Actions構(gòu)建一個CI/CD管道來自動化開發(fā)工作流。目的是在遠(yuǎn)程服務(wù)器上部署一個Spring Boot網(wǎng)絡(luò)服務(wù)。我們將使用一系列的工作來構(gòu)建、測試、生成代碼覆蓋率報告,并直接從GitHub部署我們的代碼。生成的包將部署在遠(yuǎn)程服務(wù)器上。
有兩種方法可以創(chuàng)建一個所需的工作流文件:
我們可以在我們的Github倉庫中創(chuàng)建一個工作流。YAML文件必須存儲在我們Github倉庫根目錄下的.github/workflows目錄下。工作流必須有至少一個job,其中包含一組執(zhí)行個別任務(wù)的步驟。步驟可以運行命令或使用一個動作。我們的工作流文件應(yīng)該尊重YAML語法,并且必須有一個.yml或.yaml文件擴(kuò)展名。
第二種,通過在GitHub倉庫的Actions部分創(chuàng)建一個工作流文件,我們選擇maven工作流。
當(dāng)我們點擊設(shè)置這個工作流時,就會看到下面預(yù)填的maven工作流。
這些作業(yè)是基于矩陣構(gòu)建的。一個矩陣構(gòu)建在每個工作流中最多可以生成256個作業(yè)。
我們將工作流配置為當(dāng)GitHub事件發(fā)生時啟動。在主分支上推送代碼或提出拉取請求后,作業(yè)將被觸發(fā)。本例中的主要作業(yè)是啟動mvn包命令。由于在YAML文件中指定了,我們必須將修改提交到主分支上。
2
?測試工作流?
接下來,讓我們測試一下上面的工作流。
啟動工作流流程后,執(zhí)行的配置會定義一些應(yīng)該在Ubuntu容器內(nèi)執(zhí)行的操作。工作會對我在主分支上的git倉庫進(jìn)行檢查,并設(shè)置JDK 1.8。然后,它啟動mvn構(gòu)建命令,并將所需的Maven包放入我的pom.xml中。最后,它運行測試并生成JAR文件。
3
? 增強工作流
我們在文件中增加幾個job:
compile job
test job
build job
下面是完整的文件:
YAML
name: Java CI with Mavenon: push: ? branches: [ master ] pull_request: ? branches: [ master ]jobs: compile: ? runs-on: ubuntu-latest ? name: Running Java ${{ matrix.java }} compile ? steps: ? - uses: actions/checkout@v2 ? - name: Set up JDK 1.8 ? ? uses: actions/setup-java@v1 ? ? with: ? ? ? java-version: 1.8 ? - name: Compile code ? ? run: mvn compile test: ? runs-on: ubuntu-latest ? name: Running tests ? needs: compile ? steps: ? ? - uses: actions/checkout@v2 ? ? - name: Set up JDK 1.8 ? ? ? uses: actions/setup-java@v1 ? ? ? with: ? ? ? ? java-version: 1.8 ? ? - name: Run unit tests ? ? ? run: mvn test build: ? runs-on: ubuntu-latest ? name: Run mvn build and generate coverage report ? needs: test ? steps: ? ? - uses: actions/checkout@v2 ? ? - name: Set up JDK 1.8 ? ? ? uses: actions/setup-java@v1 ? ? ? with: ? ? ? ? java-version: 1.8 ? ? - name: Build with Maven ? ? ? run: mvn -B package --file pom.xml -Dmaven.test.skip=true ? ? - name: generate report codecov ? ? ? run: mvn cobertura:cobertura ? ? - name: Upload coverage ? ? ? if: success() ? ? ? run: | ? ? ? ? curl -s https://codecov.io/bash | bash ? ? ? env: ? ? ? ? CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} ? ? ? shell: bash我們使用加密的秘密來存儲敏感信息。一個字段CODECOV_TOKEN,是一個從codecov.io中檢索的令牌。它在Github環(huán)境中作為一個秘密被持久化。
一旦執(zhí)行了動作,我們就可以在 "動作 "選項卡中看到結(jié)果。
在最后一步,我們需要添加一個作業(yè)來在遠(yuǎn)程服務(wù)器上部署jar文件。這個工作和前面的工作差不多。我們必須將可執(zhí)行文件復(fù)制到遠(yuǎn)程服務(wù)器上,這個操作基于SFTP協(xié)議。
為了讓這個工作順利進(jìn)行,我們將使用GitHub社區(qū)共享的action,我們將根據(jù)需要定制它們,garygrossgarten/github-action-scp@release和fifsky/ssh-action@master。然后,我們要在版本庫的Github secrets部分添加秘密(ssh連接的環(huán)境變量)。
這些變量將在用 Github Actions 啟動的容器中可用。
我們再把部署的job加上,代碼如下:YAML
deploy: runs-on: ubuntu-latest name: Deploy the JAR file to the remote server needs: build steps: ? - uses: actions/checkout@v2 ? - name: Set up JDK 1.8 ? ? uses: actions/setup-java@v1 ? ? with: ? ? ? java-version: 1.8 ? - name: Generate the package ? ? run: mvn -B package --file pom.xml -Dmaven.test.skip=true ? - name: Deploy the package to the remote server ? ? uses: garygrossgarten/github-action-scp@release ? ? with: ? ? ? local: target/workflow-github-actions-1.0-SNAPSHOT.jar ? ? ? remote: hacene/demo/actions/workflow-github-actions.jar # My remote directory ? ? ? host: ${{ secrets.HOST }} ? ? ? username: ${{ secrets.SSH_USER }} ? ? ? password: ${{ secrets.SSH_PASSWORD }} ? - name: Run a script on remote server (start the application) ? ? if: always() ? ? uses: fifsky/ssh-action@master ? ? with: ? ? ? command: | ? ? ? ? cd hacene/demo/actions/ && java -jar workflow-github-actions.jar & ? ? ? host: ${{ secrets.HOST }} ? ? ? user: ${{ secrets.SSH_USER }} ? ? ? pass: ${{ secrets.SSH_PASSWORD }} ? ? ? args: "-tt" ? ? ? ?# The & in the command runs the process on background一旦有代碼提交,你便可以在 Actions下看到如下界面:整個部署工作運行完成后,可以看到如下界面:4
?總結(jié)?
希望你喜歡這篇文章,并學(xué)會如何使用Github動作來自動化你的CI/CD工作流。
就我個人而言,我曾經(jīng)用Jenkins在一個CI平臺上工作,需要很多先決條件來設(shè)置工作流程。所以,我非常驚訝于使用Github Actions的CI/CD管道的工作效果,完美無瑕,快速。我們可以利用這種靈活性來創(chuàng)建和維護(hù)定制化的開發(fā)工作流,從而實現(xiàn)軟件開發(fā)生命周期流程的自動化。
總結(jié)
以上是生活随笔為你收集整理的如何能在git bash中使用mvn命令_使用Github Actions完成CI/CD工作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内网和外网的区别_无需服务器,树莓派使用
- 下一篇: 不同系统下的shell的不同_不同论文检