Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Inta badan waa inaan dhistaa dhuumaha mashaariicda dhismaha ee Java. Mar waa il furan, marna ma aha. Waxaan dhawaan go'aansaday in aan isku dayo in aan ka raro qaar ka mid ah kaydkayga Travis-CI iyo TeamCity ilaa GitHub Actions, tanina waa waxa ka soo baxay.

Maxaan otomaatig u noqon doonaa?

Marka hore, waxaan u baahanahay mashruuc aan si otomaatig ah u sameyn doono, aan ku sameyno codsi yar oo ku jira boot boot / Java 11 / Maven. Ujeedooyinka maqaalkan, ma danayn doono gabi ahaanba macquulnimada codsiga; kaabayaasha ku xeeran arjiga ayaa muhiim noo ah, sidaa darteed xakamaynta REST API fudud ayaa nagu filan.

Waxaad ka arki kartaa ilaha halkan: github.com/antkorwin/github-actions Dhammaan heerarka dhismaha dhuumaha waxay ka muuqdaan codsiyada jiidashada mashruucan.

JIRA iyo qorsheynta

Waxaa habboon in la sheego in aan inta badan u isticmaalno JIRA sida raadraaca arrimaha, markaa aynu u samayno guddi gaar ah mashruucan oo aan ku darno arrimaha ugu horreeya ee halkaas:

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Wax yar ka dib waxaan ku laaban doonaa waxa xiisaha leh ee JIRA iyo GitHub ay bixin karaan marka la isku daro.

Waxaan si otomaatig ah u samaynaa kulanka mashruuca

Mashruucayada tijaabada ah waxaa lagu dhisay maven, marka dhismuhu waa mid fudud, waxa kaliya ee aan u baahanahay waa xirmada mvn nadiif ah.

Si tan loo sameeyo iyadoo la adeegsanayo Github Actions, waxaan u baahan doonaa inaan abuurno fayl ku jira kaydka oo qeexaya socodka shaqadeena, tan waxaa lagu samayn karaa faylka yml caadiga ah, ma dhihi karo waxaan jeclahay " yml programming ", laakiin maxaan sameyn karnaa - waxaanu ku samaynaa .github/ directory workflow/ file build.yml kaas oo aanu ku qeexi doono ficilada marka la dhisayo laanta sare:

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 - tani waa sharraxaad ku saabsan dhacdada qoraalkayaga lagu bilaabi doono.

on: pull_request/riix - waxay muujinaysaa in socodka shaqadu uu u baahan yahay in la bilaabo mar kasta oo la riixo sayidkii oo codsiyo jiid la abuuro.

Hoos waxaa ku qoran sharaxaad ku saabsan hawlaha (shaqo) iyo talaabooyinka fulinta (talaabooyinka) hawl kasta.

ordaya-on - halkan waxaan dooran karnaa OS bartilmaameedka, la yaab leh, xitaa waxaad dooran kartaa Mac OS, laakiin kaydadka gaarka ah tani waa qaali (marka la barbardhigo Linux).

isticmaalka Waxay kuu ogolaanaysaa inaad dib u isticmaasho falalka kale, tusaale ahaan, addoo isticmaalaya action/setup-java action waxaan ku rakibnaa deegaanka Java 11.

Iyada oo gargaar ah la waxaan qeexi karnaa halbeegyada aan ku bilaabayno ficilka, asal ahaan kuwani waa doodaha loo gudbin doono ficilka.

Waxa hadhay oo dhan waa in lagu socodsiiyo dhismaha Maven: run: mvn -B clean package calanka -B ayaa sheegay in aan u baahanahay hab aan is-dhexgal ahayn si maven-ga si lama filaan ah aanu u rabin inuu wax na waydiiyo

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Wayn! Hadda, mar kasta oo aad u heellan tahay sayidkiisa, dhismuhu wuxuu bilaabmayaa.

Si otomaatig ah u bilaabma tijaabada

Isku-duubnidu waa wanaagsan yahay, laakiin dhab ahaantii, mashruuc si badbaado leh ayaa loo soo ururin karaa, laakiin ma shaqeynayo. Sidaa darteed, tallaabada xigta waa in si otomaatig ah loo sameeyo imtixaannada. Intaa waxaa dheer, way ku habboon tahay in la eego natiijooyinka gudbinta imtixaannada marka aad dib u eegis ku samaynayso PR - waxaad si hubaal ah u ogtahay in imtixaanadu ay gudbaan oo qofna ma iloobin in uu maamulo laantiisa ka hor inta uusan samayn isku-darka.

