Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Pono pinepine wau e kūkulu i kahi paipu no ke kūkulu ʻana i nā papahana ma Java. I kekahi manawa he open source, i kekahi manawa ʻaʻole. Ua hoʻoholo koke wau e hoʻāʻo e neʻe i kekahi o kaʻu mau waihona mai Travis-CI a me TeamCity i GitHub Actions, a ʻo ia ka mea i puka mai.

He aha kā mākou e hana ai?

ʻO ka mea mua, pono mākou i kahi papahana a mākou e hana ai, e hana i kahi noi liʻiliʻi ma Spring boot / Java 11 / Maven. No nā kumu o kēia ʻatikala, ʻaʻole mākou e hoihoi i ka loiloi noi; he mea nui ka ʻōnaehana a puni ka noi iā mākou, no laila e lawa ka mea hoʻoponopono REST API maʻalahi iā mākou.

Hiki iā ʻoe ke ʻike i nā kumu ma aneʻi: github.com/antkorwin/github-actions Hōʻike ʻia nā pae āpau o ke kūkulu ʻana i kahi paipu ma nā noi huki no kēia papahana.

JIRA a me ka hoʻolālā

Pono mākou e ʻōlelo e hoʻohana maʻamau mākou iā JIRA ma ke ʻano he tracker hoʻopuka, no laila e hana mākou i papa ʻokoʻa no kēia papahana a hoʻohui i nā pilikia mua ma laila:

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Ma hope iki, e hoʻi mākou i nā mea hoihoi a JIRA a me GitHub e hāʻawi pū ai.

Hoʻokaʻawale mākou i ka hui o ka papahana

Hoʻokumu ʻia kā mākou papahana hoʻāʻo ma o ka maven, no laila he maʻalahi loa ke kūkulu ʻana, ʻo kā mākou mea e pono ai ʻo ka mvn clean package.

No ka hana ʻana i kēia me ka hoʻohana ʻana i Github Actions, pono mākou e hana i kahi faila i loko o ka waihona e wehewehe ana i kā mākou workflow, hiki ke hana ʻia me kahi faila yml maʻamau, ʻaʻole hiki iaʻu ke ʻōlelo makemake wau i ka "yml programming", akā he aha kā mākou e hana ai - hana mākou ma ka .github/ directory workflow/ file build.yml kahi e wehewehe ai mākou i nā hana i ke kūkulu ʻana i ka lālā kumu:

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 wehewehe kēia o ka hanana kahi e hoʻomaka ai kā mākou palapala.

ma: huki_noi/kui - e hōʻike ana e pono e hoʻokuʻu ʻia kēia kaʻina hana i kēlā me kēia manawa e hana ʻia kahi pana i ka haku a hana ʻia nā noi huki.

Eia ka wehewehe ʻana o nā hana (hana) a me nā ʻanuʻu hoʻokō (anuu) no kēlā me kēia hana.

holo-i - ma aneʻi hiki iā mākou ke koho i ka OS target, kahaha, hiki iā ʻoe ke koho i ka Mac OS, akā ma nā hale waihona pilikino he mea kūʻai nui kēia (hoʻohālikelike ʻia me Linux).

hana hiki iā ʻoe ke hoʻohana hou i nā hana ʻē aʻe, no ka laʻana, me ka hoʻohana ʻana i nā hana/setup-java hana mākou e hoʻokomo ai i ke kaiapuni no Java 11.

Me ke kōkuaʻana o me hiki iā mākou ke kuhikuhi i nā ʻāpana a mākou e hoʻomaka ai i ka hana, ʻo ia hoʻi nā ʻōlelo hoʻopaʻapaʻa e hāʻawi ʻia i ka hana.

ʻO nā mea a pau i koe e holo i ka papahana kūkulu ma Maven: run: mvn -B clean package hae -B pono mākou i kahi mode non-interactive no laila ʻaʻole makemake ka maven e nīnau iā mākou i kekahi mea

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Nui! I kēia manawa, i kēlā me kēia manawa āu e hoʻohiki ai i ka haku, hoʻomaka ke kūkulu ʻana o ka papahana.

