የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

በጃቫ ውስጥ ፕሮጀክቶችን ለመገንባት ብዙ ጊዜ የቧንቧ መስመር መገንባት አለብኝ. አንዳንድ ጊዜ ክፍት ምንጭ ነው, አንዳንድ ጊዜ ግን አይደለም. በቅርቡ አንዳንድ ማከማቻዎቼን ከ Travis-CI እና TeamCity ወደ GitHub Actions ለማዛወር ወስኛለሁ፣ እና ከሱ የወጣው ይህ ነው።

ምን እናሰራዋለን?

በመጀመሪያ እኛ በራስ ሰር የምንሰራው ፕሮጀክት እንፈልጋለን፣ በስፕሪንግ ቡት/ጃቫ 11/ማቨን ውስጥ ትንሽ አፕሊኬሽን እንስራ። ለዚህ ጽሁፍ ዓላማ የመተግበሪያውን አመክንዮ ጨርሶ ፍላጎት አይኖረንም፤ በመተግበሪያው ዙሪያ ያለው መሠረተ ልማት ለእኛ አስፈላጊ ነው፣ ስለዚህ ቀላል REST API መቆጣጠሪያ ይበቃናል።

ምንጮቹን እዚህ ማየት ይችላሉ፡- github.com/antkorwin/github-ድርጊት ሁሉም የቧንቧ መስመር ዝርጋታ ደረጃዎች ለዚህ ፕሮጀክት በሚቀርቡ ጥያቄዎች ውስጥ ተንጸባርቀዋል.

JIRA እና እቅድ ማውጣት

እኛ ብዙውን ጊዜ JIRA እንደ ጉዳይ መከታተያ እንጠቀማለን ማለት ተገቢ ነው ፣ ስለሆነም ለዚህ ፕሮጀክት የተለየ ቦርድ እንፍጠር እና የመጀመሪያዎቹን ጉዳዮች እዚያ እንጨምር።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

ከትንሽ ቆይታ በኋላ JIRA እና GitHub በጥምረት ሊያቀርቡ የሚችሉትን አስደሳች ነገሮች እንመለሳለን።

የፕሮጀክቱን ስብስብ አውቶማቲክ እናደርጋለን

የእኛ የሙከራ ፕሮጄክታችን በማቨን በኩል ነው የተገነባው, ስለዚህ እሱን መገንባት በጣም ቀላል ነው, የሚያስፈልገን የ mvn ንጹህ ፓኬጅ ብቻ ነው.

Github Actions ን በመጠቀም ይህንን ለማድረግ በማከማቻው ውስጥ የስራ ሂደትን የሚገልጽ ፋይል መፍጠር አለብን ፣ ይህ በመደበኛ yml ፋይል ሊከናወን ይችላል ፣ “yml programming” እወዳለሁ ማለት አልችልም ፣ ግን ምን ማድረግ እንችላለን - በ .github/ directory workflow/ file build.yml ውስጥ እናደርገዋለን በዚህ ውስጥ ዋናውን ቅርንጫፍ ሲገነቡ ድርጊቶቹን የምንገልጽበት፡-

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 - ይህ የእኛ ስክሪፕት የሚጀመርበት ክስተት መግለጫ ነው።

ላይ፡ pull_request/ግፋ - ለጌታው ግፊት በተደረገ ቁጥር እና የመሳብ ጥያቄዎች በተፈጠሩ ቁጥር ይህ የስራ ሂደት መጀመር እንዳለበት ያመለክታል።

የሚከተለው የተግባር መግለጫ ነው (ስራዎች) እና የማስፈጸሚያ ደረጃዎች (ደረጃዎች) ለእያንዳንዱ ተግባር.

ይሮጣል - እዚህ የታለመውን ስርዓተ ክወና መምረጥ እንችላለን ፣ በሚያስደንቅ ሁኔታ ፣ ማክ ኦኤስን እንኳን መምረጥ ይችላሉ ፣ ግን በግል ማከማቻዎች ላይ ይህ በጣም ውድ ነው (ከሊኑክስ ጋር ሲነፃፀር)።

