Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Kuv feem ntau yuav tsum tsim cov kav dej rau kev tsim cov haujlwm hauv Java. Qee lub sij hawm nws yog qhov qhib, qee zaum nws tsis yog. Tsis ntev los no kuv tau txiav txim siab sim txav qee qhov ntawm kuv qhov chaw cia khoom los ntawm Travis-CI thiab TeamCity mus rau GitHub Actions, thiab qhov no yog qhov tawm ntawm nws.

Dab tsi yuav peb automate?

Ua ntej, peb xav tau ib qhov project uas peb yuav automate, cia peb ua ib daim ntawv thov me me hauv Spring boot / Java 11 / Maven. Rau lub hom phiaj ntawm tsab xov xwm no, peb yuav tsis txaus siab rau daim ntawv thov logic tag nrho; cov txheej txheem nyob ib ncig ntawm daim ntawv thov yog ib qho tseem ceeb rau peb, yog li ib qho yooj yim REST API maub los yuav txaus rau peb.

Koj tuaj yeem saib cov peev txheej ntawm no: github.com/antkorwin/github-actions Txhua theem ntawm kev tsim lub raj xa dej tau cuam tshuam los ntawm kev thov rub rau qhov project no.

JIRA thiab kev npaj

Nws tsim nyog hais tias peb feem ntau siv JIRA raws li qhov teeb meem tracker, yog li cia peb tsim ib lub rooj sib tham sib cais rau txoj haujlwm no thiab ntxiv cov teeb meem thawj zaug rau ntawd:

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Ib me ntsis tom qab peb yuav rov qab mus rau dab tsi nthuav yam JIRA thiab GitHub tuaj yeem muab ua ke.

Peb automate lub rooj sib txoos ntawm qhov project

Peb qhov kev sim ua tiav yog tsim los ntawm maven, yog li tsim nws yooj yim heev, txhua yam peb xav tau yog lub pob huv huv mvn.

Txhawm rau ua qhov no siv Github Kev Ua Haujlwm, peb yuav tsum tsim cov ntaub ntawv hauv qhov chaw khaws cia piav qhia peb cov haujlwm ua haujlwm, qhov no tuaj yeem ua tiav nrog cov ntaub ntawv yml tsis tu ncua, Kuv tsis tuaj yeem hais tias kuv nyiam "yml programming", tab sis peb tuaj yeem ua li cas - peb ua nws hauv .github/ directory workflow/ file build.yml nyob rau hauv uas peb yuav piav qhia txog cov kev ua thaum tsim tus tswv ceg:

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 - qhov no yog ib qho kev piav qhia ntawm qhov xwm txheej uas peb tsab ntawv yuav raug tso tawm.

ntawm: rub_request/push - qhia tau hais tias qhov kev ua haujlwm no yuav tsum tau pib ua haujlwm txhua lub sijhawm thaum muaj kev thawb rau tus tswv thiab rub cov lus thov raug tsim.

Hauv qab no yog cov lus piav qhia ntawm cov haujlwm (cov hauj lwm) thiab cov kauj ruam ua tiav (cov kauj ruam) rau txhua txoj haujlwm.

khiav-on - Ntawm no peb tuaj yeem xaiv lub hom phiaj OS, xav tsis thoob, koj tuaj yeem xaiv Mac OS, tab sis ntawm cov chaw khaws khoom ntiag tug no kim heev (piv rau Linux).

siv tso cai rau koj rov siv dua lwm yam kev ua, piv txwv li, siv cov kev ua / teeb tsa-java qhov peb nruab ib puag ncig rau Java 11.

Nrog kev pab los ntawm nrog peb tuaj yeem hais qhia qhov tsis sib xws uas peb tso tawm qhov kev txiav txim, qhov tseem ceeb yog cov lus sib cav uas yuav dhau mus rau qhov kev txiav txim.