Hoʻomaka ka hoʻāʻo ʻana

Maikaʻi ka ʻaha, akā i ka ʻoiaʻiʻo, hiki ke hōʻuluʻulu maikaʻi ʻia kahi papahana, akā ʻaʻole hana. No laila, ʻo ka ʻanuʻu aʻe e hoʻokaʻawale i nā holo hoʻāʻo. Eia kekahi, ʻoi aku ka maʻalahi o ka nānā ʻana i nā hopena o ka hele ʻana i nā hoʻokolohua ke hana ʻoe i kahi loiloi PR - ʻike maopopo ʻoe ua hala nā hoʻokolohua a ʻaʻohe mea poina e holo i kā lākou lālā ma mua o ka hana ʻana i kahi hui.

E holo mākou i nā hoʻokolohua i ka wā e hana ai i kahi noi huki a hoʻohui i ka haku, a ma ka manawa like mākou e hoʻohui i ka hana ʻana i kahi hōʻike e pili ana i ka uhi code.

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

No ka uhi ʻana i nā hoʻokolohua, hoʻohana au i ka codecov i hui pū me ka plugin jacoco. Loaʻa i ka codecov kāna hana ponoʻī, akā pono ia i kahi hōʻailona e hana me kā mākou noi huki:

${{ secrets.CODECOV_TOKEN }} - E ʻike mākou i kēia kūkulu ʻana ma mua o hoʻokahi manawa, ʻo nā mea huna he mea hana no ka mālama ʻana i nā mea huna ma GitHub, hiki iā mākou ke kākau ma laila i nā huaʻōlelo/hōʻailona/hosts/urls a me nā ʻikepili ʻē aʻe ʻaʻole pono e hoʻokomo ʻia i ka waihona waihona waihona.

Hiki iā ʻoe ke hoʻohui i kahi loli i nā mea huna i nā hoʻonohonoho waihona ma GitHub:

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Hiki iā ʻoe ke loaʻa kahi hōʻailona ma codecov.io Ma hope o ka ʻae ʻia ma o GitHub, e hoʻohui i kahi papahana lehulehu pono ʻoe e hahai i kahi loulou e like me kēia: inoa mea hoʻohana GitHub/[ inoa inoa]. Hiki ke hoʻohui ʻia kahi waihona pilikino; e hana i kēia, pono ʻoe e hāʻawi i nā kuleana codecov i ka noi ma Github.

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Hoʻohui i ka plugin jacoco i ka faila 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>

I kēia manawa e hoʻokomo ka codecov bot i kēlā me kēia o kā mākou noi huki a hoʻohui i kahi pakuhi hoʻololi uhi:

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

E hoʻohui kākou i kahi mea hoʻoponopono static

I ka hapa nui o kaʻu mau papahana open source, hoʻohana au i ke ao sonar no ka nānā ʻana i nā code static, maʻalahi ke hoʻopili iā travis-ci. No laila he hana kūpono i ka neʻe ʻana i GitHub Actions e hana like. He mea ʻoluʻolu ka mākeke hana, akā i kēia manawa ua hoʻohaʻahaʻa iki iaʻu, no ka mea maʻamau ua loaʻa iaʻu ka hana aʻu e pono ai a hoʻohui ʻia i ka workflow. Akā, ua ʻike ʻia ʻaʻole kākoʻo ka sonar i ka hana ʻana ma o kahi hana no ka nānā ʻana i nā papahana ma ka maven a i ʻole gradle. ʻOiaʻiʻo, ua kākau ʻia kēia ma ka palapala, akā ʻo wai ka mea heluhelu?!