አጠቃቀሞች ሌሎች ድርጊቶችን እንደገና እንድትጠቀም ይፈቅድልሃል፡ ለምሳሌ፡ የ Java 11 አካባቢን የምንጭነው ድርጊቶች/setup-java action በመጠቀም።

በ እገዛ ጋር ድርጊቱን የምንጀምርባቸውን መለኪያዎች ልንገልጽ እንችላለን፣ በመሠረቱ እነዚህ ወደ ድርጊቱ የሚተላለፉ ክርክሮች ናቸው።

የቀረው የፕሮጀክት ግንባታውን ከ Maven ጋር ማስኬድ ብቻ ነው፡- run: mvn -B clean package ባንዲራ -B ማቨኑ በድንገት አንድ ነገር ሊጠይቀን እንዳይፈልግ መስተጋብራዊ ያልሆነ ሁነታ ያስፈልገናል ይላል።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

በጣም ጥሩ! አሁን፣ ለጌታው በገቡ ቁጥር የፕሮጀክቱ ግንባታ ይጀምራል።

አውቶማቲክ የሙከራ ጅምር

መገጣጠም ጥሩ ነው, ግን በእውነቱ, አንድ ፕሮጀክት በአስተማማኝ ሁኔታ ሊገጣጠም ይችላል, ግን አይሰራም. ስለዚህ, ቀጣዩ ደረጃ የሙከራ ሂደቶችን በራስ-ሰር ማድረግ ነው. በተጨማሪም ፣ የ PR ግምገማ በሚያደርጉበት ጊዜ ፈተናዎችን የማለፍ ውጤቶችን ለመመልከት በጣም ምቹ ነው - በእርግጠኝነት ፈተናዎቹ እንደሚያልፍ እና ማንም ከማዋሃድ በፊት ቅርንጫፎቻቸውን ማስኬድ ረስተዋል ።

የመጎተት ጥያቄን ስንፈጥር ሙከራዎችን እናካሂዳለን እና ወደ ጌታው እንቀላቅላለን ፣ እና በተመሳሳይ ጊዜ በኮድ ሽፋን ላይ ሪፖርት መፍጠርን እንጨምራለን ።

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

ፈተናዎችን ለመሸፈን ከጃኮኮ ፕለጊን ጋር በመተባበር ኮዴኮቭን እጠቀማለሁ። ኮዴኮቭ የራሱ እርምጃ አለው፣ ግን ከጥያቄያችን ጋር ለመስራት ማስመሰያ ያስፈልገዋል፡-

${{ secrets.CODECOV_TOKEN }} - ይህንን ግንባታ ከአንድ ጊዜ በላይ እናየዋለን ፣ ሚስጥሮች በ GitHub ውስጥ ሚስጥሮችን ለማከማቸት ዘዴ ነው ፣ እዚያም የይለፍ ቃሎችን / ቶከኖችን / አስተናጋጆችን / ዩአርኤሎችን እና ሌሎች በማጠራቀሚያ ኮድ መሠረት ውስጥ መካተት የሌለባቸው መረጃዎችን መጻፍ እንችላለን ።

በ GitHub ላይ ባለው የውሂብ ማከማቻ ቅንብሮች ውስጥ ተለዋዋጭ ወደ ሚስጥሮች ማከል ይችላሉ፡

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

ማስመሰያ በ ላይ ማግኘት ይችላሉ። codecov.io በGitHub በኩል ፈቃድ ከሰጠ በኋላ፣ ይፋዊ ፕሮጀክት ለማከል ይህን የመሰለ አገናኝ መከተል ብቻ ያስፈልግዎታል፡- GitHub የተጠቃሚ ስም/[repo ስም] የግል ማከማቻም መጨመር ይቻላል፤ ይህንን ለማድረግ በ Github ውስጥ ላለው መተግበሪያ የኮድኮቭ መብቶችን መስጠት አለብዎት።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

የ jacoco ተሰኪውን ወደ 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>

አሁን የኮድኮቭ ቦት ወደ እያንዳንዳችን የመሳብ ጥያቄ ያስገባል እና የሽፋን ለውጥ ግራፍ ያክላል፡

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

