Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

He maha nga wa ka mahia e au he paipa mo nga kaupapa hanga whare ki Java. I etahi wa he puna tuwhera, i etahi wa kaore. I whakatau tata nei ahau ki te ngana ki te neke etahi o aku putunga mai i Travis-CI me TeamCity ki nga Mahi a GitHub, a koinei te mea i puta mai.

He aha ta tatou e whakaaunoa?

Tuatahi, me hiahia he kaupapa ka mahi aunoa tatou, me hanga he tono iti ki te Spring boot / Java 11 / Maven. Mo nga kaupapa o tenei tuhinga, kare rawa matou e aro ki te arorau tono; he mea nui ki a matou nga hanganga huri noa i te tono, no reira ka rato te kaiwhakahaere REST API mo matou.

Ka taea e koe te tiro i nga puna i konei: github.com/antkorwin/github-actions Ka kitea nga wahanga katoa o te hanga paipa i roto i nga tono toia mo tenei kaupapa.

JIRA me te whakamahere

He pai ki te kii ka whakamahia e matou a JIRA hei kaitaki take, na me hanga he poari motuhake mo tenei kaupapa me te taapiri i nga take tuatahi ki reira:

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

I muri tata nei ka hoki ano tatou ki nga mea whakamere ka taea e JIRA me GitHub te tuku tahi.

Ka whakaaunoa matou i te huihuinga o te kaupapa

Ko ta maatau kaupapa whakamatautau ka hangaia ma te maven, no reira he ngawari noa te hanga, ko ta maatau e hiahia ana ko te kete mvn ma.

Ki te mahi i tenei ma te whakamahi i nga Mahi a Github, me hanga he konae ki roto i te putunga e whakaatu ana i ta maatau rerenga mahi, ka taea tenei me te konae yml auau, kaore au e kii he pai ki ahau te "yml programming", engari me aha - ka mahia e matou i roto i te .github/ directory workflow/ file build.yml hei whakaatu i nga mahi i te wa e hanga ana i te peka matua:

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 — he whakaahuatanga tenei mo te huihuinga ka whakarewahia to tatou tuhinga.

i runga: tono_too/pana — e tohu ana me whakarewahia tenei rerengamahi i nga wa katoa ka panaia ki te rangatira me te hanga tono toia.

E whai ake nei he whakamaarama mo nga mahi (mahi) me nga mahi mahi (kaupae) mo ia mahi.

rere-i runga - i konei ka taea e taatau te kowhiri i te OS whaainga, ma te miharo, ka taea e koe te kowhiri i te Mac OS, engari i runga i nga putunga motuhake he tino utu tenei (whakaritea ki te Linux).

whakamahinga ka taea e koe te whakamahi ano i etahi atu mahi, hei tauira, ma te whakamahi i nga mahi/setup-java mahi ka whakauruhia e matou te taiao mo Java 11.

Ma te awhina o mā te Ka taea e matou te tautuhi i nga tawhā ka whakarewahia e matou te mahi, ko te tikanga ko enei nga tohenga ka tukuna ki te mahi.

Ko nga mea e toe ana ko te whakahaere i te hanga kaupapa me Maven: run: mvn -B clean package haki -B e kii ana me hiahia he aratau tauwhitiwhiti kia kore ai te maven e hiahia ki te patai mai ki a maatau

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Rawe! Inaianei, i nga wa katoa ka tuku koe ki te rangatira, ka timata te hanga kaupapa.

Ka whakarewa aunoa i nga whakamatautau

He pai te Huihuinga, engari i roto i te meka, ka taea te whakahiato i tetahi kaupapa, engari kaore e mahi. Na reira, ko te mahi e whai ake nei ko te whakaaunoa i nga oma whakamatautau. I tua atu, he tino watea ki te titiro ki nga hua o te tuku i nga whakamatautau ka mahia e koe he arotake PR - ka tino mohio koe ka pahemo nga whakamatautau kaore tetahi i wareware ki te whakahaere i to raatau peka i mua i te mahi hanumi.