Txhua yam uas tseem tshuav yog khiav qhov project tsim hauv Maven: run: mvn -B clean package chij -B hais tias peb xav tau ib qho kev sib tham tsis sib tham kom cov maven dheev tsis xav nug peb ib yam dab tsi

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Zoo heev! Tam sim no, txhua zaus koj cog lus rau tus tswv, qhov project tsim pib.

Automating xeem launches

Kev sib dhos yog qhov zoo, tab sis qhov tseeb, ib qhov project tuaj yeem sib sau ua ke zoo, tab sis tsis ua haujlwm. Yog li ntawd, cov kauj ruam tom ntej yog automate qhov kev xeem khiav. Tsis tas li ntawd, nws yog qhov yooj yim heev los saib cov txiaj ntsig ntawm kev xeem dhau los thaum koj ua PR tshuaj xyuas - koj paub tseeb tias qhov kev xeem dhau thiab tsis muaj leej twg tsis nco qab khiav lawv ceg ua ntej ua kev sib koom ua ke.

Peb yuav khiav cov kev ntsuam xyuas thaum tsim ib qho kev thov rub thiab sib koom ua ke rau hauv tus tswv, thiab tib lub sijhawm peb yuav ntxiv qhov tsim cov ntawv tshaj tawm ntawm cov cai-kev pab them nqi.

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

Txhawm rau npog cov kev xeem, kuv siv codecov ua ke nrog jacoco plugin. codecov muaj nws tus kheej ua, tab sis nws xav tau ib tug token ua hauj lwm nrog peb rub daim ntawv thov:

${{ secrets.CODECOV_TOKEN }} - peb yuav pom qhov kev tsim kho no ntau dua ib zaug, kev zais tsis pub lwm tus paub yog lub tshuab khaws cia zais cia hauv GitHub, peb tuaj yeem sau muaj cov passwords / tokens / hosts / urls thiab lwm yam ntaub ntawv uas yuav tsum tsis txhob muab tso rau hauv qhov chaw khaws ntaub ntawv code.

Koj tuaj yeem ntxiv qhov sib txawv rau cov lus zais hauv qhov chaw khaws cia ntawm GitHub:

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Koj tuaj yeem tau txais ib qho token ntawm codecov.io Tom qab kev tso cai ntawm GitHub, ntxiv rau pej xeem qhov project koj tsuas yog yuav tsum ua raws li qhov txuas zoo li no: GitHub tus neeg siv lub npe/[repo npe]. Ib qho chaw khaws cia ntiag tug kuj tuaj yeem raug ntxiv; ua qhov no, koj yuav tsum muab cov cai codecov rau daim ntawv thov hauv Github.

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Ntxiv jacoco plugin rau POM cov ntaub ntawv:

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

Tam sim no tus codecov bot yuav nkag mus rau txhua qhov ntawm peb rub cov lus thov thiab ntxiv qhov kev pab them nqi hloov pauv:

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Wb ntxiv ib tug static analyzer

Hauv feem ntau ntawm kuv cov haujlwm qhib kuv siv sonar huab rau kev txheeb xyuas cov lej zoo li qub, nws yooj yim heev los txuas rau travis-ci. Yog li nws yog ib qho laj thawj kauj ruam thaum tsiv mus rau GitHub Kev Ua Haujlwm los ua ib yam. Kev ua lag luam ua lag luam yog qhov txias, tab sis lub sij hawm no nws cia kuv cia me ntsis, vim tias tawm ntawm tus cwj pwm kuv pom qhov kev txiav txim uas kuv xav tau thiab ntxiv rau hauv kev ua haujlwm. Tab sis nws tau muab tawm tias sonar tsis txhawb kev ua haujlwm los ntawm kev nqis tes ua rau kev txheeb xyuas cov haujlwm ntawm maven lossis gradle. Tau kawg, qhov no yog sau rau hauv cov ntaub ntawv, tab sis leej twg nyeem nws?!