የማይንቀሳቀስ ተንታኝ እንጨምር

በአብዛኛዎቹ ክፍት ምንጭ ፕሮጄክቶቼ ውስጥ የሶናር ደመናን ለስታቲክ ኮድ ትንተና እጠቀማለሁ፣ ከ travis-ci ጋር መገናኘት በጣም ቀላል ነው። ስለዚህ ተመሳሳይ ለማድረግ ወደ GitHub Actions ሲሰደዱ ምክንያታዊ እርምጃ ነው። የድርጊት ገበያው በጣም ጥሩ ነገር ነው, ነገር ግን በዚህ ጊዜ ትንሽ እንዲወድቅ አደረገኝ, ምክንያቱም ከልምዴ የተነሳ የሚያስፈልገኝን እርምጃ አግኝቼ ወደ የስራ ሂደቱ ውስጥ ጨምሬዋለሁ. ነገር ግን ሶናር በ maven ወይም gradle ላይ ያሉ ፕሮጀክቶችን ለመተንተን በድርጊት መስራትን እንደማይደግፍ ታወቀ። በእርግጥ ይህ በሰነዱ ውስጥ ተጽፏል, ግን ማን ያነብበዋል?!

በድርጊት አይቻልም፣ ስለዚህ በ mvn ፕለጊን እናደርገዋለን፡

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 - ላይ ሊገኝ ይችላል sonarcloud.io እና በምስጢር መመዝገብ ያስፈልግዎታል. GITHUB_TOKEN - ይህ GitHub የሚያመነጨው አብሮገነብ ቶከን ነው፣በዚህም እገዛ sonarcloud[bot] ወደ Git ለመግባት በፍላጎት ጥያቄዎች ውስጥ መልዕክቶችን ይተውልን።

Dsonar.projectKey - በ sonar ውስጥ የፕሮጀክቱ ስም, በፕሮጀክቱ መቼቶች ውስጥ ሊያዩት ይችላሉ.

Dsonar.ድርጅት - የድርጅቱ ስም ከ GitHub.

የመሳብ ጥያቄ አቅርበን sonarcloud[bot] በአስተያየቶቹ ውስጥ እስኪመጣ ድረስ እንጠብቃለን።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

የመልቀቂያ አስተዳደር

ግንባታው ተዋቅሯል፣ ፈተናዎቹ ተካሂደዋል፣ እና መልቀቅ እንችላለን። GitHub Actions የመልቀቂያ አስተዳደርን እንዴት ቀላል እንደሚያደርገው እንይ።

በስራ ቦታ ፣ የኮድ መሰረታቸው በbitbucket ውስጥ ያሉ ፕሮጄክቶች አሉኝ (ሁሉም ነገር እንደዚያ ታሪክ ነው “በቀን ወደ ቢትቡኬት እጽፋለሁ ፣ በምሽት ለ GitHub ቃል እጽፋለሁ”)። የአጋጣሚ ነገር ሆኖ ቢትቡኬት አብሮገነብ የመልቀቂያ አስተዳደር መሳሪያዎች የሉትም። ይህ ችግር ነው, ምክንያቱም ለእያንዳንዱ ልቀቶች በእጅዎ ውስጥ አንድ ገጽ መፍጠር እና በመልቀቂያው ውስጥ የተካተቱትን ሁሉንም ባህሪያት እዚያ መወርወር አለብዎት, የአዕምሮ ቤተመንግስቶችን ይፈልጉ, በጂራ ውስጥ ያሉ ተግባራት, በማከማቻው ውስጥ ይፈጸማሉ. ስህተት ለመስራት ብዙ እድሎች አሉ ፣ የሆነ ነገር መርሳት ወይም ባለፈው ጊዜ የተለቀቀውን ነገር ማስገባት ይችላሉ ፣ አንዳንድ ጊዜ የመሳብ ጥያቄን ምን እንደሚመድቡ ግልፅ አይደለም - ባህሪ ወይም የሳንካ ጥገና ፣ ወይም የአርትዖት ሙከራዎች ፣ ወይም መሠረተ ልማት የሆነ ነገር .

