Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Ndinowanzofanira kugadzira pombi yezvirongwa zvekuvaka muJava. Dzimwe nguva inzvimbo yakavhurika, dzimwe nguva haisi. Ini nguva pfupi yadarika ndakafunga kuyedza kufambisa mamwe ezvinyorwa zvangu kubva kuTravis-CI uye TeamCity kuenda kuGitHub Actions, uye izvi ndizvo zvakabuda mazviri.

Chii chatichaita otomatiki?

Chekutanga, isu tinoda purojekiti yatinozoita otomatiki, ngatiite diki application muChitubu boot / Java 11 / Maven. Nezvinangwa zvechinyorwa chino, isu hatisi kuzofarira iyo yekushandisa logic zvachose; zvivakwa zvakatenderedza application zvakakosha kwatiri, saka yakapusa REST API controller ichatikwanira.

Unogona kuona masosi pano: github.com/antkorwin/github-actions Matanho ese ekuvaka pombi anoratidzwa muzvikumbiro zvekudhonza zvepurojekiti iyi.

JIRA nekuronga

Zvakakodzera kuti titaure kuti isu tinowanzo shandisa JIRA sechinhu chinoteedzera tracker, saka ngatigadzire bhodhi rakasiyana repurojekiti iyi uye tiwedzere nyaya dzekutanga ipapo:

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Nguva diki gare gare tichadzokera kune izvo zvinonakidza zvinhu JIRA neGitHub zvinogona kupa musanganiswa.

Isu tinogadzirisa kuungana kweprojekiti

Yedu yekuyedza purojekiti inovakwa kuburikidza ne maven, saka kuivaka kuri nyore, chatinoda chete mvn yakachena package.

Kuti tiite izvi tichishandisa Github Zviito, tichada kugadzira faira mune repository inotsanangura mafambiro edu, izvi zvinogona kuitwa neyakajairwa yml faira, handikwanise kutaura kuti ndinoda "yml programming", asi chii chatingaite - tinozviita mu .github/ directory workflow/ file build.yml umo tichatsanangura zviito pakuvaka master bazi:

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 - iyi rondedzero yechiitiko icho script yedu ichavhurwa.

pa: pull_request/push - inoratidza kuti kufambiswa kwebasa uku kunofanirwa kutangwa pese panoitwa kusunda kuna tenzi uye kudhonza zvikumbiro zvinogadzirwa.

Inotevera rondedzero yemabasa (mabasa) uye matanho ekuita (matanho) pabasa rega rega.

kumhanya-mberi - pano isu tinogona kusarudza iyo yakananga OS, zvinoshamisa kuti unogona kusarudza Mac OS, asi pane zvakavanzika repositori izvi zvinodhura (zvichienzaniswa neLinux).

tizvishandise inokutendera kuti ushandisezve zvimwe zviito, semuenzaniso, kushandisa zviito/setup-java chiito isu tinoisa nharaunda yeJava 11.

Nekubatsirwa kwe ne isu tinokwanisa kutsanangura maparamendi atinotangisa nawo chiitiko, chaizvo aya ndiwo nharo dzinozopfuudzwa kuchiito.

Chasara ndechekumhanyisa purojekiti kuvaka muMaven: run: mvn -B clean package mureza -B inotaura kuti isu tinoda isiri-inopindirana modhi kuitira kuti maven kamwe kamwe haadi kutibvunza chimwe chinhu

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Hukuru! Zvino, pese paunozvipira kuna tenzi, kuvaka purojekiti kunotanga.

Automating test inotanga

Gungano rakanaka, asi chaizvoizvo, purojekiti inogona kuunganidzwa zvakachengeteka, asi kwete kushanda. Naizvozvo, nhanho inotevera ndeye automate bvunzo inomhanya. Uye zvakare, zviri nyore kutarisa mhedzisiro yekupasa bvunzo kana iwe uchiita PR ongororo - iwe unonyatsoziva kuti bvunzo dzinopfuura uye hapana akakanganwa kumhanyisa bazi rake asati aita kubatanidza.

Isu tichamhanyisa bvunzo kana tichigadzira chikumbiro chekudhonza uye kubatanidza mune tenzi, uye panguva imwechete isu tichawedzera kusikwa kwechinyorwa chekodhi-kuvhara.

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

Kuvhara bvunzo, ini ndinoshandisa codecov pamwe chete nejacoco plugin. codecov ine chiito chayo, asi inoda chiratidzo chekushanda nechikumbiro chedu chekudhonza:

${{ secrets.CODECOV_TOKEN }} - tichaona kuvakwa uku kanopfuura kamwe chete, zvakavanzika inzira yekuchengetedza zvakavanzika muGitHub, tinogona kunyora ipapo mapassword / tokens/hosts/urls uye imwe data isingafanirwe kuverengerwa mune repository code base.

Iwe unogona kuwedzera shanduko kune zvakavanzika mune repository marongero paGitHub:

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Unogona kuwana chiratidzo pa codecov.io Mushure memvumo kuburikidza neGitHub, kuwedzera chirongwa cheruzhinji iwe unongoda kutevedzera chinongedzo seizvi: GitHub mushandisi zita/[zita repo]. Iyo yakavanzika repository inogona zvakare kuwedzerwa; kuti uite izvi, iwe unofanirwa kupa codecov kodzero kune iyo application muGithub.

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Wedzera jacoco plugin kuPOM faira:

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

Iye zvino iyo codecov bot ichapinda yega yega yezvikumbiro zvedu zvekudhonza uye kuwedzera yekuvhara shanduko girafu:

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Ngatiwedzerei static analyzer

Mune akawanda emapurojekiti angu akavhurika sosi ini ndinoshandisa sonar gore rekuongorora static kodhi, zviri nyore kubatana kune travis-ci. Saka inhanho ine musoro kana uchitamira kuGitHub Zviito kuti uite zvakafanana. Musika wekuita chinhu chinotonhorera, asi panguva ino chakandiregedza zvishoma, nekuti kunze kwetsika ndakawana chiito chandaida uye ndakachiwedzera pakufambiswa kwebasa. Asi zvakazoitika kuti sonar haitsigire kushanda kuburikidza nechiito chekuongorora mapurojekiti pane maven kana gradle. Ehe, izvi zvakanyorwa muzvinyorwa, asi ndiani anoverenga?!

Izvo hazvigoneke kuburikidza nechiito, saka isu tichazviita kuburikidza nemvn 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 - inogona kuwanikwa pa sonarcloud.io uye unofanira kuzvinyoresa muzvakavanzika. GITHUB_TOKEN - ichi chiratidzo chakavakirwa-mukati icho GitHub inogadzira, nerubatsiro rweiyo sonarcloud[bot] ichakwanisa kupinda muGit kuitira kutisiira isu mameseji mukudhonza zvikumbiro.

Dsonar.projectKey - zita repurojekiti mu sonar, unogona kuiona mumagadzirirwo eprojekiti.

Dsonar.sangano - zita resangano kubva kuGitHub.

Isu tinoita chikumbiro chekudhonza uye takamirira sonarcloud[bot] kuti iuye mune zvakataurwa:

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Regedza manejimendi

Iyo kuvaka yakagadziridzwa, bvunzo dzakaitwa, uye isu tinogona kuburitsa. Ngatitarisei kuti GitHub Zviito zvingaite sei kuburitsa manejimendi nyore.

Kubasa, ndine mapurojekiti ane kodhi base iri mubitbucket (zvese zvakaita mune iyo nyaya "Ndinonyorera bitbucket masikati, kuzvipira kuGitHub husiku"). Nehurombo, bitbucket haina yakavakirwa-mukati yekuburitsa manejimendi maturusi. Iri idambudziko, nekuti pakusunungurwa kwega kwega iwe unofanirwa kugadzira peji mukuwirirana uye kukanda zvese zvinosanganisirwa mukuburitswa ikoko, tsvaga kuburikidza nedzimba dzepfungwa dzepfungwa, mabasa mujira, kuzvipira mune repository. Pane mikana mizhinji yekuita chikanganiso, unogona kukanganwa chimwe chinhu kana kuisa chimwe chinhu chakange chatoburitswa kare, dzimwe nguva hazvisi pachena kuti ndezvipi zvekuisa chikumbiro chekudhonza se - ichinhu kana kugadzirisa kwebug, kana kugadzirisa bvunzo, kana chimwe chinhu chekuvaka .

Zviito zveGitHub zvingatibatsira sei? Pane chiitiko chikuru - kuburitsa dhizaini, inokutendera iwe kuseta yekuburitsa manotsi faira template kumisikidza mapoka ezvikumbiro zvekudhonza uye wozvironga otomatiki mune yekuburitsa manotsi faira:

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Muenzaniso template yekumisikidza report (.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

Wedzera chinyorwa kuti ugadzire chinyorwa (.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 }}

Zvese zvikumbiro zvekudhonza kubva zvino zvichienda mberi zvichaunganidzwa mune zvinyorwa zvekuburitsa otomatiki - mashiripiti!