Nws tsis tuaj yeem ua los ntawm kev nqis tes ua, yog li peb yuav ua nws los ntawm 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 - tuaj yeem tau txais ntawm sonarcloud.io thiab koj yuav tsum sau npe rau hauv secrets. GITHUB_TOKEN - qhov no yog lub cim tsim nyob rau hauv uas GitHub tsim, nrog kev pab los ntawm cov sonarcloud [bot] yuav tuaj yeem nkag mus rau Git thiaj li tso peb cov lus hauv rub thov.

Dsonar.projectKey - lub npe ntawm qhov project hauv sonar, koj tuaj yeem pom nws hauv qhov project nqis.

Dsonar.organization - lub npe ntawm lub koom haum los ntawm GitHub.

Peb thov rub thiab tos sonarcloud [bot] tuaj rau hauv cov lus:

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Tso kev tswj hwm

Kev tsim tau raug teeb tsa, cov kev sim tau ua tiav, thiab peb tuaj yeem tso tawm. Cia peb saib yuav ua li cas GitHub Kev Ua Haujlwm tuaj yeem ua rau kev tswj hwm kev tso tawm yooj yim dua.

Thaum ua hauj lwm, kuv muaj tej yaam num uas nws code puag nyob rau hauv bitbucket (txhua yam zoo li hauv zaj dab neeg ntawd "Kuv sau rau bitbucket thaum nruab hnub, cog lus rau GitHub hmo ntuj"). Hmoov tsis zoo, bitbucket tsis muaj cov cuab yeej tswj kev tso tawm. Qhov no yog ib qho teeb meem, vim hais tias rau txhua qhov kev tso tawm koj yuav tsum manually tsim ib nplooj ntawv nyob rau hauv confluence thiab pov tag nrho cov nta muaj nyob rau hauv lub tso tawm muaj, nrhiav los ntawm lub palaces ntawm lub siab, cov hauj lwm nyob rau hauv jira, commits nyob rau hauv lub repository. Muaj ntau txoj hauv kev ua yuam kev, koj tuaj yeem hnov ​​​​qab ib yam dab tsi lossis nkag mus rau qee yam uas tau tso tawm dhau los, qee zaum nws tsuas yog tsis paub meej tias yuav ua li cas cais qhov kev thov rub raws li - nws puas yog qhov tshwj xeeb lossis kab laum kho, lossis kho cov kev xeem, lossis ib yam dab tsi infrastructural.

GitHub ua li cas pab tau peb? Muaj qhov ua tau zoo - tso tawm cov ntawv sau tawm, nws tso cai rau koj los teeb tsa cov ntawv tso tawm cov qauv los teeb tsa pawg ntawm rub cov lus thov thiab cia li pab pawg hauv cov ntawv tso tawm:

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Piv txwv template rau teeb tsa ib daim ntawv qhia (.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

Ntxiv ib tsab ntawv los tsim cov ntawv tso tawm (.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 }}

Txhua qhov kev thov rub tawm los ntawm tam sim no yuav raug sau rau hauv cov ntawv tso tawm cia li - khawv koob!

Ntawm no cov lus nug yuav tshwm sim: yuav ua li cas yog tias cov neeg tsim khoom tsis nco qab tso cov cim npe hauv PR? Tom qab ntawd nws tsis paub meej tias qeb twg los muab tso rau hauv, thiab dua koj yuav tsum tau ua nrog nws manually, nrog txhua PR cais. Txhawm rau kho qhov teeb meem no, peb tuaj yeem siv lwm qhov kev txiav txim - daim ntawv lo pov thawj - nws tshawb xyuas qhov muaj cov cim npe ntawm qhov kev thov rub. Yog tias tsis muaj cov cim uas xav tau, ces daim tshev yuav ua tsis tiav thiab peb yuav pom cov lus hais txog qhov no hauv peb qhov kev thov rub.

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'