የ GitHub ድርጊቶች እንዴት ሊረዱን ይችላሉ? በጣም ጥሩ ተግባር አለ - የመልቀቂያ ንድፍ አውጪ፣ የመልቀቂያ ማስታወሻዎች ፋይል አብነት እንዲያዘጋጁ ይፈቅድልዎታል የመሳብ ጥያቄዎች ምድቦችን ለማዘጋጀት እና በራስ-ሰር በመልቀቂያ ማስታወሻ ደብተር ውስጥ ያቧድኗቸው።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

ዘገባን የማዘጋጀት ምሳሌ አብነት (.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

ረቂቅ ልቀት ለማመንጨት ስክሪፕት ያክሉ (.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 }}

ከአሁን በኋላ ሁሉም የመሳብ ጥያቄዎች በራስ-ሰር በመልቀቂያ ማስታወሻዎች ውስጥ ይሰበሰባሉ - አስማት!

እዚህ ጥያቄው ሊነሳ ይችላል-ገንቢዎቹ በ PR ውስጥ መለያዎችን ማስቀመጥ ቢረሱስ? ከዚያ የትኛውን ምድብ እንደሚያስቀምጠው ግልጽ አይደለም, እና እንደገና ከእያንዳንዱ PR ጋር በተናጠል ከእሱ ጋር መገናኘት ይኖርብዎታል. ይህንን ችግር ለመፍታት ሌላ እርምጃ መጠቀም እንችላለን - መለያ አረጋጋጭ - በመጎተት ጥያቄ ላይ መለያዎች መኖራቸውን ያረጋግጣል። ምንም አስፈላጊ መለያዎች ከሌሉ ቼኩ አይሳካም እና ስለዚህ ጉዳይ በጉትት ጥያቄያችን ውስጥ መልእክት እናያለን።

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'

አሁን ማንኛውም የፑል-ጥያቄ ከታጎች በአንዱ ምልክት መደረግ አለበት፡ አይነት፡ፊክስ፡ አይነት፡ባህሪዎች፡ አይነት፡ሰነድ፡ አይነት፡ፈተናዎች፡ አይነት፡config.

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

የመሳብ ጥያቄዎችን በራስ-ማብራሪያ

እንደዚህ አይነት ርዕስ እንደ ውጤታማ ስራ ከጎትት ጥያቄዎች ጋር ስለነካን፣ ስለ እንደዚህ አይነት ድርጊት እንደ መለያ ሰሪ ማውራት ጠቃሚ ነው፣ በየትኞቹ ፋይሎች እንደተቀየሩ በ PR ውስጥ መለያዎችን ያስቀምጣል። ለምሳሌ፣ በማውጫው ላይ የተደረጉ ለውጦችን የያዘ ማንኛውንም የመሳብ ጥያቄ እንደ [ግንባት] ምልክት ማድረግ እንችላለን .github/workflow.

እሱን ማገናኘት በጣም ቀላል ነው-

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

እንዲሁም በፕሮጀክት ማውጫዎች እና በመጎተቻ ጥያቄ ርእሶች መካከል ያለውን ግንኙነት የሚገልጽ ፋይል እንፈልጋለን፡-

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

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

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

theme:documentation:
  - "docs/**"

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

የፍላጎት መጠየቂያዎችን በራስ ሰር የሚያስቀምጥን ተግባር አስፈላጊ መለያዎች መኖራቸውን ከሚፈትሽ እርምጃ ጋር በማጣመር አልተሳካልኝም ፤ ግጥሚያ-መለያ በቦት የታከሉ መለያዎችን ማየት አይፈልግም። ሁለቱንም ደረጃዎች የሚያጣምረው የራስዎን ድርጊት ለመጻፍ ቀላል ይመስላል. ግን በዚህ ቅጽ ውስጥ እንኳን ለመጠቀም በጣም ምቹ ነው ፣ የመሳብ ጥያቄ ሲፈጥሩ ከዝርዝሩ ውስጥ መለያ መምረጥ ያስፈልግዎታል።

ለማሰማራት ጊዜው አሁን ነው።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

