Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Nthawi zambiri ndimayenera kupanga mapaipi opangira ntchito zomanga ku Java. Nthawi zina ndi gwero lotseguka, nthawi zina si. Posachedwa ndaganiza zoyesa kusuntha zina mwazosungira zanga kuchokera ku Travis-CI ndi TeamCity kupita ku GitHub Actions, ndipo izi ndi zomwe zidatulukamo.

Kodi tipanga makina otani?

Choyamba, tifunika pulojekiti yomwe tidzangopanga zokha, tiyeni tipange pulogalamu yaying'ono mu Spring boot / Java 11 / Maven. Pazolinga za nkhaniyi, sitikhala ndi chidwi ndi malingaliro ogwiritsira ntchito konse; zomanga zozungulira pulogalamuyi ndizofunikira kwa ife, kotero wowongolera wa REST API wosavuta adzatikwanira.

Mutha kuwona magwero apa: github.com/antkorwin/github-actions Magawo onse omanga mapaipi akuwonekera pazopempha zokoka polojekitiyi.

JIRA ndi kupanga

Ndikoyenera kunena kuti nthawi zambiri timagwiritsa ntchito JIRA ngati tracker, kotero tiyeni tipange gulu lapadera la polojekitiyi ndikuwonjezera zoyamba pamenepo:

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Pambuyo pake tibwereranso kuzinthu zosangalatsa zomwe JIRA ndi GitHub angapereke pamodzi.

Timakonza makonzedwe a polojekitiyi

Ntchito yathu yoyeserera imapangidwa kudzera pa maven, kotero kuimanga ndikosavuta, chomwe timafunikira ndi phukusi loyera la mvn.

Kuti tichite izi pogwiritsa ntchito Github Actions, tidzafunika kupanga fayilo m'malo ofotokozera momwe timagwirira ntchito, izi zitha kuchitika ndi fayilo ya yml wamba, sindinganene kuti ndimakonda "yml programming", koma tingachite chiyani - timachita mu .github/ directory workflow/ file build.yml mmene tidzafotokozera zochita pomanga master nthambi:

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 - ichi ndi kufotokozera za chochitika chomwe script yathu idzayambitsidwe.

pa: pull_request/push - zikuwonetsa kuti mayendedwe amtunduwu amayenera kukhazikitsidwa nthawi iliyonse kukankhira kukankhidwa kwa mbuye ndikukokera zopempha zikupangidwa.

Apa ndikufotokozera za ntchitozo (ntchito) ndi njira zochitira (masitepe) pa ntchito iliyonse.

akuthamanga-pa - apa titha kusankha chandamale OS, modabwitsa, mutha kusankha Mac OS, koma pazosungira zachinsinsi izi ndizokwera mtengo (poyerekeza ndi Linux).

ntchito zimakupatsani mwayi wogwiritsanso ntchito zina, mwachitsanzo, kugwiritsa ntchito zochita/kukhazikitsa-java zomwe timayika chilengedwe cha Java 11.

Ndi chithandizo cha ndi titha kufotokozera magawo omwe timayambira nawo, makamaka awa ndi mikangano yomwe idzaperekedwe.

Zomwe zatsala ndikuyendetsa ntchito yomanga ndi Maven: run: mvn -B clean package mbendera -B akuti timafunikira mawonekedwe osalumikizana kuti maven mwadzidzidzi asafune kutifunsa kanthu

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Zabwino! Tsopano, nthawi iliyonse mukadzipereka kwa mbuye, ntchito yomanga imayamba.

Mayeso aatomatiki amayambitsidwa

Msonkhano ndi wabwino, koma zenizeni, polojekiti ikhoza kusonkhanitsidwa bwino, koma osagwira ntchito. Chifukwa chake, sitepe yotsatira ndikungoyendetsa mayesowo. Kuphatikiza apo, ndizosavuta kuyang'ana zotsatira zakupambana mayeso mukamachita kuwunika kwa PR - mukudziwa motsimikiza kuti mayesowo amadutsa ndipo palibe amene adayiwala kuyendetsa nthambi yawo asanaphatikizepo.

Tidzayesa mayeso popanga pempho lachikoka ndikuphatikizana ndi mbuye, ndipo nthawi yomweyo tidzawonjezera kupanga lipoti la code-coverage.

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

Kuphimba mayeso, ndimagwiritsa ntchito codecov molumikizana ndi jacoco plugin. codecov ili ndi zochita zake, koma ikufunika chizindikiro kuti igwire ntchito ndi pempho lathu kukoka:

${{ secrets.CODECOV_TOKEN }} - tidzawona kumanga uku kangapo, zinsinsi ndi njira yosungiramo zinsinsi ku GitHub, tikhoza kulembapo mawu achinsinsi / zizindikiro / makamu / urls ndi zina zomwe siziyenera kuphatikizidwa mu code repository base.

Mutha kuwonjezera kusinthika kwa zinsinsi pazosungidwa pa GitHub:

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Mutha kupeza chizindikiro pa kodi.io Pambuyo pa chilolezo kudzera pa GitHub, kuti muwonjezere pulojekiti yapagulu muyenera kungotsatira ulalo ngati uwu: Dzina la ogwiritsa la GitHub/[repo name]. Chosungira chachinsinsi chitha kuwonjezeredwa; kuti muchite izi, muyenera kupereka ufulu wa codecov pakugwiritsa ntchito mu Github.

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Onjezani pulogalamu yowonjezera ya jacoco ku fayilo ya 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>

Tsopano codecov bot ilowetsa chilichonse mwazopempha zathu ndikuwonjezera chithunzi chosinthira:

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Tiyeni tiwonjezere static analyzer

M'mapulojekiti anga ambiri otseguka ndimagwiritsa ntchito mtambo wa sonar posanthula ma code static, ndizosavuta kulumikizana ndi travis-ci. Chifukwa chake ndi sitepe yomveka mukasamukira ku GitHub Actions kuti muchite zomwezo. Msika wochitapo kanthu ndi chinthu chozizira, koma nthawi ino idanditsitsa pang'ono, chifukwa mwachizoloΕ΅ezi ndinapeza zomwe ndikufunikira ndikuziwonjezera pa ntchito. Koma zidapezeka kuti sonar sikuthandizira kugwira ntchito pakuwunika ma projekiti pa maven kapena gradle. Inde, izi zalembedwa muzolemba, koma ndani amawerenga?!

Sizotheka kudzera muzochita, chifukwa chake tizichita kudzera 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 - atha kupezeka pa sonarcloud.io ndipo muyenera kulembetsa izo mwachinsinsi. GITHUB_TOKEN - ichi ndi chizindikiro chomwe GitHub imapanga, mothandizidwa ndi sonarcloud[bot] adzatha kulowa mu Git kuti atisiyire mauthenga pazopempha.

Dsonar.projectKey - dzina la polojekiti mu sonar, mutha kuliwona pamakonzedwe a polojekiti.

Dsonar.bungwe - dzina la bungwe kuchokera ku GitHub.

Timapempha kukoka ndikudikirira sonarcloud[bot] kuti ibwere mu ndemanga:

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Kutulutsani kumasula

Kumangako kwakonzedwa, mayesero ayendetsedwa, ndipo tikhoza kumasula. Tiyeni tiwone momwe GitHub Actions ingathandizire kuwongolera kumasuka.

Kuntchito, ndili ndi mapulojekiti omwe ma code awo ali mu bitbucket (chilichonse chili ngati nkhaniyo "Ndimalemba ku bitbucket masana, kudzipereka ku GitHub usiku"). Tsoka ilo, bitbucket ilibe zida zowongolera zotulutsidwa. Ili ndi vuto, chifukwa pa kumasulidwa kulikonse muyenera kupanga pamanja tsamba mu confluence ndi kuponyera mbali zonse zikuphatikizidwa kumasulidwa kumeneko, fufuzani nyumba zachifumu za malingaliro, ntchito mu jira, amachita mu chosungira. Pali mwayi wambiri woti mulakwitse, mutha kuyiwala kena kake kapena kuyika china chake chomwe chidatulutsidwa kale, nthawi zina sizikudziwika bwino kuti ndi chiyani chomwe mungagawire kukoka ngati - ndi mawonekedwe kapena kukonza zolakwika, kapena kuyesa kuyesa, kapena chinachake cha zomangamanga .

Kodi zochita za GitHub zingatithandize bwanji? Pali chochita chachikulu - chojambulira chotulutsa, chimakupatsani mwayi wokhazikitsa template yamafayilo omasulira kuti mukhazikitse magulu a zopempha kukoka ndikuziyika zokha mufayilo yamanotsi:

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Chitsanzo chokhazikitsa lipoti (.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

Onjezani zolemba kuti mutulutse (.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 }}

Zopempha zonse zokoka kuyambira pano zidzasonkhanitsidwa muzolemba zotulutsa zokha - zamatsenga!

