Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Matetika aho no tsy maintsy manangana fantsona ho an'ny tetikasa fananganana ao Java. Indraindray izy io dia open source, indraindray tsy. Vao haingana aho no nanapa-kevitra ny hanandrana hamindra ny sasany amin'ireo fitehirizako avy amin'ny Travis-CI sy TeamCity mankany amin'ny GitHub Actions, ary izany no nivoaka tao.

Inona no hataontsika ho azy?

Voalohany, mila tetikasa izay ho automatique isika, andao hanao fampiharana kely amin'ny Spring boot / Java 11 / Maven. Ho an'ny tanjon'ity lahatsoratra ity dia tsy ho liana amin'ny lojika fampiharana mihitsy izahay; zava-dehibe amintsika ny fotodrafitrasa manodidina ny fampiharana, noho izany dia ampy ho antsika ny fanaraha-maso REST API tsotra.

Azonao jerena eto ny loharano: github.com/antkorwin/github-actions Ny dingana rehetra amin'ny fananganana fantsona dia hita taratra amin'ny fangatahana fisintonana amin'ity tetikasa ity.

JIRA sy drafitra

Tsara ny milaza fa matetika mampiasa JIRA ho toy ny mpanara-maso olana isika, koa andao hamorona birao manokana ho an'ity tetikasa ity ary ampio ireo olana voalohany ao:

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Afaka kelikely dia hiverina amin'izay zavatra mahaliana azon'ny JIRA sy GitHub atolotra miaraka isika.

Manao automatique ny fivorian'ny tetikasa izahay

Ny tetik'asa fitsapana ataonay dia naorina tamin'ny alΓ lan'ny maven, noho izany dia tsotra ny fanamboarana azy, ny hany ilainay dia ny fonosana madio mvn.

Mba hanaovana izany amin'ny fampiasana Github Actions, dia mila mamorona rakitra ao amin'ny repository mamaritra ny fizotran'ny asantsika isika, azo atao amin'ny rakitra yml mahazatra izany, tsy afaka milaza aho fa tiako ny "programming yml", fa inona no azontsika atao - ataontsika ao amin'ny .github/directory workflow/file build.yml izay hamariparitanay ny hetsika rehefa manangana sampana master:

name: Build

on:
  pull_request:
    branches:
      - '*'
  push:
    branches:
      - 'master'

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Package
        run: mvn -B clean package -DskipTests

on - ity dia famaritana ny hetsika izay hanombohan'ny scripty.

on: pull_request/push - manondro fa mila atomboka ity workflow ity isaky ny misy tosika atao amin'ny tompony ary misy ny fangatahana misintona.

Ity manaraka ity dia famaritana ny asa (asa) sy ny dingana famonoana (dingana) ho an'ny asa tsirairay.

mihazakazaka - Eto isika dia afaka misafidy ny OS kendrena, mahagaga fa afaka misafidy Mac OS mihitsy aza ianao, fa amin'ny trano fitehirizana manokana dia lafo be izany (raha oharina amin'ny Linux).

fampiasana mamela anao hampiasa indray hetsika hafa, ohatra, amin'ny fampiasana ny actions/setup-java hetsika apetratsika ny tontolo iainana ho an'ny Java 11.

Amin'ny fanampiana amin'ny azontsika atao ny mamaritra ny masontsivana izay anombohantsika ny hetsika, amin'ny ankapobeny dia ireo no tohan-kevitra hampitaina amin'ilay hetsika.

Ny hany sisa tavela dia ny fampandehanana ny fananganana tetikasa ao Maven: run: mvn -B clean package sainam-pirenena -B dia milaza fa mila fomba tsy misy ifandrimbonana isika mba tsy te-hanontany antsika zavatra tampoka ilay maven

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Mahafinaritra! Ankehitriny, isaky ny manolo-tena amin'ny tompony ianao dia manomboka ny fananganana tetikasa.

Famoahana andrana automatique

