Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Ngokuvamile kufanele ngakhe ipayipi lamaphrojekthi wokwakha e-Java. Kwesinye isikhathi iwumthombo ovulekile, kwesinye isikhathi awunjalo. Muva nje nginqume ukuzama ukususa ezinye zezindawo zami zokuphinda ngizisuse ku-Travis-CI kanye ne-TeamCity ngiziyise e-GitHub Actions, futhi yilokhu okwaphuma kuyo.

Sizokwenzani ngokuzenzakalelayo?

Okokuqala, sidinga iphrojekthi esizoyenza ngokuzenzakalelayo, masenze isicelo esincane ku-Spring boot / Java 11 / Maven. Ngezinjongo zalesi sihloko, ngeke sibe nentshisekelo kulogic yohlelo nhlobo; ingqalasizinda eseduze nohlelo lokusebenza ibalulekile kithi, ngakho-ke isilawuli esilula se-REST API sizosanela.

Ungabuka imithombo lapha: github.com/antkorwin/github-actions Zonke izigaba zokwakha ipayipi zibonakala ezicelweni zokudonsa zale phrojekthi.

JIRA nokuhlela

Kuhle ukusho ukuthi sivame ukusebenzisa i-JIRA njengesilandeleli sezinkinga, ngakho-ke ake sakhe ibhodi ehlukile yale phrojekthi futhi sengeze izindaba zokuqala lapho:

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Ngemva kwesikhashana sizobuyela kulokho okuthakazelisayo i-JIRA ne-GitHub enganikeza ngokuhlangene.

Senza ngokuzenzakalelayo ukuhlanganiswa kwephrojekthi

Iphrojekthi yethu yokuhlola yakhiwe nge-maven, ngakho-ke ukuyakha kulula kakhulu, esikudingayo iphakethe elihlanzekile le-mvn.

Ukwenza lokhu sisebenzisa Izenzo ze-Github, sizodinga ukudala ifayela endaweni yokugcina echaza ukuhamba komsebenzi wethu, lokhu kungenziwa ngefayela le-yml elivamile, angikwazi ukusho ukuthi ngithanda "uhlelo lwe-yml", kodwa yini esingayenza - sikwenza kokuthi .github/ directory workflow/ file build.yml lapho sizochaza khona izenzo lapho sakha igatsha eliyinhloko:

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 — lena incazelo yomcimbi lapho kuzokwethulwa khona umbhalo wethu.

ku: pull_request/push - kukhombisa ukuthi lokhu kugeleza komsebenzi kudinga ukwethulwa ngaso sonke isikhathi lapho kuphushwa ku-master futhi kwakhiwa izicelo zokudonsa.

Okulandelayo yincazelo yemisebenzi (imisebenzi) kanye nezinyathelo zokwenza (izinyathelo) ngomsebenzi ngamunye.

iyagijima - lapha singakhetha i-OS eqondiwe, ngokumangalisayo, ungakhetha ngisho ne-Mac OS, kodwa kumakhosombe angasese lokhu kubiza kakhulu (uma kuqhathaniswa ne-Linux).

kusebenzisa ikuvumela ukuthi usebenzise kabusha ezinye izenzo, isibonelo, usebenzisa izenzo/ukusetha-isenzo se-java esifaka imvelo ye-Java 11.

Ngosizo luka nge singacacisa amapharamitha esethula ngawo isenzo, empeleni lawa ama-agumenti azodluliselwa esenzweni.

Okusele nje ukuqhuba iphrojekthi yokwakha noMaven: run: mvn -B clean package ifulege -B ithi sidinga imodi engasebenzisani ukuze i-maven ingafuni ukusibuza okuthile

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Kuhle! Manje, ngaso sonke isikhathi lapho uzibophezela ku-master, ukwakhiwa kwephrojekthi kuyaqala.

Ukuqaliswa kokuhlola okuzenzakalelayo