ʻAʻole hiki ke hana ma o kahi hana, no laila e hana mākou ma o ka 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 - hiki ke loaʻa ma sonarcloud.io a pono ʻoe e hoʻopaʻa inoa ma nā mea huna. GITHUB_TOKEN - he hōʻailona paʻa kēia i hana ʻia e GitHub, me ke kōkua o ka sonarcloud[bot] e hiki ke hoʻopaʻa inoa iā Git i mea e waiho ai i nā leka iā mākou i nā noi huki.

Dsonar.projectKey - ka inoa o ka papahana ma ka sonar, hiki iā ʻoe ke ʻike iā ia ma nā hoʻonohonoho papahana.

Dsonar.organization - inoa o ka hui mai GitHub.

Hana mākou i kahi noi huki a kali i ka sonarcloud[bot] e hele mai ma nā ʻōlelo:

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Hoʻoponopono hoʻokuʻu

Ua hoʻonohonoho ʻia ke kūkulu ʻana, ua holo nā hoʻāʻo, a hiki iā mākou ke hana i kahi hoʻokuʻu. E nānā pehea e hiki ai i GitHub Actions ke maʻalahi i ka hoʻokele hoʻokuʻu.

Ma ka hana, loaʻa iaʻu nā papahana nona ka code base i ka bitbucket (e like nā mea a pau ma kēlā moʻolelo "Kākau wau i ka bitbucket i ke ao, hana iā GitHub i ka pō"). ʻO ka mea pōʻino, ʻaʻohe mea hana hoʻokele hoʻokuʻu i kūkulu ʻia i ka bitbucket. He pilikia kēia, no ka mea, no kēlā me kēia hoʻokuʻu, pono ʻoe e hana lima i kahi ʻaoʻao i ka hui ʻana a hoʻolei i nā hiʻohiʻona a pau i hoʻokuʻu ʻia ma laila, e ʻimi i nā hale aliʻi o ka noʻonoʻo, nā hana ma jira, hana i loko o ka waihona. Nui nā manawa e hana hewa ai, hiki iā ʻoe ke hoʻopoina i kekahi mea a i ʻole e hoʻokomo i kahi mea i hoʻokuʻu ʻia i ka manawa i hala, i kekahi manawa ʻaʻole maopopo i ka mea e hoʻokaʻawale ai i kahi noi huki e like me - he hiʻohiʻona a i ʻole hoʻoponopono bug, a i ʻole nā ​​hoʻoponopono hoʻoponopono, a i ʻole mea hoʻolālā .

Pehea e hiki ai i nā hana GitHub ke kōkua iā mākou? Aia kahi hana nui - hoʻokuʻu drafter, hiki iā ʻoe ke hoʻonohonoho i kahi faila memo hoʻokuʻu e hoʻonohonoho i nā ʻāpana o nā noi huki a hui pū iā lākou i ka faila memo hoʻokuʻu:

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Laʻana laʻana no ka hoʻonohonoho ʻana i kahi hōʻike (.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

Hoʻohui i kahi palapala e hoʻopuka i kahi hoʻokuʻu kikoʻī (.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 }}

E hōʻiliʻili ʻia nā noi huki a pau mai kēia manawa i nā memo hoʻokuʻu - magic!

Eia paha ka nīnau: pehea inā poina nā mea hoʻomohala e kau i nā hōʻailona ma ka PR? A laila ʻaʻole maopopo ka ʻāpana e hoʻokomo ai, a e hana hou ʻoe me ia me ka lima, me kēlā me kēia PR ma kahi kaʻawale. No ka hoʻoponopono ʻana i kēia pilikia, hiki iā mākou ke hoʻohana i kahi hana ʻē aʻe - hōʻoia hōʻailona - ʻike ʻo ia i ka hele ʻana o nā hōʻailona ma ka noi huki. Inā ʻaʻohe mau inoa i koi ʻia, a laila e hāʻule ka nānā a ʻike mākou i kahi leka e pili ana i kēia i kā mākou noi huki.

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'