Pano mubvunzo ungamuka: ko kana vagadziri vakakanganwa kuisa ma tag muPR? Ipapo hazvina kujeka kuti ndeipi chikamu chekuisa mukati, uye zvakare uchafanirwa kubata nazvo pamaoko, nePR yega yega. Kugadzirisa dambudziko iri, tinogona kushandisa chimwe chiito - label verifier - inotarisa kuvepo kwema tag pachikumbiro chekudhonza. Kana pasina ma tag anodiwa, saka cheki ichatadza uye isu tichaona meseji nezve izvi muchikumbiro chedu chekudhonza.

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'

Iye zvino chero chikumbiro chekudhonza-chinofanirwa kumakwa neimwe yemategi: mhando: gadzirisa, mhando: maficha, mhando: zvinyorwa, mhando: bvunzo, mhando: config.

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Auto-annotation yezvikumbiro zvekudhonza

Sezvo takabata nyaya yakadai sebasa rinoshanda nekudhonza zvikumbiro, zvakakodzera kutaura nezvechiito chakadaro sechinyorwa, chinoisa ma tag muPR zvichibva pane mafaira akashandurwa. Semuenzaniso, isu tinogona kumaka se [kuvaka] chero chikumbiro chekudhonza chine shanduko kudhairekitori .github/workflow.

Kuzvibatanidza zviri nyore:

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

Isu tinodawo faira rinotsanangura kunyorerana pakati pemadhairekitori epurojekiti uye misoro yekukumbira yekudhonza:

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

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

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

theme:documentation:
  - "docs/**"

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

Ini handina kubudirira kubatanidza chiitiko chinoisa otomatiki zvinyorwa mukudhonza zvikumbiro nechiito chinotarisa kuvepo kwemavara anodiwa; match-label haidi kuona mavara akawedzerwa ne bot. Zvinoita sezviri nyore kunyora chako chiito chinosanganisa nhanho mbiri. Asi kunyangwe mune iyi fomu iri nyore kushandisa; iwe unofanirwa kusarudza label kubva pane iyo rondedzero paunenge uchigadzira chikumbiro chekudhonza.

Yasvika nguva yekuisa

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Ndakaedza nzira dzinoverengeka dzekuendesa kuburikidza neGitHub Zviito (kuburikidza ne ssh, kuburikidza ne scp, uye kushandisa docker-hub), uye ndinogona kutaura kuti, kazhinji, iwe uchawana nzira yekuisa iyo bhinari kune server, zvisinei kuti yakakombama sei pombi yako. ndizvo.

Ndakafarira sarudzo yekuchengeta zvese zvivakwa munzvimbo imwechete, saka ngatitarisei maitiro ekuendesa kuGitHub Packages (iyi inzvimbo yezvinyorwa zvebhinari, npm, chirongo, docker).

Script yekuvaka docker mufananidzo uye kuishambadza muGitHub 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 }}"