Ny fivoriambe dia tsara, fa raha ny marina, ny tetikasa dia azo amboarina soa aman-tsara, fa tsy miasa. Noho izany, ny dingana manaraka dia ny automatique ny andrana. Ho fanampin'izay, mety tsara ny mijery ny valin'ny fanadinana rehefa manao famerenana PR ianao - fantatrao tsara fa mandalo ny fitsapana ary tsy misy adino ny mitantana ny sampana alohan'ny hanaovana merge.

Hanao fitsapana izahay rehefa mamorona fangatahana misintona ary mitambatra amin'ny tompony, ary miaraka amin'izay koa dia hanampy ny famoronana tatitra momba ny fandrakofana kaody.

name: Build

on:
  pull_request:
    branches:
      - '*'
  push:
    branches:
      - 'master'

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Verify
        run: mvn -B clean verify
      - name: Test Coverage
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

Mba handrakofana ny fitsapana dia mampiasa codecov aho miaraka amin'ny plugin jacoco. codecov dia manana ny asany manokana, saingy mila famantarana izy io mba hiarahana amin'ny fangatahanay:

${{ secrets.CODECOV_TOKEN }} - Ho hitantsika imbetsaka io fanorenana io, ny tsiambaratelo dia fomba iray hitehirizana tsiambaratelo ao amin'ny GitHub, afaka manoratra tenimiafina / famantarana / mpampiantrano / url sy data hafa izay tsy tokony hampidirina ao amin'ny fototry ny code repository.

Azonao atao ny manampy varimbazaha amin'ny tsiambaratelo ao amin'ny toeran'ny tahiry ao amin'ny GitHub:

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Afaka mahazo token ianao amin'ny codecov.io Aorian'ny fanomezan-dΓ lana amin'ny alΓ lan'ny GitHub, raha te hampiditra tetikasa ho an'ny daholobe ianao dia mila manaraka rohy toy izao: Anaran'ny mpampiasa GitHub/[anarana anarana]. Azo ampiana tahiry manokana ihany koa; Mba hanaovana izany dia mila manome zo codecov amin'ny fampiharana ao amin'ny Github ianao.

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Ampio ny plugin jacoco amin'ny rakitra POM:

<plugin>
	<groupId>org.jacoco</groupId>
	<artifactId>jacoco-maven-plugin</artifactId>
	<version>0.8.4</version>
	<executions>
		<execution>
			<goals>
				<goal>prepare-agent</goal>
			</goals>
		</execution>
		<!-- attached to Maven test phase -->
		<execution>
			<id>report</id>
			<phase>test</phase>
			<goals>
				<goal>report</goal>
			</goals>
		</execution>
	</executions>
</plugin>
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.22.2</version>
	<configuration>
		<reportFormat>plain</reportFormat>
		<includes>
			<include>**/*Test*.java</include>
			<include>**/*IT*.java</include>
		</includes>
	</configuration>
</plugin>

Ankehitriny ny codecov bot dia hiditra ny tsirairay amin'ireo fangatahan-tsika misintona ary hanampy tabilao fanovana fandrakofana:

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Andeha isika hanampy analyzer static

Amin'ny ankamaroan'ny tetikasa loharano misokatra dia mampiasa rahona sonar aho amin'ny famakafakana code static, mora ny mifandray amin'ny travis-ci. Noho izany dia dingana lojika izany rehefa mifindra any amin'ny GitHub Actions mba hanao toy izany koa. Ny tsenan'ny hetsika dia zavatra mahafinaritra, saingy tamin'ity indray mitoraka ity dia nampalahelo ahy kely izany, satria noho ny fahazarana dia nahita ny hetsika nilaiko aho ary nanampy izany tamin'ny fizotran'ny asa. Saingy hita fa tsy manohana ny fiasana amin'ny alΓ lan'ny hetsika famakafakana tetikasa amin'ny maven na gradle ny sonar. Mazava ho azy fa voasoratra ao amin'ny antontan-taratasy izany, fa iza no mamaky azy?!