Ka whakahaerehia e matou nga whakamatautau i te wa e hanga ana i te tono toia me te hanumi ki roto i te rangatira, a i te wa ano ka taapirihia e matou te hanga ripoata mo te kapi-waehere.

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

Hei hipoki i nga whakamatautau, ka whakamahi ahau i te codecov i te taha o te mono jacoco. Kei a codecov tana ake mahi, engari me whai tohu hei mahi me ta maatau tono toia:

${{ secrets.CODECOV_TOKEN }} - ka kite tatou i tenei hanganga neke atu i te kotahi, ko nga mea ngaro he tikanga mo te penapena mea ngaro i roto i te GitHub, ka taea e tatou te tuhi ki reira i nga kupuhipa / tohu / ope / url me etahi atu raraunga e kore e uru ki te turanga waehere rokiroki.

Ka taea e koe te taapiri i tetahi taurangi ki nga mea ngaro i roto i nga tautuhinga penapena i runga i GitHub:

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Ka taea e koe te tiki tohu i codecov.io Whai muri i te whakamanatanga ma GitHub, ki te taapiri i tetahi kaupapa whanui me whai noa koe i tetahi hononga penei: Ingoa kaiwhakamahi GitHub/[ingoa whakahoki]. Ka taea hoki te taapiri i tetahi putunga motuhake; ki te mahi i tenei, me hoatu e koe nga mana codecov ki te tono i Github.

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Tāpirihia te mono jacoco ki te kōnae 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>

Inaianei ka uru te karetao codecov ki ia tono kume me te taapiri i te kauwhata huringa kapinga:

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Me taapiri he kaitirotiro pateko

I te nuinga o aku kaupapa puna tuwhera ka whakamahi ahau i te kapua sonar mo te tātari waehere pateko, he tino ngawari ki te hono atu ki te travis-ci. No reira he mahi arorau ina heke ki GitHub Hohenga kia pera ano. He mea hauhautanga te maakete mahi, engari i tenei wa ka iti noa iho ahau, na te mea na taku mahi ka kitea e au te mahi e hiahiatia ana e au, ka taapiri atu ki te rerenga mahi. Engari karekau te sonar e tautoko i te mahi i roto i tetahi mahi tātari kaupapa i runga i te maven, i te gradle ranei. Ko te tikanga, kua tuhia tenei ki roto i nga tuhinga, engari ma wai e panui?!

Kaore e taea ma te mahi, na ka mahia e matou ma te mvn mono:

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 - ka taea te tiki i sonarcloud.io a me rehita koe i roto i nga mea ngaro. GITHUB_TOKEN - he tohu hanga-a-roto tenei ka mahia e GitHub, me te awhina o te sonarcloud[bot] ka taea te takiuru ki Git kia waiho ai he karere ki a matou i roto i nga tono kume.

Dsonar.projectKey — te ingoa o te kaupapa i roto i te sonar, ka kitea e koe i roto i nga tautuhinga kaupapa.

Dsonar.organization — ingoa o te whakahaere mai i GitHub.

Ka tukuna he tono kumea ka tatari kia tae mai te sonarcloud[bot] i roto i nga korero:

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Tukuna te whakahaere

Kua whirihorahia te hanga, kua whakahaerehia nga whakamatautau, a ka taea e taatau te whakaputa. Me titiro me pehea nga Mahi a GitHub e ngawari ake ai te whakahaere tuku.