Apa funso likhoza kuwuka: bwanji ngati opanga aiwala kuyika ma tag mu PR? Ndiye sizikudziwikiratu kuti muyike gulu liti, ndipo mudzayeneranso kuthana nazo pamanja, ndi PR iliyonse padera. Kuti tikonze vutoli, titha kugwiritsa ntchito chinthu china - chotsimikizira chizindikiro - chimayang'ana kupezeka kwa ma tag pa pempho lachikoka. Ngati palibe ma tag ofunikira, ndiye kuti chekeyo idzalephera ndipo tiwona uthenga wonena za izi muzopempha zathu zokoka.

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'

Tsopano pempho lililonse kukoka liyenera kulembedwa ndi chimodzi mwama tag: mtundu: kukonza, mtundu: mawonekedwe, mtundu: zolemba, mtundu: mayeso, mtundu: config.

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Ndemanga zodziwikiratu zopempha kukoka

Popeza tidakhudza mutu wotero ngati ntchito yogwira ntchito ndi zopempha zokoka, ndikofunikira kuyankhula za chochita ngati cholembera, chimayika ma tag mu PR kutengera mafayilo omwe asinthidwa. Mwachitsanzo, titha kuyika chizindikiro ngati [kumanga] pempho lililonse lokoka lomwe lili ndi zosintha m'ndandanda .github/workflow.

Kulumikizana ndikosavuta:

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

Tikufunanso fayilo yofotokoza makalata omwe ali pakati pa maupangiri a polojekiti ndi mitu yofunsira kukoka:

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

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

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

theme:documentation:
  - "docs/**"

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

Sindinapambane poyanjanitsa zomwe zimangoyika zilembo pazofunsira kukoka ndikuchita zomwe zimayang'ana kupezeka kwa zilembo zofunika; match-label safuna kuwona zolemba zomwe zawonjezeredwa ndi bot. Zikuwoneka zosavuta kulemba zochita zanu zomwe zikuphatikiza magawo onse awiri. Koma ngakhale mu mawonekedwe awa ndizosavuta kugwiritsa ntchito; muyenera kusankha cholembera pamndandanda popanga kukoka.

Yakwana nthawi yotumiza

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Ndidayesa njira zingapo zotumizira kudzera pa GitHub Actions (kudzera ssh, kudzera pa scp, ndikugwiritsa ntchito docker-hub), ndipo nditha kunena kuti, mwina, mupeza njira yokwezera binary ku seva, ngakhale payipi yanu yokhota. ndi.

Ndidakonda mwayi wosunga zida zonse pamalo amodzi, ndiye tiyeni tiwone momwe tingatumizire ku GitHub Packages (ichi ndi chosungiramo zinthu zamabina, npm, mtsuko, docker).

Script yopangira chithunzi cha docker ndikuchisindikiza mu 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 }}"