Tsy azo atao amin'ny alalan'ny hetsika izany, ka hataonay amin'ny alΓ lan'ny plugin mvn:

name: SonarCloud

on:
  push:
    branches:
      - master
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  sonarcloud:
    runs-on: ubuntu-16.04
    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Analyze with SonarCloud
#       set environment variables:
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
#       run sonar maven plugin:
        run: mvn -B verify sonar:sonar -Dsonar.projectKey=antkorwin_github-actions -Dsonar.organization=antkorwin-github -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN -Dsonar.coverage.jacoco.xmlReportPaths=./target/site/jacoco/jacoco.xml

SONAR_TOKEN - azo alaina amin'ny sonarcloud.io ary mila misoratra anarana amin'ny tsiambaratelo. GITHUB_TOKEN - mari-pamantarana naorina ao amin'ny GitHub ity, miaraka amin'ny fanampian'ny sonarcloud[bot] afaka miditra amin'ny Git mba hamela hafatra ho antsika amin'ny fangatahana fisarihana.

Dsonar.projectKey - ny anaran'ny tetikasa ao amin'ny sonar, azonao jerena ao amin'ny firafitry ny tetikasa.

Dsonar.organization - anaran'ny fikambanana avy amin'ny GitHub.

Manao fangatahana misintona izahay ary miandry ny fahatongavan'ny sonarcloud[bot] ao amin'ny fanehoan-kevitra:

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Famotsorana ny fitantanana

Namboarina ny fananganana, natao ny fitsapana, ary afaka manao famoahana izahay. Andeha hojerentsika ny fomba ahafahan'ny GitHub Actions manamora ny fitantanana ny famoahana.

Any am-piasana dia manana tetikasa aho izay misy ny fototry ny kaody ao anaty bitbucket (toy ny ao amin'io tantara io ny zava-drehetra "Manoratra amin'ny bitbucket aho mandritra ny andro, manolo-tena amin'ny GitHub amin'ny alina"). Indrisy anefa fa tsy manana fitaovana fitantanana famoahana naorina ny bitbucket. Olana izany, satria isaky ny famoahana dia tsy maintsy mamorona pejy amin'ny confluence ianao ary manipy ny endri-javatra rehetra tafiditra ao amin'ny famoahana any, mikaroka amin'ny lapan'ny saina, asa ao amin'ny jira, manao ao amin'ny tahiry. Betsaka ny mety ho diso, afaka manadino zavatra ianao na mampiditra zavatra efa navoaka tamin'ny farany, indraindray tsy mazava tsara hoe inona no hanasokajiana ny fangatahana fisintonana ho - endri-javatra ve izy io na fanamboarana bug, na fitsapana fanitsiana, na zavatra fotodrafitrasa .

Ahoana no ahafahan'ny hetsika GitHub manampy antsika? Misy hetsika lehibe - mpandrafitra famotsorana, mamela anao hametraka mΓ΄dely rakitra naoty famoahana mba hananganana sokajin'ny fangatahana fisintonana ary hanangona azy ireo ho azy ao amin'ny rakitra naoty famoahana:

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Modely ohatra amin'ny fametrahana tatitra (.github/release-draafter.yml):

name-template: 'v$NEXT_PATCH_VERSION'
tag-template: 'v$NEXT_PATCH_VERSION'
categories:
  - title: ' New Features'
    labels:
      - 'type:features'
# Π² эту ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ собираСм всС PR с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ type:features

  - title: ' Bugs Fixes'
    labels:
      - 'type:fix'
# Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ для ΠΌΠ΅Ρ‚ΠΊΠΈ type:fix ΠΈ Ρ‚.Π΄.

  - title: ' Documentation'
    labels:
      - 'type:documentation'

  - title: ' Configuration'
    labels:
      - 'type:config'

change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
template: |
  ## Changes
  $CHANGES

Manampia script hamokatra drafi-pamoahana (.github/workflows/release-draft.yml):

name: "Create draft release"

on:
  push:
    branches:
      - master

jobs:
  update_draft_release:
    runs-on: ubuntu-18.04
    steps:
      - uses: release-drafter/release-drafter@v5
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Ny fangatahana fisintonana rehetra manomboka izao dia angonina ao anaty naoty famoahana ho azy - majika!

Eto dia mety hipoitra ny fanontaniana: ahoana raha manadino ny mametraka marika ao amin'ny PR ny mpamorona? Avy eo dia tsy fantatra mazava hoe inona no sokajy hametrahany azy, ary mbola tsy maintsy miatrika izany amin'ny tanana ianao, miaraka amin'ny PR tsirairay. Mba hamahana ity olana ity dia afaka mampiasa hetsika hafa isika - fanamarinana marika - manamarina ny fisian'ny marika amin'ny fangatahana fisarihana. Raha tsy misy marika takiana, dia tsy hahomby ny fanamarinana ary hahita hafatra momba izany isika ao amin'ny fangatahanay.

name: "Verify type labels"

on:
  pull_request:
    types: [opened, labeled, unlabeled, synchronize]

jobs:
  triage:
    runs-on: ubuntu-18.04
    steps:
      - uses: zwaldowski/match-label-action@v2
        with:
          allowed: 'type:fix, type:features, type:documentation, type:tests, type:config'

Amin'izao fotoana izao, ny fangatahana fisintonana rehetra dia tsy maintsy asiana marika amin'ny iray amin'ireo marika: type: fix, type:features, type:documentation, type:tests, type:config.

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Auto-annotation ny fangatahana fisintonana

Koa satria niresaka momba ny lohahevitra toy ny asa mahomby miaraka amin'ny fangatahana misintona izahay, dia ilaina ny miresaka momba ny hetsika toy ny labeler, mametraka marika ao amin'ny PR mifototra amin'ny fanovana ny rakitra. Ohatra, azontsika atao ny manamarika ho [hanorina] izay fangatahana misintona misy fiovana amin'ny lahatahiry .github/workflow.

Ny mampifandray azy dia tena tsotra:

name: "Auto-assign themes to PR"

on:
  - pull_request

jobs:
  triage:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/labeler@v2
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}