Waxaan samayn doonaa imtixaanno marka la abuurayo codsi jiid oo aan ku biirno sayidkii, isla mar ahaantaana waxaan ku dari doonaa abuurista warbixin ku saabsan daboolka-koodka.

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

Si aan u daboosho imtixaanada, waxaan isticmaalaa codecov iyadoo la kaashanaysa jacoco plugin. Codecov waxay leedahay ficil u gaar ah, laakiin waxay u baahan tahay calaamad si ay ugu shaqeyso codsigeena jiidista:

${{ secrets.CODECOV_TOKEN }} - Waxaan arki doonaa dhismahan wax ka badan hal mar, siraha waa hab lagu kaydiyo siraha GitHub, waxaan ku qori karnaa furaha sirta ah / calaamadaha / martigeliyaha / url iyo xogta kale ee aan lagu darin saldhigga koodhka kaydka.

Waxaad ku dari kartaa doorsoome siraha ku jira goobaha kaydka ee GitHub:

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Waxaad calaamad ka heli kartaa codecov.io Ka dib oggolaanshaha iyada oo loo marayo GitHub, si aad ugu darto mashruuc dadweyne kaliya waxaad u baahan tahay inaad raacdo isku xirka sidan oo kale ah: Magaca isticmaalaha GitHub/[repo name]. Kayd gaar ah ayaa sidoo kale lagu dari karaa; si tan loo sameeyo, waxaad u baahan tahay inaad siiso xuquuqda codecov codsiga ku jira Github.

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Ku dar plugin jacoco faylka 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>

Hadda codecov bot ayaa geli doona mid kasta oo ka mid ah codsiyadayada jiidista oo ku dari doona garaaf beddelka caymiska:

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Aynu ku darno falanqeeye taagan

Inta badan mashaariicda isha furan waxaan u isticmaalaa daruuraha sonar ee falanqaynta koodhka taagan, way fududahay in lagu xidho travis-ci. Markaa waa tallaabo macquul ah markaad u guurayso GitHub Actions si aad sidaas oo kale samayso. Suuqa wax qabadku waa wax aad u fiican, laakiin markan wax yar ayay iga daysay, sababtoo ah caado ahaan waxaan helay ficilkii aan u baahnaa oo waxaan ku daray socodka shaqada. Laakiin waxa soo baxday in sonar aanu taageersanayn ka shaqaynta falanqeynta mashaariicda maven ama gradle. Dabcan, tani waxay ku qoran tahay waraaqaha, laakiin yaa akhriya?!

Suuragal maaha ficil, markaa waxaanu ku samayn doonaa mvn plugin:

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 - waxaa laga heli karaa at sonarcloud.io oo waxaad u baahan tahay inaad ku diiwaan geliso sirta. GITHUB_TOKEN - tani waa calaamad ku dhex dhisan oo GitHub ay dhaliso, iyadoo la kaashanayo sonarcloud[bot] ay awood u yeelan doonto inay gasho Git si ay nooga tagto fariimaha codsiyada jiidista.

Dsonar.projectKey - magaca mashruuca ee sonar, waxaad ka arki kartaa goobaha mashruuca.

Dsonar.ururka - magaca ururka GitHub.

Waxaan sameynaa codsi jiid waxaanan sugeynaa sonarcloud[bot] inuu soo galo faallooyinka:

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Maareynta sii daynta

Dhismihii waa la habeeyey, imtixaanadii waa la sameeyay, waxaanan samayn karnaa sii dayn. Aynu eegno sida GitHub Actions ay uga dhigi karto maamulka siideynta mid aad u fudud.