Umhlangano muhle, kodwa empeleni, iphrojekthi ingahlanganiswa ngokuphepha, kodwa ingasebenzi. Ngakho-ke, isinyathelo esilandelayo ukwenza ngokuzenzakalelayo ama-run okuhlola. Ngaphezu kwalokho, kulula kakhulu ukubheka imiphumela yokuphasa izivivinyo lapho wenza isibuyekezo se-PR - uyazi ngokuqinisekile ukuthi ukuhlolwa kuyaphumelela futhi akekho okhohliwe ukuqhuba igatsha lakhe ngaphambi kokwenza ukuhlanganisa.

Sizosebenzisa izivivinyo lapho sidala isicelo sokudonsa futhi sihlanganise okuyinhloko, futhi ngesikhathi esifanayo sizokwengeza ukudalwa kombiko mayelana nokufakwa kwekhodi.

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 }}

Ukumboza izivivinyo, ngisebenzisa i-codecov ngokuhlanganyela ne-jacoco plugin. I-codecov inesenzo sayo, kodwa idinga ithokheni ukuze isebenze nesicelo sethu sokudonsa:

${{ secrets.CODECOV_TOKEN }} - sizobona lokhu kwakhiwa izikhathi ezingaphezu kwesisodwa, izimfihlo ziyindlela yokugcina izimfihlo ku-GitHub, singabhala lapho amaphasiwedi/amathokheni/amahosti/ama-url kanye nenye idatha okungafanele ifakwe kusisekelo sekhodi yendawo.

Ungangeza okuhlukile kuzimfihlo kuzilungiselelo zendawo yokugcina ku-GitHub:

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Ungathola ithokheni ku codecov.io Ngemuva kokugunyazwa nge-GitHub, ukwengeza iphrojekthi yomphakathi udinga nje ukulandela isixhumanisi esifana nalesi: Igama lomsebenzisi we-GitHub/[repo name]. Indawo yokugcina yangasese nayo ingangezwa; ukwenza lokhu, udinga ukunikeza amalungelo e-codecov kuhlelo lokusebenza ku-Github.

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Engeza i-plugin ye-jacoco kufayela le-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>

Manje i-codecov bot izofaka isicelo sethu ngasinye sokudonsa futhi ingeze igrafu yokushintsha ikhava:

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Ake sengeze umhlaziyi omile

Kumaphrojekthi wami amaningi omthombo ovulekile ngisebenzisa ifu le-sonar ukuze ngihlaziye ikhodi emile, kulula kakhulu ukuxhuma ku-travis-ci. Ngakho-ke kuyisinyathelo esinengqondo lapho uthuthela ku-GitHub Actions ukwenza okufanayo. Imakethe yesenzo iyinto epholile, kodwa kulokhu ingenze ngehlisa kancane, ngoba ngenxa yomkhuba ngithole isenzo engangisidinga ngase ngengeza ekuhambeni komsebenzi. Kepha kwavela ukuthi i-sonar ayikusekeli ukusebenza ngesenzo sokuhlaziya amaphrojekthi ku-maven noma i-gradle. Yiqiniso, lokhu kubhaliwe emibhalweni, kodwa ubani oyifundayo?!

Akwenzeki ngesenzo, ngakho-ke sizokwenza nge-plugin ye-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 - ingatholakala ku sonarcloud.io futhi udinga ukuyibhalisa ngezimfihlo. GITHUB_TOKEN - lena ithokheni eyakhelwe ngaphakathi ekhiqizwa yi-GitHub, ngosizo lokuthi i-sonarcloud[bot] izokwazi ukungena ngemvume ku-Git ukuze isishiyele imilayezo ezicelweni zokudonsa.

Dsonar.projectKey — igama lephrojekthi kusonar, ungalibona kuzilungiselelo zephrojekthi.

I-Dsonar.inhlangano - Igama lenhlangano evela ku-GitHub.

Senza isicelo sokudonsa futhi silinde i-sonarcloud[bot] ukuthi ize kumazwana:

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Ukuphathwa kokukhishwa

Isakhiwo silungisiwe, ukuhlola sekuqalisiwe, futhi singakwazi ukukhipha. Ake sibheke ukuthi Izenzo ze-GitHub zingenza kanjani ukuphathwa kokukhishwa kube lula kakhulu.