Mila fisie mitantara ny fifandraisana misy eo amin'ny lahatahiry tetikasa sy ny lohahevitra fangatahana fisarihana ihany koa izahay:

theme:build:
  - ".github/**"
  - "pom.xml"
  - ".travis.yml"
  - ".gitignore"
  - "Dockerfile"

theme:code:
  - "src/main/*"

theme:tests:
  - "src/test/*"

theme:documentation:
  - "docs/**"

theme:TRASH:
  - ".idea/**"
  - "target/**"

Tsy nahomby aho tamin'ny fampiarahana ny hetsika izay mametraka etikety ho azy amin'ny fangatahana misintona miaraka amin'ny hetsika izay manamarina ny fisian'ny etikety ilaina; tsy te-hahita ireo etikety nampian'ny bot. Toa mora kokoa ny manoratra ny fihetsikao manokana izay manambatra ny dingana roa. Saingy na dia amin'ity endrika ity aza dia mety tsara ny mampiasa azy; mila misafidy marika amin'ny lisitra ianao rehefa mamorona fangatahana misintona.

Fotoana hapetraka izao

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Nanandrana safidy fandefasana maromaro aho tamin'ny alΓ lan'ny GitHub Actions (amin'ny alΓ lan'ny ssh, amin'ny scp, ary amin'ny fampiasana docker-hub), ary azoko lazaina fa, azo inoana fa hahita fomba hampidirana ny binary amin'ny mpizara ianao, na inona na inona fikorontanan'ny fantsona anao. dia.

Tiako ny safidy hitazonana ny fotodrafitrasa manontolo amin'ny toerana iray, koa andao hojerentsika ny fomba fametrahana ny GitHub Packages (ity dia tahiry ho an'ny atiny binary, npm, jar, docker).