Shaqada, waxaan haystaa mashruucyo saldhigoodu yahay bucket-ka (wax walbaa waa sida sheekadaas "Waxaan u qoraa qashin-qubka inta lagu jiro maalinta, ballan-qaadka GitHub habeenkii"). Nasiib darro, bitbucket ma laha qalab lagu maamulo siideynta oo ku dhex dhisan. Tani waa dhibaato, sababtoo ah sii deyn kasta waa inaad gacanta ku sameysaa bog isku dhafan oo aad ku tuurtaa dhammaan sifooyinka ku jira sii deynta halkaas, ka raadi daaraha maskaxda, hawlaha jira, waxay sameeyaan kaydka. Waxaa jira fursado badan oo aad ku khaldami karto, waxaad illoobi kartaa shay ama geli kartaa shay hore loo sii daayay markii ugu dambeysay, mararka qaarkood si fudud ma cadda waxa loo kala saaro codsiga jiidista - ma sifo ama hagaajin cayayaanka, ama imtixaannada tafatirka, ama wax kaabayaal ah .

Sidee falalka GitHub noo caawin karaan? Waxaa jira ficil aad u fiican - qabyo-qaadaha sii-deynta, waxay kuu oggolaaneysaa inaad dejiso qaab-dhismeedka faylka qoraallada siideynta si aad u dejiso qaybaha codsiyada jiidka oo si toos ah ugu kooxeyso faylka qoraallada siideynta:

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Tusaalaha tusaalaha ah ee dejinta warbixin (.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

Ku dar qoraal si aad u abuurto qoraal qabyo ah (.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 }}

Dhammaan codsiyada jiidashada hadda ka dib waxaa lagu soo ururin doonaa qoraallada sii deynta si toos ah - sixir!

Halkan su'aasha ayaa laga yaabaa inay soo baxdo: ka waran haddii horumariyayaashu ay illoobaan inay dhejiyaan PR? Markaa ma cadda qaybta la gelinayo, mar labaadna waa inaad gacanta ku qabataa, iyadoo PR kastaa si gaar ah ula macaamilayso. Si loo xaliyo dhibaatadan, waxaan isticmaali karnaa ficil kale - xaqiijiye calaamad - waxay hubisaa joogitaanka summada ee codsiga jiidista. Haddii aysan jirin calaamado loo baahan yahay, markaa jeeggu wuu guuldareysan doonaa waxaanan ku arki doonaa fariin tan ku saabsan codsigayaga jiidista.

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'

Hadda codsi kasta oo jiidis ah waa in lagu calaamadeeyaa mid ka mid ah tags: type: fix, type:features, type:documentation, type: tests, type:config.

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Si toos ah u faahfaahinta codsiyada jiidista

Tan iyo markii aan taabanay mawduucan oo kale sida shaqo wax ku ool ah oo leh codsiyada jiidista, waxaa habboon in laga hadlo ficilka noocaas ah sida calaamadeeyaha, waxay ku dhejisaa calaamado PR oo ku salaysan faylasha la beddelay. Tusaale ahaan, waxaan u calaamadin karnaa sida [dhis] codsi kasta oo jiid ah oo ka kooban isbeddellada hagaha .github/workflow.

Ku xidhiddu waa wax fudud:

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

Waxa kale oo aanu u baahanahay fayl qeexaya xidhiidhka u dhexeeya hagaha mashruuca iyo mawduucyada codsiga jiidista:

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

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

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

theme:documentation:
  - "docs/**"

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

Kuma aan guulaysan in aan isku xidho ficilka si toos ah u dhejiya summadaha codsiyada jiidista iyo ficilka hubinaya joogitaanka sumadaha loo baahan yahay; summada-ku-taabashada ma rabo in la arko sumadaha uu ku daray botku. Waxay u muuqataa inay fududahay inaad qorto ficilkaaga oo isku daraya labada marxaladood. Laakiin xitaa foomkan aad ayey ugu habboon tahay in la isticmaalo; waxaad u baahan tahay inaad liiska ka doorato calaamad marka la abuurayo codsi jiid.

Waa waqtigii la diri lahaa

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Waxaan isku dayay dhowr ikhtiyaar oo diris ah iyada oo loo marayo GitHub Actions (iyada oo loo marayo ssh, iyada oo loo marayo scp, iyo isticmaalka docker-hub), waxaanan dhihi karaa, waxay u badan tahay, waxaad heli doontaa hab aad ku dhejiso binary-ga server-ka, iyada oo aan loo eegin sida qalloocan ee dhuumahaaga waa