Emsebenzini, nginamaphrojekthi anesisekelo sekhodi ku-bitbucket (yonke into ifana naleyo ndaba "Ngibhalela i-bitbucket emini, ngizibophezele ku-GitHub ebusuku"). Ngeshwa, i-bitbucket ayinawo amathuluzi okuphatha ukukhishwa okwakhelwe ngaphakathi. Lokhu kuyinkinga, ngoba ekukhishweni ngakunye kufanele udale ngesandla ikhasi ngokuhlangana bese uphonsa zonke izici ezifakwe ekukhululweni lapho, ukucinga ngezigodlo zengqondo, imisebenzi ku-jira, izibopho endaweni yokugcina. Maningi amathuba okwenza iphutha, ungakhohlwa okuthile noma ufake okuthile osekuvele kukhululwe ngeledlule, kwesinye isikhathi akucaci kahle ukuthi isicelo sokudonsa singasihlukanisa sithini - siyisici noma ukulungisa amaphutha, noma ukuhlela ukuhlolwa, noma okuthile kwengqalasizinda .

Izenzo ze-GitHub zingasisiza kanjani? Kunesenzo esihle - ukukhishwa okusalungiswa, kukuvumela ukuthi usethe isifanekiso sefayela lamanothi okukhipha ukuze umise izigaba zezicelo zokudonsa futhi uziqoqe ngokuzenzakalelayo kufayela lamanothi okukhishwa:

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Isibonelo sesifanekiso sokusetha umbiko (.github/release-drafter.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

Engeza umbhalo ukuze ukhiqize ukukhishwa okusalungiswa (.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 }}

Zonke izicelo zokudonsa kusukela manje kuqhubeke zizoqoqwa kumanothi okukhululwa ngokuzenzakalelayo - umlingo!

Lapha umbuzo ungase uphakame: kuthiwani uma abathuthukisi bekhohlwa ukubeka amathegi ku-PR? Khona-ke akucaci ukuthi uzoyifaka kusiphi isigaba, futhi uzophinde ubhekane nayo mathupha, nge-PR ngayinye ngokwehlukana. Ukuze silungise le nkinga, singasebenzisa esinye isenzo - isiqinisekisi selebula - sihlola ukuba khona komaka esicelweni sokudonsa. Uma bengekho omaka abadingekayo, khona-ke isheke lizohluleka futhi sizobona umlayezo mayelana nalokhu esicelweni sethu sokudonsa.

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'

Manje noma yisiphi isicelo sokudonsa kumele simakwe ngomunye womaki: hlobo:lungisa, uhlobo:izici, uhlobo:imibhalo, uhlobo:izivivinyo, uhlobo:config.

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Isichasiselo esizenzakalelayo sezicelo zokudonsa

Njengoba sithinte esihlokweni esinjalo njengomsebenzi ophumelelayo ngezicelo zokudonsa, kufanelekile ukukhuluma ngesenzo esinjalo njengelebula, sibeka amathegi ku-PR ngokusekelwe ekutheni yimaphi amafayela ashintshiwe. Isibonelo, singamaka njengokuthi [sakha] noma yisiphi isicelo sokudonsa esiqukethe izinguquko kuhla lwemibhalo .github/workflow.

Ukuyixhuma kulula kakhulu:

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 }}

Sidinga futhi ifayela elichaza ukuxhumana phakathi kwezinkomba zephrojekthi nezihloko zesicelo sokudonsa:

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

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

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

theme:documentation:
  - "docs/**"

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

Angiphumelelanga ukubhanqa isenzo esibeka ngokuzenzakalelayo amalebula ezicelweni zokudonsa ngesenzo esihlola ubukhona bamalebula adingekayo; ilebula yokufanisa ayifuni ukubona amalebula engezwe yi-bot. Kubonakala kulula ukubhala isenzo sakho esihlanganisa zombili izigaba. Kodwa ngisho nakuleli fomu kulula kakhulu ukuyisebenzisa; udinga ukukhetha ilebula ohlwini lapho udala isicelo sokudonsa.