Choyamba, tiyenera kupanga fayilo ya JAR ya ntchito yathu, pambuyo pake timawerengera njira yopita ku GitHub docker registry ndi dzina la fano lathu. Pali zanzeru zingapo pano zomwe sitinapezebe:

  • zomangamanga monga: echo ":: set-output name=NAME::VALUE" amakulolani kuti muyike mtengo wa kusintha mu sitepe yamakono, kuti iwerengedwe muzinthu zina zonse.
  • mutha kupeza mtengo wa zosinthika zomwe zakhazikitsidwa mu sitepe yapitayi kudzera pachizindikiritso cha sitepe iyi: ${{step.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Zosintha za GITHUB_REPOSITORY zimasunga dzina lankhokwe ndi mwini wake ("mwini/repo-name"). Kuti tidule chilichonse pamzerewu kupatula dzina lankhokwe, tigwiritsa ntchito mawu akuti bash: ${GITHUB_REPOSITORY#*/}

Kenako tiyenera kupanga chithunzi cha docker:

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

Lowani ku registry:

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

Ndipo sindikizani chithunzicho ku GitHub Packages Repository:

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

Kuti tiwonetse mtundu wa chithunzicho, timagwiritsa ntchito manambala oyamba kuchokera ku SHA hash ya kudzipereka - GITHUB_SHA palinso ma nuances apa, ngati mupanga zomanga izi osati pophatikizana kukhala master, komanso molingana ndi kukoka kopempha. chochitika, ndiye kuti SHA sichingafanane ndi hashi yomwe tikuwona m'mbiri ya git, chifukwa zochita / zotuluka zimapanga hashi yakeyake kuti ipewe kuchitapo kanthu mu PR.

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Ngati zonse zikuyenda bwino, ndiye kuti mutsegule gawo la phukusi (https://github.com/antkorwin/github-actions/packages) m'nkhokwe, muwona chithunzi chatsopano cha docker:

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Kumeneko mutha kuwonanso mndandanda wamitundu yazithunzi za docker.

Zomwe zatsala ndikukonza seva yathu kuti igwire ntchito ndi registry iyi ndikuyambiranso ntchitoyo. Mwina ndilankhula za momwe ndingachitire izi kudzera mu systemd nthawi ina.

Kuwunikira

Tiyeni tiwone njira yosavuta yamomwe mungayang'anire thanzi lathu pogwiritsa ntchito GitHub Actions. Ntchito yathu ya boot ili ndi actuator, kotero sitifunika ngakhale kulemba API kuti tiwone momwe ilili; tachita kale zonse kwa aulesi. Mukungofunika kukoka wolandirayo: 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"}

Zomwe tikufunikira ndikulemba ntchito kuti tiyang'ane seva pogwiritsa ntchito cron, ndipo ngati mwadzidzidzi sichiyankha ife, ndiye kuti tidzatumiza chidziwitso kudzera pa telegalamu.

Choyamba, tiyeni tiwone momwe tingayendetsere cron workflow:

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

Ndizosavuta, sindingakhulupirire kuti mu Github mutha kupanga zochitika zomwe sizikugwirizana ndi ma webhooks konse. Tsatanetsatane muzolembedwa: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Tiyeni tiwone momwe seva ilili pamanja pogwiritsa ntchito ma 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"

Choyamba, timasunga muzosintha zomwe seva idayankha pempholi, mu sitepe yotsatira timayang'ana kuti udindo ndi UP ndipo, ngati sizili choncho, ndiye kuti timatuluka ndi cholakwika. Ngati mukufunikira "kupitirira" kuchitapo kanthu ndi manja anu, ndiye tulukani 1 - chida choyenera.

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

Timatumiza ku telegalamu kokha ngati zomwe zalephera pa sitepe yapitayi. Kutumiza uthenga timagwiritsa ntchito appleboy/telegraph-action; mutha kuwerenga momwe mungapezere chizindikiro cha bot ndi id yochezera pazolembedwa: github.com/appleboy/telegram-action

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Musaiwale kulemba zinsinsi pa Github: URL ya seva ndi zizindikiro za telegalamu bot.

Nyimbo ya bonasi - JIRA kwa aulesi

Ndinalonjeza kuti tidzabwerera ku JIRA, ndipo tabwerera. Nthawi zambiri ndakhala ndikuwona zomwe zikuchitika poyimilira pomwe opanga adapanga mawonekedwe, adaphatikiza nthambi, koma adayiwala kukokera nkhaniyi mu JIRA. Zachidziwikire, ngati zonsezi zidachitika pamalo amodzi, zitha kukhala zosavuta, koma kwenikweni timalemba kachidindo mu IDE, kuphatikiza nthambi mu bitbucket kapena GitHub, ndikukokera ntchitozo ku Jira, chifukwa cha izi tiyenera kutsegula mazenera atsopano. , nthawi zina lowani kachiwiri ndi etc. Mukakumbukira bwino zomwe muyenera kuchita kenako, ndiye kuti palibe chifukwa chotsegula bolodi kachiwiri. Chifukwa chake, m'mawa pakuyimilira muyenera kuwononga nthawi yokonzanso gulu lantchito.

GitHub itithandizanso pa ntchitoyi; poyambira, titha kukokera nkhani zokha mu code_review column tikapereka pempho kukoka. Zomwe muyenera kuchita ndikutsata msonkhano wotchula nthambi:

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

mwachitsanzo, ngati chinsinsi cha polojekiti "GitHub Actions" ndi GA, ndiye GA-8-jira-bot ikhoza kukhala nthambi yoyendetsera ntchito ya GA-8.

Kuphatikizana ndi JIRA kumagwira ntchito kuchokera ku Atlassian, siangwiro, ndiyenera kunena kuti ena mwa iwo sanandigwire ntchito konse. Koma tidzakambirana okhawo omwe akugwira ntchito ndikugwiritsidwa ntchito mwakhama.

Choyamba muyenera kulowa mu JIRA pogwiritsa ntchito izi: 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 }}

Kuti muchite izi, muyenera kupeza chizindikiro ku JIRA, momwe mungachitire izi zafotokozedwa apa: confluence.atlassian.com/cloud/api-tokens-938839638.html

Timachotsa chizindikiritso cha ntchito ku dzina la nthambi:

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

Ngati mungafufuze pamsika wa GitHub, mutha kupeza chochita pa ntchitoyi, koma ndidayenera kulemba zomwezo pogwiritsa ntchito grep pogwiritsa ntchito dzina la nthambi, chifukwa izi kuchokera ku Atlassian sizinafune kugwira ntchito yanga mwanjira iliyonse. , kuti mudziwe chomwe chinali cholakwika pamenepo - motalika kuposa kuchita zomwezo ndi manja anu.

Chotsalira ndikusunthira ntchitoyi kugawo la "Code review" popanga pempho kukoka:

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

Pali chochita chapadera pa izi pa GitHub, zonse zomwe zimafunikira ndi ID yomwe idapezeka mu gawo lapitalo ndi chilolezo ku JIRA chomwe tidachita pamwambapa.

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Momwemonso, mutha kukoka ntchito mukaphatikizana ndi mbuye, ndi zochitika zina kuchokera ku GitHub workflow. Nthawi zambiri, zonse zimatengera malingaliro anu komanso chikhumbo chodzipangira ma chizolowezi.

anapezazo

Ngati muyang'ana chithunzithunzi cha DEVOPS chapamwamba, taphimba magawo onse, kupatula mwina kugwira ntchito, ndikuganiza ngati mutayesa, mungapezepo kanthu pamsika kuti muphatikizidwe ndi dongosolo la desiki yothandizira, kotero tidzaganiza kuti payipi inatembenuka. kuti ikhale yokwanira ndipo ziganizo zitha kukhazikitsidwa potengera kagwiritsidwe ntchito kake.

Zozungulira za gehena ndi GitHub Actions (kumanga payipi ya CI/CD ya projekiti ya Java)

Zotsatira:

  • Msika wokhala ndi zochita zokonzeka nthawi zonse, izi ndizabwino kwambiri. Ambiri aiwo, mutha kuyang'ananso gwero kuti mumvetsetse momwe mungathetsere vuto lofananalo kapena kutumiza pempho kwa wolemba mwachindunji munkhokwe ya GitHub.
  • Kusankha nsanja yomwe mukufuna kusonkhana: Linux, mac os, windows ndi chinthu chosangalatsa kwambiri.
  • Maphukusi a Github ndi chinthu chabwino, ndizosavuta kusunga maziko onse pamalo amodzi, simuyenera kuyendayenda kudzera m'mawindo osiyanasiyana, chirichonse chiri mkati mwa utali wa mbewa imodzi kapena ziwiri ndipo zimagwirizanitsidwa bwino ndi GitHub Zochita. Thandizo la registry ya Docker mu mtundu waulere nawonso ndi mwayi wabwino.
  • GitHub imabisa zinsinsi muzolemba zomanga, kotero kuzigwiritsa ntchito kusunga mapasiwedi ndi zizindikiro sizowopsa. Pazoyeserera zanga zonse, sindinathe kuwona chinsinsi mu mawonekedwe ake oyera mu console.
  • Zaulere pamapulojekiti a Open Source

Wotsatsa:

  • YML, chabwino, sindimamukonda. Mukamagwira ntchito ngati imeneyi, uthenga wodziwika kwambiri womwe ndili nawo ndi "konza yml format", nthawi zina mumayiwala kuyika tabu kwinakwake, nthawi zina mumalemba pamzere wolakwika. Kawirikawiri, kukhala kutsogolo kwa chinsalu ndi protractor ndi wolamulira sizomwe zimakhala zosangalatsa kwambiri.
  • KUSINTHA, kusokoneza kayendedwe ka ntchito, kuyendetsa ntchito yomanganso, ndikutulutsa ku kontrakitala sikophweka nthawi zonse, koma ndi gawo la "mwatha"; mumazolowera kugwira ntchito ndi IDEA yosavuta, mukatha kukonza chilichonse. .
  • Mutha kulemba zomwe mwachita pachilichonse ngati mutazikulunga mu Docker, koma javascript yokha ndiyomwe imathandizidwa, inde iyi ndi nkhani yokoma, koma ndingakonde china m'malo mwa js.

Ndiroleni ndikukumbutseni kuti malo okhala ndi zolemba zonse ali pano: github.com/antkorwin/github-actions

Sabata yamawa ndikhala ndikuchita nawo lipoti pa msonkhano wa Heisenbug 2020 Piter. Sindidzakuuzani momwe mungapewere zolakwika pokonzekera deta yoyesera, komanso ndikugawana zinsinsi zanga zogwira ntchito ndi ma seti a data mu mapulogalamu a Java!

Source: www.habr.com