I kēia manawa, pono e kaha ʻia kekahi noi huki me kekahi o nā hōʻailona: type: fix, type: features, type: documentation, type:tests, type:config.

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Aunoa-annotation o nā noi huki

No ka mea ua hoʻopā mākou i kahi kumuhana e like me ka hana kūpono me nā noi huki, pono ke kamaʻilio e pili ana i kahi hana e like me ka labeler, kau ʻo ia i nā hōʻailona ma PR e pili ana i nā faila i hoʻololi ʻia. No ka laʻana, hiki iā mākou ke hōʻailona e like me [kūkulu] i kekahi noi huki i loaʻa nā loli i ka papa kuhikuhi .github/workflow.

He mea maʻalahi ka hoʻohui ʻana:

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

Pono mākou i kahi faila e wehewehe ana i ka pilina ma waena o nā papa kuhikuhi papahana a me nā kumuhana noi huki:

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

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

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

theme:documentation:
  - "docs/**"

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

ʻAʻole i kūleʻa iaʻu i ka hoʻopaʻa ʻana i ka hana e kau maʻalahi i nā lepili i nā noi huki me ka hana e nānā ai i ka loaʻa ʻana o nā lepili i makemake ʻia; ʻaʻole makemake ka match-label e ʻike i nā lepili i hoʻohui ʻia e ka bot. He mea maʻalahi ke kākau i kāu hana ponoʻī e hoʻohui i nā pae ʻelua. Akā ma kēia ʻano he mea maʻalahi ia e hoʻohana; pono ʻoe e koho i kahi lepili mai ka papa inoa i ka wā e hana ai i kahi noi huki.

ʻO ka manawa kēia e kau ai

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Ua ho'āʻo wau i kekahi mau koho hoʻolālā ma o GitHub Actions (ma o ssh, ma scp, a me ka hoʻohana ʻana i ka docker-hub), a hiki iaʻu ke ʻōlelo aku, ʻoi aku paha, e ʻike ʻoe i kahi ala e hoʻouka ai i ka binary i ka server, ʻaʻole pili i ke kekee o kāu pipeline. ʻo ia.

Makemake au i ke koho o ka mālama ʻana i nā ʻōnaehana holoʻokoʻa ma kahi hoʻokahi, no laila e nānā kākou pehea e kau ai i GitHub Packages (he waihona kēia no ka ʻike binary, npm, jar, docker).

Kākau no ke kūkulu ʻana i kahi kiʻi docker a hoʻopuka iā ia ma 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 }}"