Waxaan jeclaystay ikhtiyaarka ah in dhammaan kaabayaasha hal meel lagu hayo, markaa aynu eegno sida loo geeyo Xirmooyinka GitHub (tani waa kaydka nuxurka binary, npm, jar, docker).

Script si loo dhiso sawirka docker oo lagu daabaco Xirmooyinka GitHub:

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

Marka hore, waxaan u baahanahay inaan dhisno faylka JAR ee codsigeena, ka dib markaa waxaan xisaabineynaa wadada loo maro diiwaanka GitHub docker iyo magaca sawirkayaga. Waxaa jira dhowr farsamooyin oo aynaan weli la kulmin:

  • dhisme sida: echo "::set-output name=NAME::VALUE" wuxuu kuu ogolaanayaa inaad dejiso qiimaha doorsoomayaasha tallaabada hadda socota, si markaas loogu akhriyo dhammaan tallaabooyinka kale.
  • waxaad ku heli kartaa qiimaha doorsoomaha lagu dejiyay talaabadii hore adiga oo isticmaalaya tilmaanta talaabadan: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Doorsoomiyaha caadiga ah ee GITHUB_REPOSITORY waxa uu kaydiyaa magaca kaydka iyo mulkiilaha ("milkiilaha/magaca magaca"). Si aan wax walba uga goyno xariiqan marka laga reebo magaca kaydka, waxaanu isticmaali doonaa bash syntax: ${GITHUB_REPOSITORY#*/}

Marka xigta waxaan u baahanahay inaan dhisno sawirka docker:

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

Soo gal diiwaanka:

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

Oo u daabac sawirka GitHub Baakadaha Kaydka:

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

Si loo muujiyo nooca sawirka, waxaan isticmaalnaa tirooyinka ugu horreeya ee SHA hash ee ballan-qaadka - GITHUB_SHA sidoo kale waxaa jira waxyaabo halkan ku yaal, haddii aad dhisto dhismayaal noocaas ah ma aha oo kaliya markaad ku biirto sayid, laakiin sidoo kale sida ku xusan abuurista codsi jiid dhacdo, ka dib SHA waxaa laga yaabaa inaysan u dhigmin xashiishka aan ku aragno taariikhda git, sababtoo ah ficilada/ficilka hubinta waxay sameeyaan xashiish u gaar ah si ay uga fogaato falalka dhimista ee PR.

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Haddii wax waliba si fiican u shaqeeyeen, ka dib furitaanka qaybta xirmooyinka (https://github.com/antkorwin/github-actions/packages) ee kaydka, waxaad arki doontaa sawir docker cusub:

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Halkaa waxa kale oo aad ka arki kartaa liiska noocyada sawirka docker.

Waxa hadhay oo dhan waa in la habeeyo server-keena si uu ula shaqeeyo diiwaankan oo aan dib u bilaabo adeegga. Waxay u badan tahay inaan ka hadlo sida tan loo sameeyo iyada oo loo marayo systemd waqti kale.

Kormeerka

Aynu eegno ikhtiyaar fudud oo ku saabsan sida loo sameeyo baaritaan caafimaad codsigeena annagoo adeegsanayna GitHub Actions. Codsigayaga boot wuxuu leeyahay hawl-geliyaha, markaa xitaa uma baahnid inaan qorno API si aan u hubinno xaaladdeeda; waxaan horayba u sameynay wax walba oo caajis ah. Kaliya waxaad u baahan tahay inaad jiidato martigeliyaha: 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"}

Dhammaan waxaan u baahanahay waa inaan qorno hawl si aan u hubinno server-ka iyadoo la adeegsanayo cron, iyo haddii si lama filaan ah uu noogu jawaabo, ka dibna waxaan u soo diri doonaa ogeysiis telegram.

Marka hore, aan ogaano sida loo socodsiiyo socodka shaqada cron:

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

Way fududahay, xitaa ma rumaysan karo in Github aad ku abuuri karto dhacdooyin aan ku habboonayn webhooks gabi ahaanba. Faahfaahinta ayaa ku jirta dukumeentiyada: help.github.com/en/actions/reference/events-that-trigger-workflows#schedule-events-schedule

Aynu gacanta ku hubinno heerka serferka anagoo adeegsanayna 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"

Marka hore, waxaan ku keydineynaa doorsoome waxa uu server-ku ka jawaabay codsiga, tallaabada xigta waxaan hubineynaa in xaaladdu tahay UP, haddii aysan taasi ahayn kiiska, ka dibna waxaan ka baxnaa qalad. Haddii aad u baahan tahay inaad gacmahaaga ku "ku xad gudubto" ficil, markaa bixitaanka 1 - hub ku habboon.

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

Waxaan u dirnaa telegram kaliya haddii ficilku ku guuldareysto tallaabadii hore. Si aan fariin u dirno waxaan isticmaalnaa appleboy/telegram-action; waxaad ka akhrisan kartaa sida loo helo calaamadda bot iyo aqoonsiga ku sheekeysiga dukumeentiga: github.com/appleboy/telegram-action

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Ha iloobin inaad ku qorto siraha Github: URL ee server-ka iyo calaamadaha bot telegram.

track Bonus - JIRA caajisnimada

Waxaan balan qaaday in aan ku laaban doono JIRA, waana soo laabanay. Boqollaal jeer ayaan arkay xaalad taagan marka ay horumariyayaashu sameeyeen muuqaal, oo ay ku biireen laan, laakiin waxay illoobeen inaan arrinta u jiido JIRA. Dabcan, haddii waxaas oo dhan lagu sameeyo hal meel, way sahlanaan lahayd, laakiin dhab ahaantii waxaan ku qornaa koodhka IDE-ga, ku darso laamaha bitbucket ama GitHub, ka dibna ku jiido hawlaha Jira, taas awgeed waxaan u baahanahay inaan furno daaqado cusub. , mararka qaarkood geli mar kale iyo iwm. Markaad si fiican u xasuusato waxa aad u baahan tahay inaad sameyso marka xigta, markaa ma jirto wax faa'iido ah inaad mar kale furto guddiga. Natiijo ahaan, subaxdii markaad istaagto waxaad u baahan tahay inaad wakhti ku qaadato inaad cusboonaysiiso guddiga hawsha.

GitHub sidoo kale waxay naga caawin doontaa hawshan joogtada ah; bilawga, waxaan si toos ah u jiidi karnaa arrimaha khaanadda code_review markaan soo gudbino codsi jiid. Waxa kaliya ee aad u baahan tahay inaad sameyso waa inaad raacdo heshiiska magacaabista laanta:

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

tusaale ahaan, haddii furaha mashruuca "GitHub Actions" uu yahay GA, markaa GA-8-jira-bot waxay noqon kartaa laan lagu fuliyo hawsha GA-8.

La-qabsiga JIRA wuxuu ku shaqeeyaa ficillada Atlassian, ma ahan kuwa qumman, waa inaan sheegaa in qaar ka mid ah aysan ii shaqeynin gabi ahaanba. Laakiin waxaan ka wada hadli doonaa kaliya kuwa sida dhabta ah u shaqeeya oo si firfircoon loo isticmaalo.

Marka hore waxaad u baahan tahay inaad gasho JIRA adoo isticmaalaya ficilka: 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 }}