Tam sim no txhua qhov kev thov rub yuav tsum tau cim nrog ib qho ntawm cov cim npe: hom: kho, hom: nta, hom: ntaub ntawv, hom: kuaj, hom: teeb tsa.

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Auto-annotation ntawm rub thov

Txij li thaum peb tau kov cov ntsiab lus zoo li kev ua haujlwm zoo nrog rub cov lus thov, nws tsim nyog tham txog qhov kev txiav txim zoo li daim ntawv lo, nws tso cov cim npe hauv PR raws li cov ntaub ntawv tau hloov pauv. Piv txwv li, peb tuaj yeem khij li [tsim] txhua qhov kev thov rub uas muaj cov kev hloov pauv rau cov npe .github/workflow.

Txuas nws yog qhov yooj yim heev:

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

Peb kuj xav tau ib cov ntaub ntawv piav qhia txog cov ntawv xov xwm ntawm qhov project directory thiab rub cov lus thov:

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

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

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

theme:documentation:
  - "docs/**"

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

Kuv tsis tau ua tiav hauv kev sib koom ua ke uas tau tso cov ntawv sau rau hauv kev thov rub nrog qhov kev txiav txim uas kuaj xyuas qhov muaj cov ntawv xav tau; match-label tsis xav pom cov ntawv sau ntxiv los ntawm bot. Nws zoo nkaus li yooj yim los sau koj tus kheej qhov kev txiav txim uas sib txuas ob theem. Tab sis txawm nyob rau hauv daim ntawv no nws yog heev yooj yim mus siv; koj yuav tsum xaiv ib daim ntawv lo los ntawm daim ntawv thaum tsim ib tug rub daim ntawv thov.

Nws yog lub sij hawm rau deploy

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Kuv sim ntau qhov kev xaiv xa mus los ntawm GitHub Kev Ua Haujlwm (ntawm ssh, ntawm scp, thiab siv docker-hub), thiab kuv tuaj yeem hais tias, feem ntau, koj yuav pom txoj hauv kev xa cov binary mus rau lub server, txawm li cas los xij koj lub raj xa dej yuav ua li cas. yog.

Kuv nyiam qhov kev xaiv ntawm kev khaws tag nrho cov txheej txheem hauv ib qho chaw, yog li cia peb saib yuav ua li cas xa mus rau GitHub Pob (qhov no yog qhov chaw khaws cia rau cov ntsiab lus binary, npm, thawv, docker).

Tsab ntawv rau kev tsim cov duab docker thiab tshaj tawm nws hauv GitHub Pob:

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