I te mahi, kei a au nga kaupapa kei te bitbucket te turanga waehere (he rite nga mea katoa ki tera korero "Ka tuhi ahau ki te bitbucket i te awatea, ka tuku ki a GitHub i te po"). Kia aroha mai, karekau he taputapu whakahaere tuku i roto i te bitbucket. He raruraru tenei, no te mea mo ia tukunga me hanga e koe he wharangi i roto i te whakakotahitanga me te maka i nga ahuatanga katoa kei roto i te tukunga ki reira, rapu i roto i nga whare rangatira o te hinengaro, nga mahi i roto i te jira, ka mahia i roto i te rokiroki. He maha nga tupono ka pohehe koe, ka wareware koe ki tetahi mea, ka uru ranei koe ki tetahi mea kua tukuna i tera wa, i etahi wa kaore i te maarama he aha te whakarōpū i te tono toia hei - he ahuatanga, he whakatika pepeha ranei, he whakamatautau whakatika ranei, tetahi mea hangahanga.

Me pehea e taea ai e nga mahi a GitHub te awhina ia tatou? He mahi tino pai - he kaiwhakatakoto tuku, ka taea e koe te whakatakoto i tetahi tauira konae tuhipoka tuku hei whakarite i nga waahanga tono toia me te whakarōpū aunoa i a raatau ki te konae tuhipoka tuku:

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Tauira tauira mo te whakarite i tetahi ripoata (.github/release-draafter.yml):

name-template: 'v$NEXT_PATCH_VERSION'
tag-template: 'v$NEXT_PATCH_VERSION'
categories:
  - title: ' New Features'
    labels:
      - 'type:features'
# в эту категорию собираем все PR с меткой type:features

  - title: ' Bugs Fixes'
    labels:
      - 'type:fix'
# аналогично для метки type:fix и т.д.

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

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

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

Tāpirihia he hōtuhi hei whakaputa i te whakaputanga tauira (.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 }}

Ko nga tono kumea katoa mai i tenei wa ka kohia i roto i nga tuhinga tuku aunoa - makutu!

I konei ka puta ake te patai: he aha mena ka wareware nga kaihanga ki te whakauru i nga tohu ki te PR? Na kare i te maarama ko tehea waahanga ka whakauruhia, katahi ano ka mahi ma te ringaringa, me ia PR motuhake. Hei whakatika i tenei raru, ka taea e taatau te whakamahi i tetahi atu mahi - te kaitirotiro tapanga - ka tirotirohia te ahua o nga tohu i runga i te tono kume. Mena kaore he tohu e hiahiatia ana, ka rahua te haki ka kite tatou i tetahi panui mo tenei i roto i ta maatau tono toia.

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'

Inaianei me tohu tetahi tono-tono ki tetahi o nga tohu: momo: whakatika, momo: ahuatanga, momo: tuhinga, momo: whakamatautau, momo: whirihora.

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Te tuhi-aunoa mo nga tono kume

I te mea i pa atu matou ki tetahi kaupapa penei i te mahi whai hua me nga tono kume, he pai ki te korero mo nga mahi penei i te tapanga, ka waiho nga tohu ki te PR i runga i nga konae kua whakarereketia. Hei tauira, ka taea e tatou te tohu hei [hanga] tetahi tono kume kei roto nga huringa ki te whaiaronga .github/workflow.

He tino ngawari te hono:

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

Ka hiahia ano matou ki tetahi konae e whakaatu ana i nga reta i waenga i nga raarangi kaupapa me nga kaupapa tono toia:

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

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

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

theme:documentation:
  - "docs/**"

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

Kare au i angitu ki te hono i te mahi ka tuu aunoa i nga tapanga ki nga tono kumea me te mahi e tirotiro ana i te aroaro o nga tapanga e hiahiatia ana; kaore e hiahia te tapanga-tapanga ki te kite i nga tapanga kua taapirihia e te karetao. He maamaa ake te tuhi i a koe ake mahi hei whakakotahi i nga wahanga e rua. Engari ahakoa i roto i tenei ahua he tino watea ki te whakamahi; me whiriwhiri e koe he tapanga mai i te rarangi ka hangaia he tono toia.

Kua tae ki te wa ki te tuku

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