Isikhathi sokuphakela

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Ngizamile izinketho ezimbalwa zokuthunyelwa nge-GitHub Actions (nge-ssh, nge-scp, nokusebenzisa i-docker-hub), futhi ngingasho ukuthi, cishe, uzothola indlela yokulayisha kanambambili kuseva, noma ngabe iphayiphi lakho ligwegwile kangakanani. kuyinto.

Ngithande inketho yokugcina yonke ingqalasizinda isendaweni eyodwa, ngakho-ke ake sibheke ukuthi singathumela kanjani ku-GitHub Packages (lena inqolobane yokuqukethwe kanambambili, npm, jar, docker).

Iskripthi sokwakha isithombe sedokhu futhi sisishicilele ku-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 }}"

Okokuqala, sidinga ukwakha ifayela le-JAR lohlelo lwethu lokusebenza, ngemva kwalokho sibale indlela eya ebhukwini le-docker le-GitHub kanye negama lesithombe sethu. Kunamaqhinga ambalwa lapha esingakawaboni:

  • ukwakhiwa okufana nokuthi: echo “::set-output name=NAME::VALUE” ikuvumela ukuthi usethe inani loguquko esinyathelweni samanje, ukuze lifundeke kuzo zonke ezinye izinyathelo.
  • ungathola inani lesethi eguquguqukayo esinyathelweni sangaphambilini ngokusebenzisa inkomba yalesi sinyathelo: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Okuhluka okujwayelekile kwe-GITHUB_REPOSITORY kugcina igama lenqolobane kanye nomnikazi wayo (“umnikazi/igama-repo-repo”). Ukuze sisike yonke into kulo mugqa ngaphandle kwegama lenqolobane, sizosebenzisa i-bash syntax: ${GITHUB_REPOSITORY#*/}

Okulandelayo sidinga ukwakha isithombe se-docker:

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

Ngena ngemvume kusibhalisi:

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

Futhi ushicilele isithombe ku-GitHub Packages Repository:

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

Ukuze sibonise inguqulo yesithombe, sisebenzisa amadijithi okuqala asuka ku-SHA hash yesithembiso - GITHUB_SHA kukhona futhi ama-nuances lapha, uma wenza ukwakhiwa okunjalo hhayi kuphela lapho uhlanganisa okuyinhloko, kodwa futhi ngokuvumelana nokudala isicelo sokudonsa. umcimbi, khona-ke i-SHA ingase ingafani ne-hash esiyibona emlandweni we-git, ngoba isenzo/isenzo sokuphuma senza i-hashi yaso eyingqayizivele ukuze kugwenywe izenzo ezivimbayo ku-PR.

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Uma konke kuhambe kahle, bese uvula isigaba samaphakheji (https://github.com/antkorwin/github-actions/packages) endaweni yokugcina, uzobona isithombe sedokhi esisha:

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Lapho ungabona nohlu lwezinguqulo zesithombe se-docker.

Okusele nje ukulungisa iseva yethu ukuthi isebenze nalokhu kubhaliswa bese iqalisa kabusha isevisi. Mhlawumbe ngizokhuluma ngendlela yokwenza lokhu nge-systemd ngesinye isikhathi.

Ukuqapha

Ake sibheke inketho elula yokuthi ungahlola kanjani impilo yohlelo lwethu lokusebenza usebenzisa Izenzo ze-GitHub. Uhlelo lwethu lokusebenza lwe-boot lune-actuator, ngakho-ke asidingi ngisho nokubhala i-API ukuze sihlole isimo sayo; sesivele senze konke ngenxa yamavila. Udinga nje ukudonsa umsingathi: 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"}

Konke esikudingayo ukubhala umsebenzi ukuhlola iseva usebenzisa i-cron, futhi uma ngokuzumayo engasiphenduli, khona-ke sizothumela isaziso ku-telegram.

Okokuqala, ake sithole ukuthi singakusebenzisa kanjani ukugeleza komsebenzi we-cron:

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

Kulula, angikholwa nokuthi ku-Github ungakha imicimbi engangeni kuma-webhooks nhlobo. Imininingwane ikumadokhumenti: help.github.com/zu/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Ake sihlole isimo seseva mathupha nge-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"

Okokuqala, silondoloza kokuguquguqukayo lokho iseva esabela ngayo esicelweni, esinyathelweni esilandelayo sihlola ukuthi isimo siPHEZULU futhi, uma kungenjalo, bese siphuma ngephutha. Uma udinga "ukweqa" isenzo ngezandla zakho, ke phuma 1 - isikhali esifanele.

  - 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 }}