Si tan loo sameeyo, waxaad u baahan tahay inaad hesho calaamad JIRA, sida tan loo sameeyo ayaa halkan lagu sharaxay: confluence.atlassian.com/cloud/api-tokens-938839638.html

Waxa aanu ka soo saarnay aqoonsiga hawsha magaca laanta:

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

Haddii aad ka raadiso suuqa GitHub, waxaad ka heli kartaa ficil hawshan, laakiin waa inaan qoro wax la mid ah anigoo isticmaalaya grep anigoo isticmaalaya magaca laanta, sababtoo ah ficilkan Atlassian ma uusan dooneynin inuu ka shaqeeyo mashruucayga sinaba. , si aad u ogaato waxa meeshaas ka khaldan - in ka badan in aad wax la mid ah gacmahaaga ku sameyso.

Waxa hadhay oo dhan waa in hawsha loo raro tiirka "Dib-u-eegis code" marka la abuurayo codsi jiid:

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

Waxa jira tallaabo gaar ah oo tan ah GitHub, waxa kaliya ee ay u baahan tahay waa aqoonsiga aqoonsiga ee lagu helay tallaabadii hore iyo oggolaanshaha JIRA ee aan kor ku samaynay.

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Si la mid ah, waxaad u jiidi kartaa hawlaha markaad ku biirto sayidkiisa, iyo dhacdooyinka kale ee socodka shaqada ee GitHub. Guud ahaan, waxay dhammaan ku xiran tahay male-awaalkaaga iyo rabitaanka inaad si toos ah u sameyso hababka caadiga ah.