በ GitHub Actions (በssh፣ በ scp እና docker-hub በመጠቀም) ብዙ የማሰማራት አማራጮችን ሞክሬ ነበር፣ እና እኔ ማለት እችላለሁ፣ ምናልባትም፣ የቧንቧ መስመርዎ የቱንም ያህል ጠማማ ቢሆን ሁለትዮሽውን ወደ አገልጋዩ የሚሰቅሉበት መንገድ ያገኛሉ። ነው።

መላውን መሠረተ ልማት በአንድ ቦታ የማቆየት ምርጫን ወደድኩኝ፣ ስለዚህ ወደ GitHub ፓኬጆች እንዴት እንደሚሰማሩ እንይ (ይህ የሁለትዮሽ ይዘት፣ npm፣ jar፣ docker ማከማቻ ነው)።

ዶከር ምስል ለመገንባት እና በ 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 }}"

በመጀመሪያ የኛን መተግበሪያ የ JAR ፋይል መገንባት አለብን, ከዚያ በኋላ ወደ GitHub docker መዝገብ ቤት የሚወስደውን መንገድ እና የምስላችንን ስም እናሰላለን. እስካሁን ያላጋጠሙን ጥቂት ዘዴዎች እዚህ አሉ፡-

  • ግንባታ እንደ፡ echo ":: set-output name=NAME:: VALUE" የተለዋዋጭውን ዋጋ አሁን ባለው ደረጃ እንዲያዋቅሩ ይፈቅድልሃል፣ በዚህም በሁሉም ደረጃዎች ይነበባል።
  • በቀደመው ደረጃ የተቀመጠውን የተለዋዋጭ እሴት በዚህ ደረጃ መለያ በኩል ማግኘት ይችላሉ፡ ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • መደበኛው GITHUB_REPOSITORY ተለዋዋጭ የማከማቻውን ስም እና የባለቤቱን ("የባለቤት/ስም ስም") ያከማቻል። ከማከማቻው ስም በስተቀር ሁሉንም ነገር ከዚህ መሾመር ለመቁረጥ የባሽ አገባብ እንጠቀማለን፡ ${GITHUB_REPOSITORY#*/}

በመቀጠል የመትከያውን ምስል መገንባት ያስፈልገናል:

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

ወደ መዝገቡ ይግቡ፡-

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

እና ምስሉን ወደ GitHub ጥቅል ማከማቻ ያትሙ፡-

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

የምስሉን እትም ለማመልከት ከ SHA ሃሽ የመጀመሪያ አሃዞችን እንጠቀማለን - GITHUB_SHA እዚህም ልዩነቶች አሉ ፣ እንደዚህ ያሉ ግንባታዎችን ወደ ዋና ሲዋሃዱ ብቻ ሳይሆን በፍላጎት ጥያቄ ፍጥረት መሠረትም እንዲሁ እዚህ አሉ ። ክስተት፣ ከዚያ SHA በgit ታሪክ ውስጥ ከምናየው ሃሽ ጋር ላይስማማ ይችላል፣ ምክንያቱም ድርጊቶች/ቼክአውት ድርጊቱ በPR ውስጥ ገዳይ እርምጃዎችን ለማስወገድ የራሱ የሆነ ልዩ ሃሽ ስለሚያደርግ።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

ሁሉም ነገር በጥሩ ሁኔታ ከሰራ፣ከዚያ የጥቅል ክፍሉን (https://github.com/antkorwin/github-actions/packages) በመጋዘኑ ውስጥ በመክፈት አዲስ የመትከያ ምስል ያያሉ።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

እዚያም የመክተቻውን ምስል ስሪቶች ዝርዝር ማየት ይችላሉ.

የቀረው የእኛ አገልጋይ ከዚህ መዝገብ ጋር እንዲሰራ ማዋቀር እና አገልግሎቱን እንደገና ማስጀመር ነው። እኔ ምናልባት ሌላ ጊዜ systemd በኩል ይህን እንዴት ማድረግ እንደሚችሉ እናገራለሁ.

ክትትል

GitHub Actions ን በመጠቀም ለመተግበሪያችን እንዴት የጤና ምርመራ ማድረግ እንዳለብን አንድ ቀላል አማራጭ እንመልከት። የኛ የማስነሻ መተግበሪያ አንቀሳቃሽ አለው፣ ስለዚህ ሁኔታውን ለመፈተሽ ኤፒአይ መፃፍ እንኳን አያስፈልገንም፤ ሁሉንም ነገር ለሰነፎች አድርገናል። አስተናጋጁን መሳብ ብቻ ያስፈልግዎታል: 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"}

የሚያስፈልገንን ክሮን በመጠቀም አገልጋዩን ለመፈተሽ አንድ ተግባር መፃፍ ብቻ ነው, እና በድንገት ካልመለሰልን, ከዚያም በቴሌግራም በኩል ማሳወቂያ እንልካለን.

በመጀመሪያ ፣ የ cron የስራ ፍሰት እንዴት እንደሚሰራ እንወቅ-

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

ቀላል ነው፣ በ Github ውስጥ በጭራሽ ከዌብ መንጠቆዎች ጋር የማይጣጣሙ ክስተቶችን መፍጠር እንደምትችል ማመን አልችልም። ዝርዝሩ በሰነዱ ውስጥ አለ፡- help.github.com/en/actions/reference/events-that-trigger-workflows#የታቀዱ-ክስተቶች-መርሃግብር

የአገልጋዩን ሁኔታ በእጅ በመጠምዘዝ እንፈትሽ፡-

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"

በመጀመሪያ ፣ አገልጋዩ ለጥያቄው ምላሽ የሰጠውን በተለዋዋጭ ውስጥ እናስቀምጣለን ፣ በሚቀጥለው ደረጃ ሁኔታው ​​ከፍ ያለ መሆኑን እናረጋግጣለን እና ይህ ካልሆነ ፣ ከዚያ በስህተት እንወጣለን ። አንድን ድርጊት በእጆችዎ "መጨናነቅ" ከፈለጉ፣ ከዚያ መውጫ 1 - ተስማሚ መሣሪያ.

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

ወደ ቴሌግራም የምንልከው ድርጊቱ ባለፈው እርምጃ ካልተሳካ ብቻ ነው። መልእክት ለመላክ አፕልቦይ/ቴሌግራም-አክሽን እንጠቀማለን፤ በሰነዱ ውስጥ የቦት ቶከን እና የውይይት መታወቂያ እንዴት እንደሚያገኙ ማንበብ ይችላሉ፡- github.com/appleboy/telegram-action

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

ምስጢሮችን በ Github: URL ለአገልጋዩ እና ለቴሌግራም ቦት ማስመሰያዎች መጻፍ እንዳትረሱ።

የጉርሻ ትራክ - JIRA ለሰነፎች

ወደ JIRA እንደምንመለስ ቃል ገባሁ፣ እናም ተመልሰናል። በመቶዎች ለሚቆጠሩ ጊዜያት ገንቢዎች አንድ ባህሪ ሲሰሩ፣ ቅርንጫፍ ሲያዋህዱ፣ ነገር ግን ጉዳዩን ወደ JIRA መጎተትን ረስተው በቆሙበት ጊዜ አንድ ሁኔታን ተመልክቻለሁ። በእርግጥ ይህ ሁሉ በአንድ ቦታ ላይ ቢደረግ ቀላል ይሆናል ነገር ግን በ IDE ውስጥ ኮድ እንጽፋለን, ቅርንጫፎችን ወደ bitbucket ወይም GitHub እንቀላቅላለን, ከዚያም ተግባራቶቹን ወደ ጂራ ይጎትቱታል, ለዚህም አዲስ መስኮቶችን መክፈት ያስፈልገናል. ፣ አንዳንድ ጊዜ እንደገና ይግቡ እና ወዘተ. ቀጥሎ ምን ማድረግ እንዳለቦት በሚገባ በሚያስታውሱበት ጊዜ ቦርዱን እንደገና ለመክፈት ምንም ፋይዳ የለውም. በውጤቱም, ጠዋት ላይ በቆመበት ቦታ ላይ የተግባር ሰሌዳውን ለማዘመን ጊዜ ማሳለፍ ያስፈልግዎታል.

GitHub በዚህ መደበኛ ተግባር ውስጥም ይረዳናል፤ ለጀማሪዎች የመጎተት ጥያቄ ስናቀርብ ችግሮችን በራስ-ሰር ወደ ኮድ_ግምገማ አምድ መጎተት እንችላለን። እርስዎ ማድረግ የሚጠበቅብዎት የቅርንጫፉን ስም ኮንቬንሽን መከተል ብቻ ነው፡-

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

ለምሳሌ የፕሮጀክት ቁልፍ "GitHub Actions" GA ከሆነ GA-8-jira-bot የ GA-8 ተግባርን ለመተግበር ቅርንጫፍ ሊሆን ይችላል.

ከጂአይአርኤ ጋር መቀላቀል ከአትላሲያን በተደረጉ ድርጊቶች ይሰራል፣ ፍፁም አይደሉም፣ አንዳንዶቹ ለእኔ ምንም አልሰሩም ማለት አለብኝ። ግን በእርግጠኝነት የሚሰሩ እና በንቃት ጥቅም ላይ የዋሉትን ብቻ እንነጋገራለን.

በመጀመሪያ እርምጃውን በመጠቀም ወደ JIRA መግባት አለብዎት: 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 }}