ʻO ka mea mua, pono mākou e kūkulu i ka faila JAR o kā mākou noi, a laila helu mākou i ke ala i ka GitHub docker registry a me ka inoa o kā mākou kiʻi. Aia kekahi mau hoʻopunipuni ma aneʻi ʻaʻole mākou i ʻike i kēia manawa:

  • ʻO kahi hana e like me: echo "::set-output name=NAME::VALUE" hiki iā ʻoe ke hoʻonohonoho i ka waiwai o kahi hoʻololi i ka ʻanuʻu o kēia manawa, i hiki ke heluhelu ʻia ma nā ʻanuʻu ʻē aʻe a pau.
  • hiki iā ʻoe ke loaʻa i ka waiwai o ka mea hoʻololi i hoʻonohonoho ʻia ma ka ʻanuʻu mua ma o ka mea hōʻike o kēia ʻanuʻu: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • ʻO ka mea hoʻololi GITHUB_REPOSITORY maʻamau e mālama i ka inoa o ka waihona a me kāna mea nona ("owner/repo-name"). I mea e ʻoki ai i nā mea a pau mai kēia laina koe wale nō ka inoa o ka waihona, e hoʻohana mākou i ka syntax bash: ${GITHUB_REPOSITORY#*/}

A laila pono mākou e kūkulu i ke kiʻi docker:

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

E ʻeʻe i ka papa inoa:

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

A paʻi i ke kiʻi i GitHub Packages Repository:

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

I mea e hōʻike ai i ke ʻano o ke kiʻi, hoʻohana mākou i nā huahelu mua mai ka SHA hash o ka commit - GITHUB_SHA aia kekahi mau nuances ma aneʻi, inā ʻoe e hana i kēlā mau hale ʻaʻole wale i ka hui ʻana i haku, akā e like me ka hana ʻana i ka noi huki. hanana, a laila ʻaʻole like paha ʻo SHA i ka hash a mākou e ʻike ai ma ka mōʻaukala git, no ka mea, hana nā hana / checkout i kāna hash kūʻokoʻa e pale i nā hana deadlocking i ka PR.

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Inā hana maikaʻi nā mea a pau, a laila wehe i ka ʻāpana o nā pōʻai (https://github.com/antkorwin/github-actions/packages) i loko o ka waihona, e ʻike ʻoe i kahi kiʻi docker hou:

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Ma laila hiki iā ʻoe ke ʻike i kahi papa inoa o nā mana o ke kiʻi docker.

ʻO nā mea a pau i koe, ʻo ka hoʻonohonoho ʻana i kā mākou kikowaena e hana me kēia hoʻopaʻa inoa a hoʻomaka hou i ka lawelawe. E kamaʻilio paha wau e pili ana i ka hana ʻana i kēia ma o systemd i kekahi manawa.

Ka mālama ʻana

E nānā i kahi koho maʻalahi e pili ana i ka hana ʻana i kahi nānā olakino no kā mākou noi me ka hoʻohana ʻana iā GitHub Actions. He mea hoʻokō kā kā mākou noi boot, no laila ʻaʻole pono mākou e kākau i kahi API e nānā i kona kūlana; ua hana mākou i nā mea āpau no ka palaualelo. Pono ʻoe e huki i ka 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"}

ʻO nā mea a pau e pono ai mākou e kākau i kahi hana e nānā i ka server me ka cron, a inā ʻaʻole ia e pane mai iā mākou, a laila e hoʻouna mākou i kahi leka hoʻomaopopo ma ke kelepona.

ʻO ka mea mua, e noʻonoʻo pehea e holo ai i kahi kaʻina hana cron:

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

He mea maʻalahi, ʻaʻole hiki iaʻu ke manaʻoʻiʻo ma Github hiki iā ʻoe ke hana i nā hanana i kūpono ʻole i nā webhooks. Aia nā kikoʻī ma ka palapala: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

E nānā pono kākou i ke kūlana kikowaena ma o ka 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"

ʻO ka mea mua, mālama mākou i kahi loli i ka mea a ke kikowaena i pane ai i ka noi, ma ka pae aʻe e nānā mākou i ke kūlana UP a, inā ʻaʻole kēia ka hihia, a laila haʻalele mākou me kahi hewa. Inā pono ʻoe e "hoʻoulu" i kahi hana me kou mau lima, a laila puka 1 - mea kaua kūpono.

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

Hoʻouna mākou i ka telegram wale nō inā hāʻule ka hana ma ka pae mua. No ka hoʻouna ʻana i kahi leka, hoʻohana mākou i ka appleboy/telegram-action; hiki iā ʻoe ke heluhelu e pili ana i ka loaʻa ʻana o kahi hōʻailona bot a me ke kamaʻilio id i ka palapala: github.com/appleboy/telegram-action

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Mai poina e kākau i nā mea huna ma Github: URL no ke kikowaena a me nā hōʻailona no ka bot telegram.

Ke mele bonus - JIRA no ka palaualelo

Ua hoʻohiki wau e hoʻi mākou i JIRA, a ua hoʻi mākou. He mau haneli mau manawa aʻu i ʻike ai i kahi kūlana ma kahi kū i ka wā i hana ai nā mea hoʻomohala i kahi hiʻohiʻona, hoʻohui i kahi lālā, akā poina e kauo i ka pilikia i JIRA. ʻOiaʻiʻo, inā hana ʻia kēia mau mea ma kahi hoʻokahi, ʻoi aku ka maʻalahi, akā ʻoiaʻiʻo, kākau mākou i ke code i ka IDE, hoʻohui i nā lālā i bitbucket a i ʻole GitHub, a laila kauo i nā hana i Jira, no kēia pono mākou e wehe i nā puka makani hou. , i kekahi manawa e komo hou a pela aku. Ke hoʻomanaʻo pono ʻoe i kāu mea e hana ai ma hope, a laila ʻaʻohe kumu o ka wehe hou ʻana i ka papa. ʻO ka hopena, i ke kakahiaka i kahi standup pono ʻoe e hoʻolilo i ka manawa e hoʻonui i ka papa hana.

E kōkua pū ʻo GitHub iā mākou i kēia hana maʻamau; no ka hoʻomaka ʻana, hiki iā mākou ke huki i nā pilikia i loko o ke kolamu code_review ke waiho mākou i kahi noi huki. ʻO nā mea a pau āu e hana ai, ʻo ka hahai ʻana i ka hui inoa lālā:

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

no ka laʻana, inā ʻo GA ke kī pāhana "GitHub Actions", a laila GA-8-jira-bot hiki ke lilo i lālā no ka hoʻokō ʻana i ka hana GA-8.

Hoʻohui ʻia me JIRA ma o nā hana mai Atlassian, ʻaʻole kūpono lākou, pono wau e ʻōlelo ʻaʻole i hana kekahi o lākou iaʻu. Akā e kūkākūkā mākou i nā mea i hana maoli a hoʻohana ikaika ʻia.

Pono ʻoe e komo i ka JIRA me ka hoʻohana ʻana i ka hana: 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 }}