Sithumela kuthelegramu kuphela uma isenzo sihlulekile esinyathelweni sangaphambilini. Ukuthumela umlayezo sisebenzisa i-appleboy/telegram-action; ungafunda mayelana nendlela yokuthola ithokheni ye-bot kanye ne-id yokuxoxa emibhalweni: github.com/appleboy/telegram-action

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Ungakhohlwa ukubhala ezimfihlo ku-Github: I-URL yeseva namathokheni we-telegraph bot.

Ithrekhi yebhonasi - JIRA yamavila

Ngathembisa ukuthi sizobuyela eJIRA, futhi sesibuyile. Izikhathi ezingamakhulu ngiye ngabona isimo sokuma lapho onjiniyela benza isici, bahlanganisa igatsha, kodwa bakhohlwa ukuhudulela udaba ku-JIRA. Yiqiniso, uma konke lokhu kwenziwa endaweni eyodwa, kungaba lula, kodwa empeleni sibhala ikhodi ku-IDE, sihlanganise amagatsha ku-bitbucket noma i-GitHub, bese sihudulela imisebenzi ku-Jira, kulokhu sidinga ukuvula amawindi amasha. , ngezinye izikhathi ngena futhi futhi njll. Uma ukhumbula kahle ukuthi yini okudingeka uyenze ngokulandelayo, akukho phuzu lokuvula ibhodi futhi. Ngenxa yalokho, ekuseni endaweni yokuma udinga ukuchitha isikhathi ubuyekeza ibhodi lomsebenzi.

I-GitHub izophinde isisize kulo msebenzi ovamile; okokuqala, singahudula izinkinga ngokuzenzakalelayo kukholomu ye-code_review lapho sithumela isicelo sokudonsa. Odinga ukukwenza ukulandela umhlangano wokuqamba amagatsha:

[имя проекта]-[номер таска]-название

isibonelo, uma ukhiye wephrojekthi "GitHub Actions" ungu-GA, khona-ke GA-8-jira-bot kungaba igatsha lokuqalisa umsebenzi we-GA-8.

Ukuhlanganiswa ne-JIRA kusebenza ngezenzo ezivela ku-Atlassian, aziphelele, kufanele ngisho ukuthi ezinye zazo azizange zingisebenzele nhlobo. Kodwa sizoxoxa kuphela ngalezo ezisebenzayo futhi ezisetshenziswa ngenkuthalo.

Okokuqala udinga ukungena ngemvume ku-JIRA usebenzisa isenzo: i-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 }}

Ukuze wenze lokhu, udinga ukuthola ithokheni ku-JIRA, ukuthi ungakwenza kanjani lokhu kuchazwe lapha: confluence.atlassian.com/cloud/api-tokens-938839638.html

Sikhipha isihlonzi somsebenzi egameni legatsha:

  - 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}}

Uma usesha endaweni yemakethe ye-GitHub, ungathola isenzo salo msebenzi, kodwa bekufanele ngibhale into efanayo ngisebenzisa i-grep ngisebenzisa igama legatsha, ngoba lesi senzo esivela ku-Atlassian besingafuni ukusebenza kuphrojekthi yami nganoma iyiphi indlela. , ukuthola ukuthi yini eyayingalungile lapho - isikhathi eside kunokwenza into efanayo ngezandla zakho.

Okusele wukuhambisa umsebenzi kukholamu “Yokubuyekeza Ikhodi” lapho udala isicelo sokudonsa:

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