ይህንን ለማድረግ በ JIRA ውስጥ ማስመሰያ ማግኘት ያስፈልግዎታል ፣ ይህንን እንዴት ማድረግ እንደሚቻል እዚህ ተብራርቷል- confluence.atlassian.com/cloud/api-tokens-938839638.html

የተግባር መለያውን ከቅርንጫፉ ስም እናወጣለን፡-

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

በ GitHub የገበያ ቦታ ላይ ከፈለግክ, ለዚህ ተግባር አንድ እርምጃ ልታገኝ ትችላለህ, ነገር ግን የቅርንጫፉን ስም በመጠቀም grep ን በመጠቀም ተመሳሳይ ነገር መጻፍ ነበረብኝ, ምክንያቱም ይህ የአትላሲያን እርምጃ በምንም መልኩ በፕሮጄክቴ ላይ መስራት አልፈለገም. , እዚያ ምን ችግር እንዳለ ለማወቅ - በእጆችዎ ተመሳሳይ ነገር ከማድረግ ይረዝማል.

የቀረው ሁሉ የመጎተት ጥያቄን በሚፈጥሩበት ጊዜ ተግባሩን ወደ "የኮድ ግምገማ" አምድ መውሰድ ነው፡-

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

ለዚህ በ GitHub ላይ ልዩ እርምጃ አለ፣ የሚያስፈልገው በቀድሞው ደረጃ የተገኘው የጉዳይ መታወቂያ እና ከላይ ያደረግነው በJIRA ውስጥ ያለው ፍቃድ ነው።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