No ka hana ʻana i kēia, pono ʻoe e kiʻi i kahi hōʻailona ma JIRA, pehea e hana ai i kēia i wehewehe ʻia ma aneʻi: confluence.atlassian.com/cloud/api-tokens-938839638.html

Wehe mākou i ka mea ʻike hana mai ka inoa lālā:

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

Inā ʻoe e ʻimi i ka mākeke GitHub, hiki iā ʻoe ke loaʻa kahi hana no kēia hana, akā pono wau e kākau i ka mea like me ka hoʻohana ʻana i ka grep me ka hoʻohana ʻana i ka inoa o ka lālā, no ka mea ʻaʻole makemake kēia hana mai Atlassian e hana i kaʻu papahana ma kekahi ʻano. , e noʻonoʻo i ka hewa ma laila - ʻoi aku ka lōʻihi ma mua o ka hana ʻana i ka mea like me kou mau lima.

ʻO nā mea a pau, ʻo ka hoʻoneʻe ʻana i ka hana i ke kolamu "Code review" i ka wā e hana ai i kahi noi huki:

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

Aia kahi hana kūikawā no kēia ma GitHub, ʻo ia wale nō ka mea e pono ai ka ID hoʻopuka i loaʻa i ka pae mua a me ka ʻae ʻana ma JIRA a mākou i hana ai ma luna.

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Ma ke ala like, hiki iā ʻoe ke kauo i nā hana ke hoʻohui ʻia i loko o ka haku, a me nā hanana ʻē aʻe mai GitHub workflow. Ma keʻano laulā, pili ia i kou noʻonoʻo a me ka makemake e hoʻokaʻawale i nā kaʻina hana maʻamau.

haʻina

Inā 'oe e nana i ka maʻamau DEVOPS kiʻi, ua uhi mākou i nā pae a pau, koe nae paha e hana, ke manao nei au ina oe e ho'āʻo, e hiki ke loaʻa i kekahi hana i loko o ka makeke no ka hoʻohuiʻana me ke kōkua-papa nenoaiu, no laila mākou e manao ua huli ka pipeline. ʻO ka ʻoiaʻiʻo, hiki ke huki ʻia nā hopena ma muli o kāna hoʻohana ʻana.