Script amin'ny fananganana sary docker sy famoahana azy ao amin'ny GitHub Packages:

name: Deploy docker image

on:
  push:
    branches:
      - 'master'

jobs:

  build_docker_image:
    runs-on: ubuntu-18.04
    steps:

#     Build JAR:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Package
        run: mvn -B clean compile package -DskipTests

#     Set global environment variables:
      - name: set global env
        id: global_env
        run: |
          echo "::set-output name=IMAGE_NAME::${GITHUB_REPOSITORY#*/}"
          echo "::set-output name=DOCKERHUB_IMAGE_NAME::docker.pkg.github.com/${GITHUB_REPOSITORY}/${GITHUB_REPOSITORY#*/}"

#     Build Docker image:
      - name: Build and tag image
        run: |
          docker build -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:latest" -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:${GITHUB_SHA::8}" .

      - name: Docker login
        run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}

#     Publish image to github package repository:
      - name: Publish image
        env:
          IMAGE_NAME: $GITHUB_REPOSITORY
        run: docker push "docker.pkg.github.com/$GITHUB_REPOSITORY/${{ steps.global_env.outputs.IMAGE_NAME }}"

Voalohany, mila manangana ny rakitra JAR amin'ny fampiharana ataontsika isika, aorian'izay dia kajy ny lalana mankany amin'ny rejisitra docker GitHub sy ny anaran'ny sarintsika. Misy fika vitsivitsy tsy mbola hitantsika eto:

  • Ny fanorenana toy ny: echo "::set-output name=NAME::VALUE" dia ahafahanao mametraka ny sandan'ny fari-piainana amin'ny dingana ankehitriny, mba ho vakiana amin'ny dingana hafa rehetra.
  • azonao atao ny mahazo ny sandan'ny fari-piainana amin'ny dingana teo aloha amin'ny alalan'ny famantarana an'ity dingana ity: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Ny fari-piadidiana GITHUB_REPOSITORY mahazatra dia mitahiry ny anaran'ny tahiry sy ny tompony ("tompony/repo-name"). Mba hanapahana ny zava-drehetra amin'ity andalana ity afa-tsy ny anaran'ny tahiry, dia hampiasa syntax bash izahay: ${GITHUB_REPOSITORY#*/}

Avy eo dia mila manangana sary docker isika:

docker build -t "docker.pkg.github.com/antkorwin/github-actions/github-actions:latest"

Midira ao amin'ny rejisitra:

docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}

Ary avoaka ao amin'ny GitHub Packages Repository ny sary:

docker push "docker.pkg.github.com/antkorwin/github-actions/github-actions"