በተመሳሳይ መንገድ, ወደ ጌታው ሲዋሃዱ ስራዎችን እና ሌሎች ክስተቶችን ከ GitHub የስራ ፍሰት መጎተት ይችላሉ. በአጠቃላይ, ሁሉም ነገር በእርስዎ ምናብ እና የተለመዱ ሂደቶችን በራስ-ሰር የማድረግ ፍላጎት ይወሰናል.

ግኝቶች

ክላሲክ DEVOPS ዲያግራም ከተመለከቱ ፣ ምናልባት ከመንቀሳቀስ በስተቀር ሁሉንም ደረጃዎች ሸፍነናል ፣ ከሞከሩ ፣ ከእርዳታ-ጠረጴዛ ስርዓት ጋር ለመዋሃድ በገበያ ውስጥ አንዳንድ እርምጃዎችን ማግኘት ይችላሉ ፣ ስለሆነም የቧንቧ መስመር እንደተለወጠ እንገምታለን ። በትክክል እና በአጠቃቀሙ ላይ በመመስረት መደምደሚያዎች ሊደረጉ ይችላሉ።

የገሃነም ክበቦች በ GitHub Actions (ለጃቫ ፕሮጀክት CI/CD ቧንቧ መገንባት)

ምርቶች

  • ለሁሉም አጋጣሚዎች ዝግጁ የሆኑ ድርጊቶች ያሉት የገበያ ቦታ ይህ በጣም አሪፍ ነው። በአብዛኛዎቹ ውስጥ፣ ተመሳሳይ ችግር እንዴት እንደሚፈታ ለመረዳት የምንጭ ኮዱን መመልከት ወይም የባህሪ ጥያቄን በቀጥታ በ GitHub ማከማቻ ውስጥ ለጸሃፊው መለጠፍ ይችላሉ።
  • ለመገጣጠም የታለመውን መድረክ መምረጥ፡ ሊኑክስ፣ ማክ ኦስ፣ ዊንዶውስ በጣም አስደሳች ባህሪ ነው።
  • የ Github ፓኬጆች በጣም ጥሩ ነገር ነው, መላውን መሠረተ ልማት በአንድ ቦታ ለማስቀመጥ አመቺ ነው, በተለያዩ መስኮቶች ውስጥ ማሰስ አያስፈልግዎትም, ሁሉም ነገር በአንድ ወይም በሁለት የመዳፊት ጠቅታዎች ራዲየስ ውስጥ ነው እና ከ GitHub ድርጊቶች ጋር ፍጹም የተዋሃደ ነው. በነጻው ስሪት ውስጥ የዶከር መዝገብ ቤት ድጋፍ እንዲሁ ጥሩ ጥቅም ነው።
  • GitHub በግንባታ ሎግ ውስጥ ሚስጥሮችን ይደብቃል፣ ስለዚህ የይለፍ ቃሎችን እና ቶከኖችን ለማከማቸት መጠቀም ያን ያህል አስፈሪ አይደለም። በሙከራዎቼ ጊዜ ሁሉ ምስጢሩን በኮንሶሉ ውስጥ በንጹህ መልክ ማየት አልቻልኩም።
  • ለክፍት ምንጭ ፕሮጀክቶች ነፃ