Nā pōʻai o Gehena me GitHub Actions (kūkulu i kahi pipeline CI/CD no kahi papahana Java)

Kākoʻo:

  • Makeke me nā hana i hoʻomākaukau ʻia no nā manawa āpau, ʻoluʻolu loa kēia. I ka hapanui o lākou, hiki iā ʻoe ke nānā i ke kumu kumu e hoʻomaopopo ai pehea e hoʻoponopono ai i kahi pilikia like a i ʻole e kau i kahi noi hiʻohiʻona i ka mea kākau pololei ma ka waihona GitHub.
  • Ke koho ʻana i ke kahua paʻa no ka hui ʻana: Linux, mac os, windows he hiʻohiʻona hoihoi.
  • He mea maikaʻi loa ʻo Github Packages, ʻoi aku ka maʻalahi o ka mālama ʻana i nā ʻōnaehana holoʻokoʻa ma kahi hoʻokahi, ʻaʻole pono ʻoe e heʻenalu ma nā puka makani ʻē aʻe, aia nā mea āpau i loko o ka radius o hoʻokahi a ʻelua paha kaomi ʻiole a hoʻohui pū ʻia me nā Hana GitHub. ʻO ke kākoʻo hoʻopaʻa inoa Docker i ka mana manuahi he mea maikaʻi hoʻi.
  • Hūnā ʻo GitHub i nā mea huna i ke kūkulu ʻana i nā lāʻau, no laila ʻaʻole makaʻu ka hoʻohana ʻana iā ia e mālama i nā huaʻōlelo a me nā hōʻailona. I kaʻu mau hoʻokolohua āpau, ʻaʻole hiki iaʻu ke ʻike i ka mea huna i kona ʻano maʻemaʻe i ka console.
  • No nā papahana Open Source

ʻAla:

  • YML, ʻae, ʻaʻole wau makemake iā ia. I ka hana ʻana me ia kahe, ʻo ka memo commit maʻamau i loaʻa iaʻu ʻo "fix yml format", a laila poina ʻoe e kau i kahi pā ma kahi, a i ʻole ʻoe e kākau ma ka laina hewa. Ma keʻano laulā, ʻo ka noho ʻana i mua o kahi pale me ka protractor a me ke aliʻi ʻaʻole ia ka mea ʻoluʻolu loa.
  • ʻO DEBUG, ka hoʻopau ʻana i ka kahe me nā hana, ka holo ʻana i kahi kūkulu hou, a me ka hoʻopuka ʻana i ka console ʻaʻole maʻalahi ia, akā ʻoi aku ka maikaʻi o ka ʻāpana "ua overdone" ʻoe; ua maʻa ʻoe e hana me ka IDEA kūpono, ke hiki iā ʻoe ke debug i kekahi mea. .
  • Hiki iā ʻoe ke kākau i kāu hana ma kekahi mea inā ʻoe e kāwili iā ia ma Docker, akā ʻo javascript wale nō ke kākoʻo maoli ʻia, ʻoiaʻiʻo he mea ʻono kēia, akā makemake wau i kahi mea ʻē aʻe ma mua o js.

E hoʻomanaʻo wau iā ʻoe aia ka waihona me nā palapala āpau: github.com/antkorwin/github-actions

ʻO kēia pule aʻe e hoʻokani ana au me hōʻike ma ka hui Heisenbug 2020 Piter. E haʻi aku wau iā ʻoe ʻaʻole wale pehea e pale aku ai i nā hewa i ka wā e hoʻomākaukau ai i ka ʻikepili hoʻāʻo, akā e kaʻana like i kaʻu mau mea huna o ka hana ʻana me nā pūʻulu ʻikepili i nā noi Java!

Source: www.habr.com