Mba hanondroana ny dikan-ny sary, dia mampiasa ny isa voalohany avy amin'ny SHA hash ny commit - GITHUB_SHA misy ihany koa ny nuances eto, raha manao toy izany fanorenana tsy rehefa mitambatra ho tompony, fa koa araka ny fisintonana fangatahana famoronana. hetsika, dia mety tsy mifanandrify amin'ny hash hitantsika ao amin'ny tantaran'ny git ny SHA, satria ny hetsika/hetsika famandrihana dia manao ny hash manokana ho azy manokana mba hisorohana ny hetsika maty paika ao amin'ny PR.

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Raha mandeha tsara ny zava-drehetra, dia sokafy ny fizarana fonosana (https://github.com/antkorwin/github-actions/packages) ao amin'ny tahiry dia hahita sary docker vaovao ianao:

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Any ianao dia afaka mahita lisitry ny dikan-ny sary docker.

Ny hany sisa tavela dia ny manamboatra ny mpizara anay hiasa amin'ity rejisitra ity ary hamerina ny serivisy. Mety hiresaka momba ny fomba hanaovana izany amin'ny alΓ lan'ny systemd aho amin'ny fotoana hafa.

fanaraha-maso

Andeha hojerentsika ny safidy tsotra amin'ny fomba fanaovana fitiliana ara-pahasalamana ho an'ny fampiharana amin'ny fampiasana GitHub Actions. Ny fampiharana booty dia manana actuator, noho izany dia tsy mila manoratra API akory izahay mba hanamarinana ny toerany; efa nanao ny zava-drehetra ho an'ny kamo. Mila misintona ny mpampiantrano fotsiny ianao: SERVER-URL:PORT/actuator/health

$ curl -v 127.0.0.1:8080/actuator/health

> GET /actuator/health HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.61.1
> Accept: */*

< HTTP/1.1 200
< Content-Type: application/vnd.spring-boot.actuator.v3+json
< Transfer-Encoding: chunked
< Date: Thu, 04 Jun 2020 12:33:37 GMT

{"status":"UP"}

Ny hany ilaintsika dia ny manoratra asa hijerena ny mpizara amin'ny fampiasana cron, ary raha tampoka dia tsy mamaly anay izany, dia handefa fampahafantarana amin'ny alΓ lan'ny telegrama izahay.

Voalohany, andeha hojerentsika ny fomba fampandehanana cron workflow:

on:
  schedule:
    - cron:  '*/5 * * * *'

Tsotra izany, tsy mino aho fa ao amin'ny Github dia afaka mamorona hetsika tsy mifanaraka amin'ny webhooks mihitsy ianao. Ao amin'ny antontan-taratasy ny antsipiriany: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Andeha hojerentsika ny satan'ny mpizara amin'ny alΓ lan'ny curl:

jobs:
  ping:
    runs-on: ubuntu-18.04
    steps:

      - name: curl actuator
        id: ping
        run: |
          echo "::set-output name=status::$(curl ${{secrets.SERVER_HOST}}/api/actuator/health)"

      - name: health check
        run: |
          if [[ ${{ steps.ping.outputs.status }} != *"UP"* ]]; then
            echo "health check is failed"
            exit 1
          fi
          echo "It's OK"

Voalohany, tehirizinay ao anaty faribolana izay novalin'ny mpizara ny fangatahana, amin'ny dingana manaraka dia manamarina fa UP ny sata ary, raha tsy izany, dia mivoaka miaraka amin'ny hadisoana izahay. Raha mila "manafotra" hetsika amin'ny tananao ianao, dia fivoahana 1 - fitaovam-piadiana mety.

  - name: send alert in telegram
    if: ${{ failure() }}
    uses: appleboy/telegram-action@master
    with:
      to: ${{ secrets.TELEGRAM_TO }}
      token: ${{ secrets.TELEGRAM_TOKEN }}
      message: |
        Health check of the:
        ${{secrets.SERVER_HOST}}/api/actuator/health
        failed with the result:
        ${{ steps.ping.outputs.status }}

Alefantsika amin'ny telegrama ihany raha tsy nahomby ny hetsika tamin'ny dingana teo aloha. Mba handefasana hafatra dia mampiasa appleboy/telegram-action izahay; azonao atao ny mamaky momba ny fomba hahazoana token'ny bot sy id chat ao amin'ny antontan-taratasy: github.com/appleboy/telegram-action

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Aza adino ny manoratra ao amin'ny tsiambaratelo ao amin'ny Github: URL ho an'ny mpizara sy famantarana ho an'ny bot telegrama.

Bonus track - JIRA ho an'ny kamo

Nampanantena aho fa hiverina any amin’ny JIRA, ary niverina. Imbetsaka aho no nahita toe-javatra iray tamin'ny stand-up rehefa nanao endri-javatra ny developer, nanambatra sampana, saingy nanadino ny nisintona ilay olana tao amin'ny JIRA. Mazava ho azy fa raha natao amin'ny toerana iray izany rehetra izany dia ho mora kokoa, fa raha ny marina dia manoratra kaody ao amin'ny IDE isika, manambatra ny sampana amin'ny bitbucket na GitHub, ary avy eo dia misintona ny asa ho any Jira, noho izany dia mila manokatra varavarankely vaovao. , indraindray miditra indray sns. Rehefa tsaroanao tsara izay tokony hataonao manaraka, dia tsy misy dikany ny fanokafana ny solaitrabe indray. Vokatr'izany, amin'ny maraina amin'ny standup dia mila mandany fotoana amin'ny fanavaozana ny biraon'ny asa ianao.

Hanampy antsika amin'ity asa mahazatra ity ihany koa ny GitHub; ho fanombohana dia afaka misintona ho azy ireo olana ao amin'ny tsanganana code_review isika rehefa mandefa fangatahana misintona. Ny hany tokony hataonao dia ny manaraka ny fivoriamben'ny sampana nomena anarana:

[имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°]-[Π½ΠΎΠΌΠ΅Ρ€ таска]-Π½Π°Π·Π²Π°Π½ΠΈΠ΅

ohatra, raha GA ny fanalahidin'ny tetikasa "GitHub Actions", dia GA-8-jira-bot Mety ho sampana amin'ny fampiharana ny asa GA-8.

Ny fampidirana miaraka amin'ny JIRA dia miasa amin'ny alΓ lan'ny hetsika avy amin'ny Atlassian, tsy tonga lafatra izy ireo, tsy maintsy lazaiko fa ny sasany amin'izy ireo dia tsy nandaitra tamiko mihitsy. Saingy ireo izay tena miasa sy ampiasaina mavitrika ihany no horesahinay.

Voalohany dia mila miditra amin'ny JIRA ianao amin'ny fampiasana ny hetsika: atlassian/gajira-login

jobs:
  build:
    runs-on: ubuntu-latest
    name: Jira Workflow
    steps:
      - name: Login
        uses: atlassian/gajira-login@master
        env:
          JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
          JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
          JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}