natiijooyinka

Haddii aad eegto jaantuska caadiga ah ee DEVOPS, waxaanu daboolnay dhammaan marxaladaha, marka laga reebo in laga yaabo in la shaqeeyo, waxaan u maleynayaa haddii aad isku daydo, waxaad ka heli kartaa qaar ka mid ah ficillada suuqa ee isdhexgalka ee nidaamka miiska caawinta, markaa waxaan u qaadaneynaa in dhuumaha loo leexiyay. si qoto-dheer iyo gunaanad ayaa laga soo saari karaa iyadoo lagu saleynayo isticmaalkeeda.

Wareegyada cadaabta leh GitHub Actions (dhisidda dhuumaha CI/CD ee mashruuca Java)

Faa'iido:

  • Goobta suuqa oo leh ficillo diyaarsan oo loogu talagalay munaasabadaha oo dhan, tani waa mid aad u fiican. Intooda badan, waxaad sidoo kale eegi kartaa koodhka isha si aad u fahamto sida loo xalliyo mushkilad la mid ah ama aad codsi muuqaal ah ugu dhejiso qoraaga si toos ah kaydka GitHub.
  • Doorashada goobta la beegsanayo ee isu imaatinka: Linux, mac os, windows waa muuqaal xiiso leh.
  • Xirmooyinka Github waa shay aad u fiican, way ku habboon tahay in dhammaan kaabayaasha hal meel lagu hayo, uma baahnid inaad dhex marato daaqadaha kala duwan, wax walbaa waxay ku dhex jiraan radius hal ama laba gujis oo jiirka ah waxayna si fiican u dhexgalaan GitHub Actions. Taageerada diiwaangelinta Docker ee nooca bilaashka ah sidoo kale waa faa'iido wanaagsan.
  • GitHub waxay ku qarisaa siraha ku jira diiwaanka dhismaha, markaa u adeegsiga si loo kaydiyo ereyada sirta ah iyo calaamaduhu maaha wax cabsi leh. Intii lagu jiray dhammaan tijaabooyinkaygii, marna ma awoodin inaan arko sirta qaabkeeda saafiga ah ee console-ka.
  • Bilaash mashaariicda Isha Furan

Ogolaansho:

  • YML, si fiican, ma jecli isaga. Markaad la shaqeyneyso qulqulka noocaas ah, fariinta ugu caansan ee aan haysto waa "fix yml format", ka dib waxaad illowday inaad meel dhigto tab, ama waxaad ku qortaa xariiq khaldan. Guud ahaan, fadhiga hore ee shaashadda leh protractor iyo taliye ma aha waayo-aragnimada ugu fiican.
  • DEBUG, ka saarida qulqulka la samaynayo, dib-u-dhis ku samaynta, iyo soo saarista konsole-ku had iyo jeer maaha mid ku habboon, laakiin waa wax badan oo ka mid ah qaybta "waad dhaaftay"; waxaad isticmaashay inaad la shaqeyso IDEA ku habboon, markaad wax ka saari karto .
  • Waxaad ku qori kartaa ficilkaaga wax kasta haddii aad ku duubto Docker, laakiin Javascript kaliya ayaa asal ahaan lagu taageeray, dabcan tani waa arrin dhadhan, laakiin waxaan doorbidi lahaa wax kale halkii js.

Aan ku xasuusiyo in kaydka qoraallada oo dhan ay halkan taallo: github.com/antkorwin/github-actions

Toddobaadka soo socda waxaan la ciyaari doonaa warbixin shirka Heisenbug 2020 Piter. Waxaan kuu sheegi doonaa ma aha oo kaliya sida looga fogaado khaladaadka marka la diyaarinayo xogta tijaabada, laakiin sidoo kale waxaan la wadaagayaa sirtayda ku shaqeynta xogta xogta ee codsiyada Java!

Source: www.habr.com