Kunesenzo esikhethekile salokhu ku-GitHub, okudingayo nje i-ID yodaba etholwe esinyathelweni sangaphambilini kanye nokugunyazwa ku-JIRA esikwenze ngenhla.

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Ngendlela efanayo, ungahudula imisebenzi lapho uhlanganisa okuyinhloko, neminye imicimbi ukusuka ekuhambeni komsebenzi kwe-GitHub. Ngokuvamile, konke kuncike emcabangweni wakho kanye nesifiso sokushintsha izinqubo zesimiso.

okutholakele

Uma ubheka umdwebo wakudala we-DEVOPS, sihlanganise zonke izigaba, ngaphandle kokuthi mhlawumbe sisebenze, ngicabanga ukuthi uma uzama, ungathola isenzo esithile emakethe sokuhlanganiswa nohlelo lwedeski losizo, ngakho sizothatha ngokuthi ipayipi lijikile. kucace futhi kungafinyelelwa esiphethweni ngokusekelwe ekusetshenzisweni kwayo.

Imibuthano yesihogo nge-GitHub Actions (ukwakha ipayipi le-CI/CD lephrojekthi ye-Java)

Izinzuzo:

  • Indawo yemakethe enezenzo esezilungile zazo zonke izikhathi, lokhu kuhle kakhulu. Eziningi zazo, ungabheka nekhodi yomthombo ukuze uqonde ukuthi ungayixazulula kanjani inkinga efanayo noma uthumele isicelo sesici kumbhali ngqo endaweni yokugcina ye-GitHub.
  • Ukukhetha inkundla okuhloswe ngayo yokuhlanganisa: I-Linux, i-mac os, amafasitela kuyisici esithokozisayo.
  • I-Github Packages iyinto enhle, kulula ukugcina yonke ingqalasizinda endaweni eyodwa, akudingeki ukuthi udlulele kumafasitela ahlukene, yonke into ingaphakathi kwe-radius yokuchofoza okukodwa noma okubili kwegundane futhi ihlanganiswe ngokuphelele ne-GitHub Actions. Ukusekelwa kokubhaliswa kwe-Docker enguqulweni yamahhala nakho kuyinzuzo enhle.
  • I-GitHub ifihla izimfihlo kumalogi wokwakha, ngakho-ke ukuyisebenzisa ukugcina amaphasiwedi namathokheni akwesabisi kangako. Phakathi nakho konke ukuhlola kwami, angizange ngikwazi ukubona imfihlo ngendlela yayo emsulwa kukhonsoli.
  • Kumahhala kumaphrojekthi womthombo ovulekile

Umthengi:

  • YML, angimthandi. Uma usebenza ngokugeleza okunjalo, umlayezo wokuzibophezela ovame kakhulu enginawo uthi "lungisa ifomethi ye-yml", ngezinye izikhathi uyakhohlwa ukubeka ithebhu endaweni ethile, ngezinye izikhathi uyibhala emugqeni ongalungile. Ngokuvamile, ukuhlala phambi kwesikrini nge-protractor nerula akuyona into ejabulisayo kakhulu.
  • I-DEBUG, ukulungisa iphutha lokugeleza ngokuzibophezela, ukusebenzisa ukwakha kabusha, nokukhiphela ikhonsoli akulula ngaso sonke isikhathi, kodwa kungaphezulu kwesigaba esithi “weqiwe kakhulu”; ujwayele ukusebenza nge-IDEA elula, lapho ungakwazi ukulungisa noma yini. .
  • Ungabhala isenzo sakho kunoma yini uma usigoqa ku-Docker, kodwa i-javascript kuphela esekelwa ngokomdabu, vele lokhu kuyindaba yokunambitha, kodwa ngingathanda okunye esikhundleni se-js.

Ake ngikukhumbuze ukuthi inqolobane enayo yonke imibhalo ilapha: github.com/antkorwin/github-actions

Ngesonto elizayo ngizobe nginandisa umbiko engqungqutheleni ye-Heisenbug 2020 Piter. Ngizokutshela hhayi kuphela ukuthi ungagwema kanjani amaphutha lapho ulungiselela idatha yokuhlola, kodwa futhi wabelane ngezimfihlo zami zokusebenza namasethi wedatha kuzinhlelo zokusebenza ze-Java!

Source: www.habr.com