Mba hanaovana izany dia mila maka token ianao ao amin'ny JIRA, ny fomba hanaovana izany dia voalaza eto: confluence.atlassian.com/cloud/api-tokens-938839638.html

Esory ny identifier asa avy amin'ny anaran'ny sampana:

  - name: Find Issue
    id: find_issue
    shell: bash
    run: |
      echo "::set-output name=ISSUE_ID::$(echo ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}')"
      echo brach name: $GITHUB_HEAD_REF
      echo extracted issue: ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}'

  - name: Check Issue
    shell: bash
    run: |
      if [[ "${{steps.find_issue.outputs.ISSUE_ID}}" == "" ]]; then
        echo "Please name your branch according to the JIRA issue: [project_key]-[task_number]-branch_name"
        exit 1
      fi
      echo succcessfully found JIRA issue: ${{steps.find_issue.outputs.ISSUE_ID}}

Raha mikaroka ao amin'ny tsenan'ny GitHub ianao dia afaka mahita hetsika ho an'ity asa ity, saingy tsy maintsy nanoratra zavatra mitovy aho tamin'ny fampiasana ny grep mampiasa ny anaran'ny sampana, satria ity hetsika avy amin'ny Atlassian ity dia tsy te hiasa amin'ny tetikasako amin'ny fomba rehetra. , mba hamantarana izay tsy nety tao - ela kokoa noho ny manao zavatra mitovy amin'ny tananao.

Ny hany sisa tavela dia ny mamindra ny asa ho any amin'ny tsanganana "Code review" rehefa mamorona fangatahana misintona:

  - name: Transition issue
    if: ${{ success() }}
    uses: atlassian/gajira-transition@master
    with:
      issue: ${{ steps.find_issue.outputs.ISSUE_ID }}
      transition: "Code review"

Misy hetsika manokana amin'izany ao amin'ny GitHub, ny hany ilaina dia ny ID olana azo tamin'ny dingana teo aloha sy ny fanomezan-dΓ lana tao amin'ny JIRA izay nataonay teo ambony.

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