Kutanga, isu tinofanirwa kuvaka iyo JAR faira rekushandisa kwedu, mushure mezvo isu tinoverenga nzira inoenda kuGitHub docker registry uye zita remufananidzo wedu. Pane mashoma mashoma pano atisati tasangana nawo:

  • chivakwa chakaita se: echo "::set-output name=NAME::VALUE" inokutendera kuti uise kukosha kwechinhu chiri munhanho yazvino, kuitira kuti chigozoverengwa mune mamwe matanho ese.
  • unokwanisa kuwana kukosha kweiyo vhezheni yakaiswa padanho rapfuura kuburikidza nechiratidzo chedanho iri: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Iyo yakajairwa GITHUB_REPOSITORY shanduko inochengetedza zita renzvimbo uye muridzi wayo ("muridzi/repo-zita"). Kuti ticheke zvese kubva pamutsetse uyu kunze kwezita renzvimbo, tichashandisa bash syntax: ${GITHUB_REPOSITORY#*/}

Tevere isu tinoda kuvaka iyo docker mufananidzo:

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

Pinda kune registry:

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

Uye shambadza mufananidzo kuGitHub Packages Repository:

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

Kuti tiratidze vhezheni yemufananidzo, isu tinoshandisa manhamba ekutanga kubva kuSHA hash yekuzvipira - GITHUB_SHA kune zvakare nuances pano, kana iwe ukagadzira akadaro anovaka kwete chete kana uchibatanidza kuita tenzi, asiwo zvinoenderana nekudhonza chikumbiro kusikwa. chiitiko, ipapo SHA inogona kusaenderana nehashi yatinoona munhoroondo yegit, nekuti zviito/checkout chiito chinoita hashi yayo yakasarudzika kudzivirira zviito zvinofa muPR.

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Kana zvese zvikafamba nemazvo, wobva wavhura chikamu chemapakeji (https://github.com/antkorwin/github-actions/packages) mune repository, uchaona nyowani docker mufananidzo:

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Ikoko iwe unogona zvakare kuona rondedzero yeshanduro yemufananidzo we docker.

Chasara ndechekugadzirisa server yedu kuti ishande neiyi registry uye kutangazve sevhisi. Ini ndichataura nezve maitiro ekuita izvi kuburikidza nesystemd imwe nguva.

Kuongorora

Ngatitarisei sarudzo yakapusa pakuita cheki yehutano yekushandisa kwedu uchishandisa GitHub Zviito. Yedu boot application ine actuator, saka hatitomboda kunyora API kuti titarise chimiro chayo; isu takatoita zvese kune simbe. Iwe unongoda kudhonza host: 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"}

Zvose zvatinoda ndezvekunyora basa rekutarisa sevha uchishandisa cron, uye kana kamwe kamwe isingatipinduri, saka tichatumira chiziviso kuburikidza neteregiramu.

Kutanga, ngatione kuti tingaite sei cron workflow:

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

Zviri nyore, ini handitombotendi kuti muGithub unogona kugadzira zviitiko zvisingaenderane newebhooks zvachose. Tsanangudzo dziri mugwaro: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Ngatitarisei mamiriro evhavha nemawoko kuburikidza ne 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"

Kutanga, tinochengetedza mune shanduko iyo sevha yakapindura kuchikumbiro, munhanho inotevera tinoongorora kuti chimiro chiri UP uye, kana zvisiri izvo, tinobuda nekukanganisa. Kana iwe uchida "kuremedza" chiito nemaoko ako, saka kubuda 1 - chombo chakakodzera.

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

Isu tinotumira kuteregiramu chete kana chiito chakundikana padanho rapfuura. Kutumira meseji tinoshandisa appleboy/telegraph-action; unogona kuverenga nezve nzira yekuwana bot tokeni uye yekutaura id mune zvinyorwa: github.com/appleboy/telegram-action

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Usakanganwe kunyora mune zvakavanzika paGithub: URL yeseva uye tokeni dzeiyo telegraph bot.

Bonus track - JIRA yeusimbe

Ndakavimbisa kuti taizodzokera kuJIRA, uye tadzoka. Mazana enguva ndakaona mamiriro ekumira-up apo vagadziri vakagadzira chimiro, vakabatanidza bazi, asi vakakanganwa kudhonzera nyaya muJIRA. Ehe, kana zvese izvi zvakaitwa munzvimbo imwechete, zvingava nyore, asi isu tinonyora kodhi muIDE, batanidza matavi mu bitbucket kana GitHub, uye todhonza mabasa muJira, nekuda kweizvi tinoda kuvhura mahwindo matsva. , dzimwe nguva pinda zvakare uye nezvimwe. Kana iwe uchinyatso rangarira zvaunofanira kuita zvinotevera, saka hapana chikonzero chekuvhura bhodhi zvakare. Nekuda kweizvozvo, mangwanani pakusimuka iwe unofanirwa kushandisa nguva uchivandudza bhodhi rebasa.

GitHub ichatibatsirawo mubasa iri renguva dzose; kune kutanga, tinogona kukwevera nyaya otomatiki mukodhi_review column patinoendesa chikumbiro chekudhonza. Zvese zvaunoda kuti uite kutevedzera gungano rekutumidza bazi:

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

semuenzaniso, kana kiyi yeprojekiti "GitHub Zviito" iri GA, saka GA-8-jira-bot inogona kuva bazi rekuita basa reGA-8.

Kubatanidzwa neJIRA kunoshanda kuburikidza nezviito kubva kuAtlassian, ivo havana kukwana, ndinofanira kutaura kuti vamwe vacho havana kundishandira zvachose. Asi isu tichakurukura chete izvo zvinoshanda chaizvo uye zvinoshingaira kushandiswa.

Kutanga iwe unofanirwa kupinda muJIRA uchishandisa chiito: 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 uite izvi, unofanirwa kuwana chiratidzo muJIRA, maitiro ekuita izvi anotsanangurwa pano: confluence.atlassian.com/cloud/api-tokens-938839638.html

Isu tinobvisa chiziviso chebasa kubva pazita rebazi:

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

Kana iwe ukatsvaga mumusika weGitHub, unogona kuwana chiito chebasa iri, asi ini ndaifanira kunyora chinhu chimwe chete ndichishandisa grep ndichishandisa zita rebazi, nekuti ichi chiitiko kubva kuAtlassian chaisada kushanda purojekiti yangu chero nzira. , kuti uone kuti chii chakanga chakaipa ipapo - kureba kupfuura kuita chinhu chimwe chete nemaoko ako.

Chasara kufambisa basa kuenda ku "Code wongororo" column paunenge uchigadzira chikumbiro chekudhonza:

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

Pane chiitiko chakakosha cheichi paGitHub, chainoda inyaya ID yakawanikwa munhanho yapfuura uye mvumo muJIRA yatakaita pamusoro.

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Nenzira imwecheteyo, iwe unogona kudhonza mabasa kana uchibatanidza mune tenzi, uye zvimwe zviitiko kubva kuGitHub workflow. Muzhinji, zvese zvinoenderana nekufungidzira kwako uye chishuwo chekuita otomatiki maitiro.

zvakawanikwa

Kana iwe ukatarisa iyo yakasarudzika DEVOPS dhizaini, isu takafukidza ese matanho, kunze kwekunge shanda, ndinofunga kana ukaedza, iwe unogona kuwana chimwe chiitiko mumusika chekubatanidzwa nerubatsiro-dhesiki system, saka isu tichafunga kuti pombi yakatendeuka. kuti ive yakakwana uye mhedziso dzinogona kutorwa zvichibva pakushandiswa kwayo.

Denderedzwa regehena neGitHub Zviito (kuvaka pombi yeCI/CD yepurojekiti yeJava)

Pros:

  • Musika une zviito zvakagadzirirwa zvezviitiko zvese, izvi zvinotonhorera. Mune mazhinji acho, iwe unogona zvakare kutarisa iyo sosi kodhi kuti unzwisise nzira yekugadzirisa dambudziko rakafanana kana kutumira chikumbiro chechimiro kumunyori zvakananga muGitHub repository.
  • Kusarudza nzvimbo yakanangwa yegungano: Linux, mac os, windows chinhu chinonakidza.
  • Github Packages chinhu chikuru, zviri nyore kuchengetedza zvese zvivakwa munzvimbo imwechete, haufanirwe kusefa nemahwindo akasiyana, zvese zviri mukati meradius yeimwe kana maviri kudzvanya mbeva uye yakanyatsobatanidzwa neGitHub Zviito. Docker registry rutsigiro mune yemahara vhezheni zvakare yakanaka mukana.
  • GitHub inovanza zvakavanzika mumatanda ekuvaka, saka kuishandisa kuchengetedza mapassword uye tokeni hakusi kutyisa. Munguva yese yekuedza kwangu, handina kumbokwanisa kuona chakavanzika muchimiro chayo chakachena mune iyo console.
  • Yemahara kune Open Source mapurojekiti

Cons:

  • YML, zvakanaka, ini handimude. Paunenge uchishanda nekuyerera kwakadaro, iyo yakajairika meseji yandinayo ndeye "gadzirisa yml fomati", wobva wakanganwa kuisa tab pane imwe nzvimbo, kana iwe unoinyora pamutsara usiriwo. Kazhinji, kugara pamberi pechidzitiro chine protractor uye mutongi haisi iyo inonyanya kunakidza chiitiko.
  • DEBUG, kugadzirisa kuyerera nekuita, kumhanyisa kuvakazve, uye kuburitsa kune koni hakusi nyore nguva dzose, asi yakawanda yechikamu che "wakanyanya"; iwe wakajaira kushanda neIDEA iri nyore, kana iwe uchigona kugadzirisa chero chinhu. .
  • Iwe unogona kunyora chiito chako pane chero chinhu kana ukaiputira muDocker, asi javascript chete inotsigirwa, hongu iyi inyaya yekuravira, asi ini ndingada chimwe chinhu pane js.

Rega ndikuyeuchidze kuti repository ine zvese zvinyorwa zviri pano: github.com/antkorwin/github-actions

Svondo rinouya ndichange ndichitamba naro report pamusangano weHeisenbug 2020 Piter. Ini ndichakuudza kwete chete nzira yekudzivirira kukanganisa paunenge uchigadzirira bvunzo data, asi zvakare kugovera zvakavanzika zvangu zvekushanda nemaseti e data muJava application!

Source: www.habr.com