I whakamatauria e au etahi waahanga whakaurunga ma nga Mahi a GitHub (ma te ssh, ma te scp, me te whakamahi i te docker-hub), a ka taea e au te kii, tera pea ka kitea e koe he huarahi ki te tuku i te rua ki te tūmau, ahakoa he aha te kopikopiko o to paipa. ko.

He pai ki a au te kowhiringa ki te pupuri i nga hanganga katoa ki te waahi kotahi, no reira me titiro me pehea te tuku ki nga Paapaki GitHub (he putunga tenei mo nga ihirangi rua, npm, jar, docker).

Hōtuhi mo te hanga whakaahua docker me te whakaputa i roto i nga Paanui 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 }}"

Tuatahi, me hanga e tatou te konae JAR o ta tatou tono, muri iho ka tatauhia te huarahi ki te rehita Docker GitHub me te ingoa o to maatau ahua. He torutoru nga tinihanga i konei kaore ano kia kitea e matou:

  • he hanga penei: echo “::set-output name=NAME::VALUE” ka taea e koe te tautuhi i te uara o te taurangi i te hikoinga o naianei, kia taea ai te panui ki etahi atu kaupae katoa.
  • ka taea e koe te tiki i te uara o te huinga taurangi i te taahiraa o mua na roto i te tautohu o tenei taahiraa: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Ko te taurangi GITHUB_REPOSITORY paerewa e pupuri ana i te ingoa o te putunga me tona rangatira ("rangatira/repo-ingoa"). Hei tapahi i nga mea katoa mai i tenei raina engari ko te ingoa o te putunga, ka whakamahia te wetereo bash: ${GITHUB_REPOSITORY#*/}

I muri mai me hanga e tatou te ahua docker:

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

Takiuru ki te rehita:

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

Na ka whakaputa i te ahua ki te Pupuri Putunga Paanui GitHub:

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

Hei tohu i te ahua o te ahua, ka whakamahia e matou nga nama tuatahi mai i te SHA hash o te commit - GITHUB_SHA kei konei ano nga ahuatanga, mena ka mahia e koe nga hanga penei i te wa e whakakotahi ana ki te rangatira, engari ano hoki i runga i te tono tono hanga. takahanga, ka kore pea a SHA e taurite ki te hash e kitea ana e tatou i roto i te hitori git, na te mea ko nga mahi mahi/takahanga e hanga ana i a ia ano he hash motuhake hei karo i nga mahi mate i roto i te PR.

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Mena i pai nga mea katoa, ka whakatuwherahia te waahanga kete (https://github.com/antkorwin/github-actions/packages) i roto i te putunga, ka kite koe i tetahi ahua docker hou:

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Ka taea hoki e koe te kite i te rarangi o nga putanga o te ahua docker.

Ko nga mea e toe ana ko te whirihora i ta maatau tūmau kia mahi me tenei rehita me te whakaara ano i te ratonga. Ka korero pea ahau me pehea te mahi i tenei ma te punaha i tetahi atu wa.

Aroturuki

Me titiro ki tetahi waahanga ngawari me pehea te mahi tirotiro hauora mo ta maatau tono ma te whakamahi i nga Mahi a GitHub. He kaitahuri to taatau tono boot, no reira karekau e hiahia ki te tuhi API hei tirotiro i tona mana; kua oti i a matou nga mea katoa mo te hunga mangere. Me toia noa te kaihautu: 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"}

Ko nga mea katoa e hiahiatia ana ko te tuhi i tetahi mahi ki te tirotiro i te kaimau ma te whakamahi i te cron, a ki te ohorere kaore ia e whakahoki mai, ka tukuna he panui ma te waea waea.

Tuatahi, me whakaaro me pehea te whakahaere rerengamahi cron:

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

He maamaa noa, kaore au e whakapono kei roto i a Github ka taea e koe te hanga kaupapa kaore e uru ki roto i nga webhooks. Ko nga korero kei roto i nga tuhinga: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Kia tirohia a ringatia te mana tūmau mā te 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"

Tuatahi, ka tiakina e matou ki roto i te taurangi he aha te whakautu a te kaitoro ki te tono, i te waahanga e whai ake nei ka tirohia ko te UP te mana, a, ki te kore tenei, ka puta he hapa. Mena kei te hiahia koe ki te "pouri" i tetahi mahi me o ringaringa, na putanga 1 - patu pai.

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

Ka tukuna e matou ki te waea waea mena i rahua te mahi i te taahiraa o mua. Hei tuku karere ka whakamahia e matou appleboy/telegram-action; ka taea e koe te panui me pehea te tiki tohu bot me te id korerorero i roto i nga tuhinga: github.com/appleboy/telegram-action

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Kaua e wareware ki te tuhi i roto i nga mea ngaro i runga i Github: URL mo te tūmau me nga tohu mo te telegram bot.

Ara bonus - JIRA mo te hunga mangere

I oati ahau ka hoki matou ki JIRA, kua hoki mai ano. E hia rau nga wa kua kite ahau i tetahi ahuatanga i te wa i hangaia e nga kaiwhakawhanake tetahi ahuatanga, i hanumi he peka, engari i wareware ki te toia te take ki JIRA. Ko te tikanga, mena ka mahia enei mea katoa i te waahi kotahi, ka ngawari ake, engari ko te mea ka tuhia e matou he waehere ki te IDE, ka hanumi nga manga ki te bitbucket, ki te GitHub ranei, ka toia nga mahi ki Jira, mo tenei me whakatuwhera i nga matapihi hou. , i etahi wa ka takiuru ano me etahi atu. Ki te tino mahara koe ki nga mahi e whai ake nei, kare he take ki te whakatuwhera ano i te poari. Ko te mutunga, i te ata i te tuunga ka hiahia koe ki te whakapau wa ki te whakahou i te poari mahi.

Ka awhina ano a GitHub i a tatou i roto i tenei mahi mahi; mo te timatanga, ka taea e tatou te toia aunoa i nga take ki roto i te rarangi code_review ka tukuna he tono kume. Ko nga mea katoa hei mahi maau ko te whai i te huihuinga whakaingoatanga o te peka:

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

hei tauira, mena ko te matua kaupapa "GitHub Actions" ko GA, na GA-8-jira-bot ka waiho hei peka mo te whakatinana i te mahi GA-8.

Ko te whakauru ki a JIRA ka mahi ma nga mahi mai i Atlassian, kaore i te tino tika, me kii ahau ko etahi o ratou kaore i mahi mo au. Engari ka korerohia e maatau anake nga mea e tino mahi ana, e kaha ana te whakamahi.

Tuatahi me whakauru koe ki te JIRA ma te whakamahi i te mahi: 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 }}