Toy izany koa, azonao atao ny misintona asa rehefa mitambatra ao amin'ny master, sy hetsika hafa avy amin'ny workflow GitHub. Amin'ny ankapobeny, miankina amin'ny eritreritrao sy ny fanirianao hanao automatique ny dingana mahazatra izany.

hitany

Raha mijery ny mahazatra DEVOPS kisary, isika dia nandrakotra ny dingana rehetra, afa-tsy angamba miasa, Heveriko fa raha miezaka ianao, dia afaka mahita hetsika sasany eo amin'ny tsena ho an'ny fidirana amin'ny rafitra fanampiana-birao, ka dia mihevitra fa ny fantsona nivadika. feno ary azo tsoahina avy amin'ny fampiasana azy.

Faribolan'ny helo miaraka amin'ny GitHub Actions (manorina fantsona CI/CD ho an'ny tetikasa Java)

matihanina:

  • Tsena misy hetsika efa vita ho an'ny fotoana rehetra, tena mahafinaritra izany. Amin'ny ankamaroan'izy ireo dia azonao atao koa ny mijery ny kaody loharano mba hahafantarana ny fomba hamahana olana mitovy amin'izany na handefa fangatahana endri-javatra amin'ny mpanoratra mivantana ao amin'ny tahiry GitHub.
  • Ny fisafidianana ny sehatra kendrena amin'ny fivoriambe: Linux, mac os, windows dia endri-javatra mahaliana.
  • Ny Packages Github dia zavatra tsara, mety tsara ny mitazona ny fotodrafitrasa manontolo amin'ny toerana iray, tsy mila mivezivezy amin'ny varavarankely samihafa ianao, ny zava-drehetra dia ao anatin'ny salan'isa iray na roa totozy ary mitambatra tsara amin'ny GitHub Actions. Ny fanohanan'ny rejistra Docker amin'ny dikan-teny maimaim-poana dia tombony tsara ihany koa.
  • GitHub dia manafina tsiambaratelo amin'ny fananganana logs, noho izany dia tsy mampatahotra ny fampiasana azy hitehirizana tenimiafina sy marika. Nandritra ny fanandramana rehetra nataoko dia tsy afaka nahita ny tsiambaratelo tamin'ny endriny madio tao amin'ny console aho.
  • Maimaimpoana ho an'ny tetikasa Open Source

maharatsy ny mifampiresaka:

  • YML, eny, tsy tiako izy. Rehefa miasa amin'ny fikorianan'ny toy izany, ny hafatra fanolorana mahazatra indrindra ananako dia ny "fix yml format", dia adinonao ny mametraka tabilao any ho any, na manoratra izany amin'ny tsipika diso. Amin'ny ankapobeny, ny mipetraka eo anoloan'ny efijery misy protractor sy mpanapaka dia tsy traikefa mahafinaritra indrindra.
  • DEBUG, debugging ny fikorianan'ny commits, manao fanamboarana indray, ary ny famoahana ny console dia tsy mety foana, fa bebe kokoa amin'ny sokajy "be loatra ianao"; zatra miasa miaraka amin'ny IDEA mety ianao, rehefa afaka debug na inona na inona. .
  • Azonao atao ny manoratra ny hetsika ataonao amin'ny zavatra rehetra raha toa ka mamatotra azy ao amin'ny Docker ianao, fa ny javascript ihany no tohanan'ny teratany, mazava ho azy fa resaka tsiro izany, fa aleoko zavatra hafa fa tsy js.

MamelΓ  ahy hampahatsiahy anao fa eto ny tahiry misy ny script rehetra: github.com/antkorwin/github-actions

Amin'ny herinandro ho avy dia hanao fampisehoana miaraka aho TATITRA amin'ny fihaonambe Heisenbug 2020 Piter. Lazaiko aminao ny fomba hisorohana ny fahadisoana rehefa manomana angona fitsapana, fa mizara koa ny tsiambarateloko amin'ny fiasana amin'ny angon-drakitra amin'ny rindranasa Java!

Source: www.habr.com