Ua ntej, peb yuav tsum tsim cov ntaub ntawv JAR ntawm peb daim ntawv thov, tom qab ntawd peb suav txoj hauv kev mus rau GitHub docker npe thiab lub npe ntawm peb daim duab. Muaj qee qhov kev ua yuam kev ntawm no uas peb tseem tsis tau ntsib:

  • ib qho kev tsim kho xws li: ncha "::set-output lub npe = NAME:: VALUE" tso cai rau koj los teeb tsa tus nqi ntawm qhov sib txawv hauv cov kauj ruam tam sim no, yog li ntawd nws tuaj yeem nyeem hauv tag nrho lwm cov kauj ruam.
  • koj tuaj yeem tau txais tus nqi ntawm qhov sib txawv ntawm cov kauj ruam dhau los dhau los ntawm tus cim ntawm cov kauj ruam no: ${{step.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Tus qauv GITHUB_REPOSITORY hloov pauv tau khaws cov npe ntawm cov chaw khaws cia thiab nws tus tswv ("tus tswv / repo-name"). Txhawm rau txiav txhua yam ntawm kab no tshwj tsis yog lub npe ntawm lub chaw khaws cia, peb yuav siv bash syntax: ${GITHUB_REPOSITORY#*/}

Tom ntej no peb yuav tsum tsim cov duab docker:

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

Nkag mus rau hauv lub npe:

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

Thiab tshaj tawm cov duab rau GitHub Packages Repository:

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

Txhawm rau qhia cov qauv ntawm daim duab, peb siv thawj tus lej los ntawm SHA hash ntawm kev cog lus - GITHUB_SHA kuj tseem muaj cov nuances ntawm no, yog tias koj ua xws li tsim tsis tsuas yog thaum sib koom ua ke rau hauv tus tswv, tab sis kuj raws li rub daim ntawv thov tsim. kev tshwm sim, ces SHA yuav tsis phim cov hash uas peb pom hauv keeb kwm git, vim tias qhov kev nqis tes ua / kev txiav txim tawm ua rau nws tus kheej tshwj xeeb hash kom tsis txhob muaj kev cuam tshuam hauv PR.

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Yog tias txhua yam ua haujlwm zoo, tom qab ntawd qhib cov pob khoom seem (https://github.com/antkorwin/github-actions/packages) hauv qhov chaw cia khoom, koj yuav pom cov duab docker tshiab:

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Nyob ntawd koj tuaj yeem pom cov npe ntawm cov qauv ntawm cov duab docker.

Txhua yam uas tseem tshuav yog los teeb tsa peb lub server kom ua haujlwm nrog cov npe no thiab rov pib qhov kev pabcuam. Tej zaum kuv yuav tham txog yuav ua li cas ua qhov no los ntawm systemd lwm lub sijhawm.

Saib xyuas

Cia peb saib cov kev xaiv yooj yim ntawm yuav ua li cas kuaj mob rau peb daim ntawv thov siv GitHub Actions. Peb daim ntawv thov khau raj muaj tus actuator, yog li peb tsis tas yuav sau API los xyuas nws cov xwm txheej; peb twb ua txhua yam rau cov tub nkeeg. Koj tsuas yog yuav tsum rub tus tswv tsev: 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"}

Txhua yam peb xav tau yog sau ib txoj haujlwm los xyuas cov neeg siv khoom siv cron, thiab yog tias tam sim ntawd nws tsis teb peb, ces peb yuav xa cov ntawv ceeb toom ntawm telegram.

Ua ntej, cia peb xam seb yuav ua li cas khiav cron workflow:

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

Nws yooj yim, Kuv tsis tuaj yeem ntseeg tias hauv Github koj tuaj yeem tsim cov xwm txheej uas tsis haum rau hauv webhooks txhua. Cov ntsiab lus muaj nyob rau hauv cov ntaub ntawv: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Cia peb xyuas cov xwm txheej server manually ntawm 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"

Ua ntej, peb khaws cia rau hauv qhov sib txawv uas tus neeg rau zaub mov teb rau qhov kev thov, hauv cov kauj ruam tom ntej peb xyuas tias cov xwm txheej yog UP thiab, yog tias qhov no tsis yog, ces peb tawm nrog qhov yuam kev. Yog tias koj xav tau "dhau" ib qho kev ua nrog koj txhais tes, ces tawm ntawm 1 - riam phom tsim nyog.

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

Peb xa mus rau telegram tsuas yog qhov kev txiav txim ua tsis tiav ntawm cov kauj ruam dhau los. Txhawm rau xa cov lus peb siv appleboy / telegram-action; koj tuaj yeem nyeem txog yuav ua li cas kom tau txais bot token thiab sib tham id hauv cov ntaub ntawv: github.com/appleboy/telegram-action

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Tsis txhob hnov ​​​​qab sau cov lus zais ntawm Github: URL rau lub server thiab tokens rau telegram bot.

Nyiaj tshwj xeeb - JIRA rau cov tub nkeeg

Kuv tau cog lus tias peb yuav rov qab mus rau JIRA, thiab peb tau rov qab los. Ntau pua lub sij hawm kuv tau pom qhov xwm txheej ntawm kev sawv ntsug thaum cov neeg tsim khoom tsim ib qho tshwj xeeb, sib koom ua ke, tab sis tsis nco qab rub qhov teeb meem rau hauv JIRA. Yog lawm, yog tias tag nrho cov no tau ua tiav hauv ib qho chaw, nws yuav yooj yim dua, tab sis qhov tseeb peb sau cov lej hauv IDE, sib koom ua ke rau hauv bitbucket lossis GitHub, thiab rub cov haujlwm rau hauv Jira, rau qhov no peb yuav tsum qhib qhov rais tshiab. , qee zaum nkag rau hauv dua thiab lwm yam. Thaum koj zoo kawg nkaus nco ntsoov tias koj yuav tsum ua dab tsi ntxiv, ces tsis muaj qhov taw tes rau qhib lub rooj tsavxwm dua. Yog li ntawd, thaum sawv ntxov ntawm ib qho kev sawv ntsug koj yuav tsum tau siv sij hawm hloov kho lub rooj tsav xwm ua haujlwm.

GitHub tseem yuav pab peb hauv txoj haujlwm niaj hnub no; rau qhov pib, peb tuaj yeem rub cov teeb meem tau txais mus rau hauv kab ntawv code_review thaum peb xa daim ntawv thov rub. Txhua yam koj yuav tsum tau ua yog ua raws li lub rooj sib tham npe npe:

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

Piv txwv li, yog tias qhov project key "GitHub Actions" yog GA, ces GA-8-jira-bot tuaj yeem ua ib ceg rau kev siv GA-8 txoj haujlwm.

Kev koom ua ke nrog JIRA ua haujlwm los ntawm kev ua los ntawm Atlassian, lawv tsis zoo tag nrho, kuv yuav tsum hais tias qee qhov ntawm lawv tsis ua haujlwm rau kuv txhua. Tab sis peb yuav tham txog tsuas yog cov uas ua haujlwm tiag tiag thiab siv tau.

Ua ntej koj yuav tsum nkag mus rau JIRA siv qhov kev txiav txim: 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 }}

Txhawm rau ua qhov no, koj yuav tsum tau txais lub cim hauv JIRA, yuav ua li cas thiaj tau piav qhia ntawm no: confluence.atlassian.com/cloud/api-tokens-938839638.html

Peb rho tawm tus cim ua haujlwm los ntawm lub npe ceg:

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

Yog tias koj tshawb nrhiav hauv GitHub kev lag luam, koj tuaj yeem nrhiav qhov kev txiav txim rau txoj haujlwm no, tab sis kuv yuav tsum sau tib yam uas siv grep siv lub npe ntawm ceg, vim tias qhov kev txiav txim no los ntawm Atlassian tsis xav ua haujlwm ntawm kuv qhov project hauv txhua txoj kev. , txhawm rau txheeb xyuas qhov tsis raug nyob ntawd - ntev dua li ua tib yam nrog koj txhais tes.

Txhua yam uas tseem tshuav yog txav txoj haujlwm mus rau "Code tshuaj xyuas" kem thaum tsim kev thov rub tawm:

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

Muaj qhov tshwj xeeb ua rau qhov no ntawm GitHub, txhua yam nws xav tau yog qhov teeb meem ID tau txais hauv cov kauj ruam dhau los thiab kev tso cai hauv JIRA uas peb tau ua saum toj no.

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Ib yam li ntawd, koj tuaj yeem rub cov haujlwm thaum koom ua ke rau hauv tus tswv, thiab lwm yam xwm txheej los ntawm GitHub workflow. Feem ntau, nws tag nrho nyob ntawm koj lub tswv yim thiab lub siab xav ua kom cov txheej txheem niaj hnub ua.

tshawb pom

Yog tias koj saib ntawm daim duab DEVOPS classic, peb tau them tag nrho cov theem, tshwj tsis yog tej zaum ua haujlwm, kuv xav tias yog koj sim, koj tuaj yeem pom qee qhov kev nqis tes ua hauv kev ua lag luam rau kev koom ua ke nrog kev pabcuam-lub rooj, yog li peb yuav xav tias lub raj xa dej tig. tawm kom meej thiab cov lus xaus tuaj yeem kos raws li nws siv.

Lub voj voog ntawm ntuj raug txim nrog GitHub Kev Ua Haujlwm (tsim lub CI / CD raj rau Java project)

Tshaj:

  • Kev lag luam nrog kev npaj ua tiav rau txhua lub sijhawm, qhov no yog qhov txias heev. Nyob rau hauv feem ntau ntawm lawv, koj tuaj yeem saib ntawm qhov chaws kom nkag siab yuav ua li cas los daws qhov teeb meem zoo sib xws lossis tshaj tawm qhov kev thov rau tus sau ncaj qha hauv GitHub repository.
  • Xaiv lub hom phiaj platform rau kev sib dhos: Linux, mac os, windows yog qhov nthuav dav heev.
  • Github Pob yog qhov zoo tshaj plaws, nws yooj yim los khaws tag nrho cov txheej txheem hauv ib qho chaw, koj tsis tas yuav nthwv dej los ntawm cov qhov rais sib txawv, txhua yam nyob hauv ib lub vojvoog ntawm ib lossis ob tus nas nyem thiab ua tiav zoo nrog GitHub Kev Ua. Docker sau npe kev txhawb nqa hauv cov dawb version kuj yog qhov zoo dua.
  • GitHub zais cov lus zais hauv kev tsim cov cav, yog li siv nws los khaws cov passwords thiab tokens tsis yog qhov txaus ntshai. Thaum tag nrho kuv cov kev sim, kuv yeej tsis tuaj yeem pom qhov zais cia hauv nws daim ntawv ntshiab hauv console.
  • Dawb rau Open Source tej yaam num

Txais:

  • YML, zoo, kuv tsis nyiam nws. Thaum ua hauj lwm nrog xws li ib tug ntws, feem ntau cov lus cog lus kuv muaj yog "kho yml hom", ces koj tsis nco qab muab ib tug tab nyob rau hauv ib qho chaw, los yog koj sau nws nyob rau hauv tsis ncaj ncees lawm kab. Feem ntau, zaum pem hauv ntej ntawm ib qho screen nrog tus protractor thiab tus pas ntsuas tsis yog qhov kev paub zoo tshaj plaws.
  • DEBUG, debugging qhov ntws nrog commits, khiav ib tug rebuild, thiab outputting rau lub console tsis yog ib txwm yooj yim, tab sis nws yog ntau ntawm cov "koj nyob nraum overdone" qeb; koj tau siv los ua hauj lwm nrog yooj yim IDEA, thaum koj yuav debug dab tsi .
  • Koj tuaj yeem sau koj qhov kev txiav txim ntawm txhua yam yog tias koj qhwv nws hauv Docker, tab sis tsuas yog javascript yog ib txwm txhawb nqa, tau kawg qhov no yog qhov teeb meem ntawm saj, tab sis kuv xav tau lwm yam tsis yog js.

Cia kuv ceeb toom rau koj tias lub chaw cia khoom nrog tag nrho cov ntawv sau nyob ntawm no: github.com/antkorwin/github-actions

Lub lim tiam tom ntej kuv yuav ua yeeb yam nrog qhia ntawm Heisenbug 2020 Piter lub rooj sib tham. Kuv yuav qhia koj tsis yog yuav ua li cas kom tsis txhob ua yuam kev thaum npaj cov ntaub ntawv xeem, tab sis kuj qhia kuv cov lus zais ntawm kev ua haujlwm nrog cov ntaub ntawv teev hauv Java daim ntawv thov!

Tau qhov twg los: www.hab.com