如何能在git bash中使用mvn命令_使用Github Actions完成CI/CD工作
在本文中,我們將介紹如何使用 Github Actions 自動(dòng)化開發(fā)部署工作流,使版本控制和 CI/CD 平臺(tái)在同一個(gè)地方完成。
自2019年開始,github便提供了CI/CD工具,對(duì)于public類型的代碼庫是免費(fèi)的,對(duì)于private類型的代碼庫每個(gè)月2000分鐘免費(fèi)。
我們可以使用GitHub Actions直接在我們的倉庫中管理和自動(dòng)化我們的開發(fā)工作流。其API支持多種操作系統(tǒng)(Linux、Windows、MacOS......)和不同語言。
在本文中,我將介紹一個(gè)使用Github Actions為Spring boot 2.x (java 8)web服務(wù)建立CI/CD管道的例子。
1
簡介
這個(gè)想法是通過使用Github Actions構(gòu)建一個(gè)CI/CD管道來自動(dòng)化開發(fā)工作流。目的是在遠(yuǎn)程服務(wù)器上部署一個(gè)Spring Boot網(wǎng)絡(luò)服務(wù)。我們將使用一系列的工作來構(gòu)建、測試、生成代碼覆蓋率報(bào)告,并直接從GitHub部署我們的代碼。生成的包將部署在遠(yuǎn)程服務(wù)器上。
有兩種方法可以創(chuàng)建一個(gè)所需的工作流文件:
我們可以在我們的Github倉庫中創(chuàng)建一個(gè)工作流。YAML文件必須存儲(chǔ)在我們Github倉庫根目錄下的.github/workflows目錄下。工作流必須有至少一個(gè)job,其中包含一組執(zhí)行個(gè)別任務(wù)的步驟。步驟可以運(yùn)行命令或使用一個(gè)動(dòng)作。我們的工作流文件應(yīng)該尊重YAML語法,并且必須有一個(gè).yml或.yaml文件擴(kuò)展名。
第二種,通過在GitHub倉庫的Actions部分創(chuàng)建一個(gè)工作流文件,我們選擇maven工作流。
當(dāng)我們點(diǎn)擊設(shè)置這個(gè)工作流時(shí),就會(huì)看到下面預(yù)填的maven工作流。
這些作業(yè)是基于矩陣構(gòu)建的。一個(gè)矩陣構(gòu)建在每個(gè)工作流中最多可以生成256個(gè)作業(yè)。
我們將工作流配置為當(dāng)GitHub事件發(fā)生時(shí)啟動(dòng)。在主分支上推送代碼或提出拉取請(qǐng)求后,作業(yè)將被觸發(fā)。本例中的主要作業(yè)是啟動(dòng)mvn包命令。由于在YAML文件中指定了,我們必須將修改提交到主分支上。
2
?測試工作流?
接下來,讓我們測試一下上面的工作流。
啟動(dòng)工作流流程后,執(zhí)行的配置會(huì)定義一些應(yīng)該在Ubuntu容器內(nèi)執(zhí)行的操作。工作會(huì)對(duì)我在主分支上的git倉庫進(jìn)行檢查,并設(shè)置JDK 1.8。然后,它啟動(dòng)mvn構(gòu)建命令,并將所需的Maven包放入我的pom.xml中。最后,它運(yùn)行測試并生成JAR文件。
3
? 增強(qiáng)工作流
我們?cè)谖募性黾訋讉€(gè)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我們使用加密的秘密來存儲(chǔ)敏感信息。一個(gè)字段CODECOV_TOKEN,是一個(gè)從codecov.io中檢索的令牌。它在Github環(huán)境中作為一個(gè)秘密被持久化。
一旦執(zhí)行了動(dòng)作,我們就可以在 "動(dòng)作 "選項(xiàng)卡中看到結(jié)果。
在最后一步,我們需要添加一個(gè)作業(yè)來在遠(yuǎn)程服務(wù)器上部署jar文件。這個(gè)工作和前面的工作差不多。我們必須將可執(zhí)行文件復(fù)制到遠(yuǎn)程服務(wù)器上,這個(gè)操作基于SFTP協(xié)議。
為了讓這個(gè)工作順利進(jìn)行,我們將使用GitHub社區(qū)共享的action,我們將根據(jù)需要定制它們,garygrossgarten/github-action-scp@release和fifsky/ssh-action@master。然后,我們要在版本庫的Github secrets部分添加秘密(ssh連接的環(huán)境變量)。
這些變量將在用 Github Actions 啟動(dòng)的容器中可用。
我們?cè)侔巡渴鸬膉ob加上,代碼如下: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下看到如下界面:整個(gè)部署工作運(yùn)行完成后,可以看到如下界面:4
?總結(jié)?
希望你喜歡這篇文章,并學(xué)會(huì)如何使用Github動(dòng)作來自動(dòng)化你的CI/CD工作流。
就我個(gè)人而言,我曾經(jīng)用Jenkins在一個(gè)CI平臺(tái)上工作,需要很多先決條件來設(shè)置工作流程。所以,我非常驚訝于使用Github Actions的CI/CD管道的工作效果,完美無瑕,快速。我們可以利用這種靈活性來創(chuàng)建和維護(hù)定制化的開發(fā)工作流,從而實(shí)現(xiàn)軟件開發(fā)生命周期流程的自動(dòng)化。
總結(jié)
以上是生活随笔為你收集整理的如何能在git bash中使用mvn命令_使用Github Actions完成CI/CD工作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内网和外网的区别_无需服务器,树莓派使用
- 下一篇: 不同系统下的shell的不同_不同论文检