Ki te mahi i tenei, me whiwhi koe i tetahi tohu i roto i te JIRA, me pehea te mahi i tenei ka whakaahuahia i konei: confluence.atlassian.com/cloud/api-tokens-938839638.html

Ka tangohia e matou te kaitautuhi mahi mai i te ingoa peka:

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

Mena kei te rapu koe i te maakete o GitHub, ka kitea e koe he mahi mo tenei mahi, engari me tuhi ano e au ma te whakamahi i te grep ma te whakamahi i te ingoa o te peka, na te mea kaore tenei mahi a Atlassian i pai ki te mahi i taku kaupapa ahakoa he aha. , ki te mohio he aha te he i reira - he roa atu i te mahi i taua mea me o ringaringa.

Ko te mea e toe ana ko te nuku i te mahi ki te pou "Tirohanga Waehere" i te wa e hanga ana he tono kume:

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

He mahi motuhake mo tenei i runga i te GitHub, ko nga mea katoa e hiahiatia ana ko te ID take i whiwhi i te taahiraa o mua me te whakamanatanga i JIRA i mahia e matou i runga ake nei.

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Waihoki, ka taea e koe te toia nga mahi ka hanumi ki roto i te rangatira, me etahi atu kaupapa mai i te rerengamahi a GitHub. I te nuinga o te waa, ka whakawhirinaki katoa ki o whakaaro me te hiahia ki te whakaaunoa i nga tikanga mahi.