Cons:

  • YML፣ ደህና፣ አልወደውም። ከእንደዚህ አይነት ፍሰት ጋር በሚሰሩበት ጊዜ, እኔ ያለኝ በጣም የተለመደው የቃል መልእክት "fix yml format" ነው, ከዚያ የሆነ ቦታ ላይ ትርን ማኖር ይረሳሉ, ወይም በተሳሳተ መሾመር ላይ ይፃፉ. በአጠቃላይ ፣ ከፕሮትራክተር እና ገዥ ጋር በስክሪኑ ፊት መቀመጥ በጣም አስደሳች ተሞክሮ አይደለም።
  • ማረም፣ ፍሰቱን በፈጸሙት ማረም፣ መልሶ ግንባታን ማስኬድ እና ወደ ኮንሶሉ ማውጣቱ ሁልጊዜ ምቹ አይደለም፣ ነገር ግን ከ "ከበዛብህ" ምድብ የበለጠ ነው፤ ማንኛውንም ነገር ማረም በምትችልበት ጊዜ ከሚመች IDEA ጋር ለመስራት ተለምደሃል። .
  • ድርጊትህን በዶከር ከጠቀልከው በማንኛውም ነገር ላይ መፃፍ ትችላለህ፣ነገር ግን ጃቫስክሪፕት ብቻ ነው የሚደገፈው፣በእርግጥ ይህ የጣዕም ጉዳይ ነው፣ነገር ግን ከ js ይልቅ ሌላ ነገር እመርጣለሁ።

ሁሉንም ስክሪፕቶች የያዘው ማከማቻ እዚህ እንዳለ ላስታውስህ፡ github.com/antkorwin/github-ድርጊት

በሚቀጥለው ሳምንት እኔ ጋር ትዕይንት ይሆናል ሪፖርት አድርግ በሃይሴንቡግ 2020 ፒተር ኮንፈረንስ። የሙከራ ውሂብን በሚያዘጋጁበት ጊዜ ስህተቶችን እንዴት ማስወገድ እንደሚችሉ ብቻ ሳይሆን በጃቫ አፕሊኬሽኖች ውስጥ ከዳታ ስብስቦች ጋር የመሥራት ምስጢሮቼን እነግራችኋለሁ!

ምንጭ: hab.com