kitenga

Mena ka titiro koe ki te hoahoa DEVOPS matarohia, kua hipokina e matou nga waahanga katoa, engari ko te mahi, ka whakaaro ahau ki te ngana koe, ka kitea e koe etahi mahi i roto i te maakete mo te whakauru ki te punaha awhina-tepu, na reira ka whakaaro matou kua huri te paipa. kia tino tika, ka taea te whakatau i runga i tana whakamahinga.

Porowhita o te reinga me nga Mahi a GitHub (te hanga paipa CI/CD mo te kaupapa Java)

Kaupapa:

  • Te maakete me nga mahi kua rite mo nga wa katoa, he tino pai tenei. I roto i te nuinga o ratou, ka taea hoki e koe te titiro ki te waehere puna kia mohio ai koe me pehea te whakaoti rapanga rite, te tuku ranei i tetahi tono ahuatanga ki te kaituhi tika i roto i te putunga GitHub.
  • Ko te kowhiri i te kaupapa mo te huihuinga: Linux, mac os, windows he mea tino pai.
  • He mea pai a Github Packages, he pai ki te pupuri i nga hanganga katoa ki te waahi kotahi, kaore koe e ngaru i roto i nga matapihi rereke, ko nga mea katoa kei roto i te radius o te kotahi, e rua ranei nga pao kiore me te whakauru pai ki nga Mahi a GitHub. Ko te tautoko rehita Docker i roto i te putanga koreutu he painga pai.
  • Ka huna e GitHub nga mea ngaro i roto i nga raarangi hanga, na te whakamahi hei penapena kupuhipa me nga tohu kaore i te whakamataku. I nga wa katoa o aku whakamatautau, kaore au i kite i te mea ngaro i roto i tona ahua parakore i roto i te papatohu.
  • Kore utu mo nga kaupapa Open Source

Cons:

  • YML, pai, kaore au e pai ki a ia. I te wa e mahi ana me te rerenga penei, ko te tino korero kua tukuna e au ko te "whakatika i te whakatakotoranga yml", i etahi wa ka wareware koe ki te whakatakoto ripa ki tetahi waahi, i etahi wa ka tuhia e koe ki te raina he. I te nuinga o te waa, ko te noho ki mua o te mata me te porotiti me te rangatira ehara i te mea tino pai.
  • Ko te DEBUG, ko te whakakore i te rere me te commits, te whakahaere i te hanga hou, me te whakaputa ki te papatohu kaore i te watea i nga wa katoa, engari he nui ake te waahanga "kua nui ake koe"; kua waia koe ki te mahi me te IDEA watea, ka taea e koe te patuiro i tetahi mea. .
  • Ka taea e koe te tuhi i to mahi i runga i tetahi mea mena ka takai koe ki Docker, engari ko te javascript anake e tautokohia ana e te tangata whenua, o te akoranga he mea reka tenei, engari ka pai ake ahau ki tetahi mea ke atu i te js.

Me whakamahara ahau ki a koe kei konei te putunga me nga tuhinga katoa: github.com/antkorwin/github-actions

Hei tera wiki ka mahi tahi au me pūrongo i te hui Heisenbug 2020 Piter. Ka korerotia e ahau ki a koe me pehea te karo i nga hapa i te wa e whakarite ana i nga raraunga whakamatautau, engari ka tohatoha ano aku mea ngaro mo te mahi me nga huinga raraunga i roto i nga tono Java!

Source: will.com