GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

Java တွင် တည်ဆောက်ရေး ပရောဂျက်များအတွက် ပိုက်လိုင်းတစ်ခု မကြာခဏ ဆောက်ရတတ်သည်။ တစ်ခါတစ်ရံတွင် ၎င်းသည် open source ဖြစ်ပြီး တစ်ခါတစ်ရံ မဟုတ်ပါ။ Travis-CI နှင့် TeamCity မှ GitHub Actions သို့ ကျွန်ုပ်၏ သိုလှောင်ရာနေရာအချို့ကို မကြာသေးမီကမှ ရွှေ့ရန် ဆုံးဖြတ်ခဲ့ပြီး ၎င်းသည် ၎င်းမှ ထွက်ပေါ်လာသည်။

ကျွန်ုပ်တို့သည် အဘယ်အရာကို အလိုအလျောက်လုပ်ဆောင်မည်နည်း။

ပထမဦးစွာ၊ ကျွန်ုပ်တို့ အလိုအလျောက်လုပ်ဆောင်မည့် ပရောဂျက်တစ်ခု လိုအပ်သည်၊ Spring boot / Java 11 / Maven တွင် အက်ပလီကေးရှင်းလေးတစ်ခု ပြုလုပ်ကြပါစို့။ ဤဆောင်းပါး၏ရည်ရွယ်ချက်အတွက်၊ ကျွန်ုပ်တို့သည် အပလီကေးရှင်းယုတ္တိကို လုံးဝစိတ်မဝင်စားပါ၊ အပလီကေးရှင်းတစ်ဝိုက်ရှိ အခြေခံအဆောက်အအုံသည် ကျွန်ုပ်တို့အတွက် အရေးကြီးသည်၊ ထို့ကြောင့် ရိုးရိုး REST API ထိန်းချုပ်သူသည် ကျွန်ုပ်တို့အတွက် လုံလောက်ပါလိမ့်မည်။

အရင်းအမြစ်များကို ဤနေရာတွင် ကြည့်ရှုနိုင်သည်- github.com/antkorwin/github-actions ပိုက်လိုင်းတည်ဆောက်ခြင်း အဆင့်အားလုံးသည် ဤပရောဂျက်အတွက် ဆွဲထုတ်တောင်းဆိုမှုများတွင် ထင်ဟပ်နေသည်။

JIRA နဲ့ စီစဉ်နေပါတယ်။

ကျွန်ုပ်တို့သည် JIRA ကို ပြဿနာခြေရာခံစနစ်အဖြစ် အသုံးပြုလေ့ရှိသောကြောင့် ဤပရောဂျက်အတွက် သီးခြားဘုတ်တစ်ခုကို ဖန်တီးပြီး ယင်းတွင် ပထမဆုံးပြဿနာများကို ထည့်လိုက်ကြပါစို့။

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

ခဏအကြာတွင် JIRA နှင့် GitHub ပေါင်းစပ်၍ ပေးစွမ်းနိုင်သည့် စိတ်ဝင်စားစရာကောင်းသောအရာများကို ပြန်သွားပါမည်။

ကျွန်ုပ်တို့သည် ပရောဂျက်၏ စည်းဝေးပွဲကို အလိုအလျောက်လုပ်သည်။

ကျွန်ုပ်တို့၏စမ်းသပ်မှုပရောဂျက်ကို maven မှတစ်ဆင့်တည်ဆောက်ထားသောကြောင့်တည်ဆောက်ခြင်းသည်အတော်လေးရိုးရှင်းသည်၊ ကျွန်ုပ်တို့လိုအပ်သမျှမှာ mvn သန့်ရှင်းသောအထုပ်ဖြစ်သည်။

Github လုပ်ဆောင်ချက်များကို အသုံးပြု၍ ၎င်းကိုလုပ်ဆောင်ရန် ကျွန်ုပ်တို့၏လုပ်ငန်းအသွားအလာကိုဖော်ပြသည့် repository တွင် ဖိုင်တစ်ခုဖန်တီးရန် လိုအပ်ပြီး၊ ၎င်းကို ပုံမှန် 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 — ဤသည်မှာ ကျွန်ုပ်တို့၏ ဇာတ်ညွှန်းကို စတင်မည့် ဖြစ်ရပ်၏ ဖော်ပြချက်ဖြစ်သည်။

on- pull_request/push — မာစတာထံ တွန်းအားပေးပြီး ဆွဲယူတောင်းဆိုမှုများကို ဖန်တီးသည့်အခါတိုင်း ဤလုပ်ငန်းအသွားအလာကို စတင်ရန် လိုအပ်ကြောင်း ညွှန်ပြသည်။

အောက်ပါတို့သည် လုပ်ငန်းဆောင်တာများ၏ ဖော်ပြချက်ဖြစ်သည် (အလုပ်အကိုင်အခွင့်အ) နှင့် အကောင်အထည်ဖော်မှု အဆင့်များ (ခြေလှမ်းများ) အလုပ်တစ်ခုစီအတွက်။

run-on - ဤနေရာတွင် ကျွန်ုပ်တို့သည် ပစ်မှတ် OS ကိုရွေးချယ်နိုင်သည်၊ အံ့သြစရာကောင်းသည်မှာ သင်သည် Mac OS ကိုပင်ရွေးချယ်နိုင်သော်လည်း သီးသန့်သိမ်းဆည်းထားသောနေရာများတွင် ၎င်းသည် အလွန်စျေးကြီးသည် (Linux နှင့်နှိုင်းယှဉ်လျှင်)။

အသုံးပြုမှု ဥပမာအားဖြင့်၊ ကျွန်ုပ်တို့ Java 11 အတွက် ပတ်ဝန်းကျင်တွင် ထည့်သွင်းထားသော actions/setup-java လုပ်ဆောင်ချက်ကို အသုံးပြု၍ အခြားလုပ်ဆောင်ချက်များကို ပြန်သုံးနိုင်စေပါသည်။

အားဖြင့် နှင့် ကျွန်ုပ်တို့သည် လုပ်ဆောင်ချက်ကို စတင်သည့် ဘောင်များကို သတ်မှတ်နိုင်သည်၊ အဓိကအားဖြင့် ၎င်းတို့သည် လုပ်ဆောင်ချက်သို့ ပေးပို့မည့် အကြောင်းပြချက်များဖြစ်သည်။

ကျန်တာအားလုံးက Maven နဲ့ project build ကို run ဖို့ပါပဲ။ run: mvn -B clean package အလံ -B ကျွန်ုပ်တို့သည် အပြန်အလှန်တုံ့ပြန်မှုမရှိသောမုဒ်တစ်ခု လိုအပ်သည်ဟုဆိုသည်၊ ထို့ကြောင့် maven သည် ကျွန်ုပ်တို့အား တစ်စုံတစ်ခုမျှမမေးလိုတော့ပါ။

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် 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 }}

စမ်းသပ်မှုများကို ကာမိစေရန်၊ ကျွန်ုပ်သည် jacoco ပလပ်အင်နှင့် တွဲဖက်၍ codecov ကို အသုံးပြုပါသည်။ codecov တွင် ၎င်း၏ကိုယ်ပိုင်လုပ်ဆောင်ချက်ပါရှိသော်လည်း ကျွန်ုပ်တို့၏ဆွဲထုတ်တောင်းဆိုမှုကို လုပ်ဆောင်ရန် တိုကင်တစ်ခု လိုအပ်သည်-

${{ secrets.CODECOV_TOKEN }} — ကျွန်ုပ်တို့သည် ဤတည်ဆောက်မှုကို တစ်ကြိမ်ထက်ပို၍ မြင်တွေ့ရမည်ဖြစ်ပြီး၊ လျှို့ဝှက်ချက်များသည် GitHub တွင် လျှို့ဝှက်ချက်များကို သိမ်းဆည်းရန်အတွက် ယန္တရားတစ်ခုဖြစ်ပြီး၊ ကျွန်ုပ်တို့သည် ထိုနေရာတွင် စကားဝှက်များ/တိုကင်များ/ hosts/urls နှင့် repository code base တွင် မပါဝင်သင့်သော အခြားဒေတာများကို ရေးနိုင်ပါသည်။

GitHub ရှိ repository ဆက်တင်များတွင် လျှို့ဝှက်ပြောင်းလဲမှုတစ်ခုအား သင်ထည့်သွင်းနိုင်သည်-

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

မှာ တိုကင်ရနိုင်ပါတယ်။ codecov.io GitHub မှတစ်ဆင့် ခွင့်ပြုချက်ရရှိပြီးနောက်၊ အများသူငှာ ပရောဂျက်တစ်ခုကို ထည့်ရန် ဤကဲ့သို့သော လင့်ခ်တစ်ခုကို လိုက်နာရန် လိုအပ်သည်- GitHub အသုံးပြုသူအမည်/[repo အမည်]။ သီးသန့်သိုလှောင်ခန်းကိုလည်း ထည့်သွင်းနိုင်သည်၊ ဤသို့လုပ်ဆောင်ရန်၊ သင်သည် Github ရှိ အက်ပ်လီကေးရှင်းအား codecov လုပ်ပိုင်ခွင့်များ ပေးရန်လိုအပ်သည်။

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

POM ဖိုင်သို့ jacoco ပလပ်အင်ကို ထည့်ပါ။

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

ယခု codecov bot သည် ကျွန်ုပ်တို့၏ ဆွဲယူတောင်းဆိုချက်တစ်ခုစီကို ထည့်သွင်းပြီး လွှမ်းခြုံပြောင်းလဲမှုဂရပ်ကို ပေါင်းထည့်ပါမည်-

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

Static Analyzer ကိုထည့်ကြည့်ရအောင်

ကျွန်ုပ်၏ open source ပရောဂျက်အများစုတွင် static code ခွဲခြမ်းစိတ်ဖြာရန်အတွက် sonar cloud ကိုအသုံးပြုသည်၊ ၎င်းသည် travis-ci သို့ချိတ်ဆက်ရန်အတော်လေးလွယ်ကူပါသည်။ ထို့ကြောင့် အလားတူလုပ်ဆောင်ရန် GitHub လုပ်ဆောင်ချက်များသို့ ပြောင်းရွှေ့သည့်အခါ ယုတ္တိရှိသောအဆင့်ဖြစ်သည်။ အက်ရှင်စျေးကွက်သည် အေးမြသောအရာဖြစ်သည်၊ သို့သော် ယခုတစ်ကြိမ်တွင် ကျွန်ုပ်လိုအပ်သောလုပ်ဆောင်ချက်ကို တွေ့ရှိပြီး အလုပ်အသွားအလာတွင် ထည့်သွင်းခဲ့သည်မှာ အကျင့်တစ်ခုကြောင့် ကျွန်ုပ်အား အနည်းငယ်စိတ်လျှော့လိုက်မိပါသည်။ သို့သော် maven သို့မဟုတ် gradle တွင် ပရောဂျက်များကို ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက် sonar သည် လုပ်ဆောင်မှုကို ပံ့ပိုးမပေးကြောင်း တွေ့ရှိရပါသည်။ ဟုတ်ပါတယ်၊ ဒါကို စာရွက်စာတမ်းမှာ ရေးထားပေမယ့် ဘယ်သူက ဖတ်တာလဲ။

လုပ်ဆောင်ချက်တစ်ခုအားဖြင့် မဖြစ်နိုင်ပါ၊ ထို့ကြောင့် 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 မှထုတ်ပေးသော built-in တိုကင်တစ်ခုဖြစ်ပြီး၊ ၎င်းသည် sonarcloud[bot] ၏အကူအညီဖြင့် ကျွန်ုပ်တို့အား မက်ဆေ့ချ်များကို ဆွဲထုတ်ရန်အတွက် Git သို့ လော့ဂ်အင်ဝင်နိုင်မည်ဖြစ်သည်။

Dsonar.projectKey — sonar တွင် ပရောဂျက်အမည်ကို ပရောဂျက်ဆက်တင်များတွင် သင်တွေ့နိုင်ပါသည်။

Dsonar.organization - GitHub မှ အဖွဲ့အစည်းအမည်။

ကျွန်ုပ်တို့သည် တောင်းဆိုချက်တစ်ခုပြုလုပ်ပြီး မှတ်ချက်များတွင် sonarcloud[bot] ဝင်လာရန် စောင့်မျှော်နေပါသည်။

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

ထုတ်ပြန်ကြေငြာချက်

တည်ဆောက်မှုကို ပြင်ဆင်ပြီးပြီ၊ စမ်းသပ်မှုများ လုပ်ဆောင်ပြီးပြီ၊ ကျွန်ုပ်တို့ ထုတ်ဝေနိုင်ပြီဖြစ်သည်။ GitHub လုပ်ဆောင်ချက်များသည် ထုတ်ဝေမှုစီမံခန့်ခွဲမှုကို ပိုမိုလွယ်ကူစေရန် မည်သို့လုပ်ဆောင်နိုင်သည်ကို ကြည့်ကြပါစို့။

အလုပ်တွင်၊ ကျွန်ုပ်တွင် ကုဒ်အခြေခံသည် bitbucket တွင်ရှိသော ပရောဂျက်များရှိသည်။ (အရာအားလုံးသည် “နေ့စဉ်တွင် ကျွန်ုပ်သည် bitbucket သို့ စာရေးပါ၊ ညဘက်တွင် GitHub သို့ ကတိပြုသည်”)။ ကံမကောင်းစွာဖြင့်၊ bitbucket တွင် built-in ထွက်ရှိမှုစီမံခန့်ခွဲမှုကိရိယာများမရှိပါ။ အဘယ်ကြောင့်ဆိုသော် ထုတ်ဝေမှုတစ်ခုစီတိုင်းအတွက် စာမျက်နှာတစ်ခုကို ကိုယ်တိုင်ဖန်တီးပြီး ထိုနေရာတွင် ထုတ်ဝေမှုတွင်ပါရှိသော အင်္ဂါရပ်အားလုံးကို လွှင့်ပစ်ရမည်ဖြစ်ပြီး၊ စိတ်၏ဘုံဗိမာန်များ၊ jira တွင် လုပ်ဆောင်စရာများ၊ သိုလှောင်မှုတွင် လုပ်ဆောင်ပေးသောကြောင့်ဖြစ်သည်။ အမှားလုပ်ရန် အခွင့်အလမ်းများစွာရှိသည်၊ တစ်ခုခုကို မေ့ထားနိုင်သည် သို့မဟုတ် နောက်ဆုံးထွက်ရှိပြီးသား တစ်ခုခုကို ရိုက်ထည့်နိုင်သည်၊ တစ်ခါတစ်ရံတွင် ဆွဲတင်တောင်းဆိုမှုကို အမျိုးအစားခွဲခြားရန် ရိုးရှင်းစွာမသိရသေးပါ - ၎င်းသည် အင်္ဂါရပ်တစ်ခု သို့မဟုတ် ချွတ်ယွင်းချက်ပြင်ဆင်ခြင်းဟုတ်၊ သို့မဟုတ် တည်းဖြတ်စမ်းသပ်မှုများ၊ သို့မဟုတ် အခြေခံအဆောက်အဦတစ်ခုခု။

GitHub လုပ်ဆောင်ချက်များသည် ကျွန်ုပ်တို့ကို မည်သို့ကူညီနိုင်သနည်း။ ကောင်းမွန်တဲ့လုပ်ဆောင်ချက်တစ်ခုရှိပါတယ် - ထုတ်ဝေမှုမူကြမ်းရေးဆွဲသူသည် သင့်အား ဆွဲထုတ်တောင်းဆိုမှုများ၏ အမျိုးအစားများကို သတ်မှတ်ရန်နှင့် ထုတ်ဝေမှုမှတ်စုဖိုင်တွင် အလိုအလျောက်အုပ်စုဖွဲ့ရန် ထုတ်ဝေမှုမှတ်စုဖိုင်ပုံစံကို သတ်မှတ်ခွင့်ပြုသည်-

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် 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 }}

ယခုအချိန်မှစ၍ ဆွဲထုတ်တောင်းဆိုမှုများအားလုံးကို ထုတ်ဝေမှုမှတ်စုများတွင် အလိုအလျောက် စုဆောင်းသွားလိမ့်မည် - မှော်ပညာ။

ဤနေရာတွင် မေးခွန်းပေါ်လာနိုင်သည်- developer များသည် PR တွင် tags များထည့်ရန်မေ့သွားပါက၊ ထို့နောက် ၎င်းကို မည်သည့်အမျိုးအစားတွင် ထည့်သွင်းရမည်ကို ရှင်းလင်းစွာ မသိရသေးဘဲ 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'

ယခုအခါ မည်သည့်ဆွဲငင်မှုတောင်းဆိုချက်မဆို အမျိုးအစား-ပြင်ဆင်မှု၊ အမျိုးအစား-အင်္ဂါရပ်များ၊ အမျိုးအစား-စာရွက်စာတမ်း၊ အမျိုးအစား-စမ်းသပ်မှုများ၊ အမျိုးအစား-သတ်မှတ်မှုတို့ကို အမှတ်အသားပြုရပါမည်။

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

ဆွဲယူတောင်းဆိုမှုများ၏ အလိုအလျောက်မှတ်ချက်

ဆွဲငင်ခြင်းတောင်းဆိုမှုများနှင့် ထိရောက်သောလုပ်ဆောင်မှုကဲ့သို့ ခေါင်းစဉ်တစ်ခုကို ကျွန်ုပ်တို့ ထိတွေ့မိသောကြောင့်၊ အညွှန်းတပ်ခြင်းကဲ့သို့သော လုပ်ဆောင်ချက်တစ်ခုအကြောင်း ပြောဆိုသင့်သည်၊ ၎င်းသည် မည်သည့်ဖိုင်များပြောင်းလဲထားသည်ကိုအခြေခံ၍ PR တွင် တဂ်များကို ထည့်သွင်းထားသည်။ ဥပမာအားဖြင့်၊ လမ်းညွှန်တွင်ပြောင်းလဲမှုများပါ ၀ င်သည့်ဆွဲတင်တောင်းဆိုမှုတိုင်းကို [build] အဖြစ်အမှတ်အသားပြုနိုင်သည်။ .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 လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

GitHub Actions (ssh မှတဆင့်၊ scp မှတဆင့်၊ docker-hub ကိုအသုံးပြုခြင်း) မှတဆင့် ဖြန့်ကျက်ရွေးချယ်စရာများစွာကို ငါကြိုးစားခဲ့ပြီး၊ ဖြစ်နိုင်ချေများသည်မှာ၊ သင်၏ပိုက်လိုင်းမည်မျှကောက်သည်ဖြစ်စေ ဆာဗာသို့ binary ကို အပ်လုဒ်လုပ်ရန် နည်းလမ်းရှာတွေ့နိုင်မည်ဖြစ်သည်။ သည်

အခြေခံအဆောက်အဦတစ်ခုလုံးကို တစ်နေရာတည်းတွင်ထားရှိခြင်း၏ရွေးချယ်ခွင့်ကို ကျွန်တော်နှစ်သက်ပါသည်၊ ထို့ကြောင့် GitHub Packages များတွင် မည်သို့အသုံးချရမည်ကို ကြည့်ကြပါစို့ (၎င်းသည် binary အကြောင်းအရာ၊ npm၊ jar၊ docker အတွက် သိုလှောင်မှုတစ်ခုဖြစ်သည်)။

docker ပုံတစ်ခုတည်ဆောက်ခြင်းနှင့် GitHub Packages များတွင်ထုတ်ဝေခြင်းအတွက် Script

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” ကဲ့သို့သော တည်ဆောက်မှုတစ်ခုသည် သင့်အား လက်ရှိအဆင့်ရှိ variable တစ်ခု၏တန်ဖိုးကို သတ်မှတ်ခွင့်ပြုသည်၊ သို့မှသာ ၎င်းကို အခြားအဆင့်များအားလုံးတွင် ဖတ်နိုင်မည်ဖြစ်သည်။
  • ဤအဆင့်၏ identifier မှတဆင့် ယခင်အဆင့်တွင် သတ်မှတ်ထားသော variable ၏တန်ဖိုးကို သင်ရနိုင်သည်- ${{steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • ပုံမှန် GITHUB_REPOSITORY ကိန်းရှင်သည် သိုလှောင်ရာ၏အမည်နှင့် ၎င်း၏ပိုင်ရှင် (“ပိုင်ရှင်/ပြန်လည်ပို-အမည်”) ကို သိမ်းဆည်းထားသည်။ repository အမည်မှလွဲ၍ ဤစာကြောင်းမှ အရာအားလုံးကို ဖြတ်ရန်အတွက် bash syntax ကို အသုံးပြုပါမည်- ${GITHUB_REPOSITORY#*/}

ထို့နောက် docker image ကိုတည်ဆောက်ရန်လိုအပ်သည်-

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 Packages Repository သို့ ထုတ်ဝေပါ-

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

ပုံ၏ဗားရှင်းကိုညွှန်ပြရန်အတွက်၊ ကျွန်ုပ်တို့သည် commit ၏ SHA hash မှပထမဂဏန်းများကိုအသုံးပြုသည် - GITHUB_SHA သည် ဤနေရာတွင်ထိုကဲ့သို့သောတည်ဆောက်မှုများကို master အဖြစ်ပေါင်းစည်းရုံသာမကဆွဲယူတောင်းဆိုမှုဖန်တီးမှုအရဤနေရာတွင်ထူးခြားချက်များလည်းရှိသည်။ အဖြစ်အပျက်၊ ထို့နောက် SHA သည် git မှတ်တမ်းတွင် ကျွန်ုပ်တို့မြင်ရသော hash နှင့် ကိုက်ညီမည်မဟုတ်ပါ၊ အဘယ်ကြောင့်ဆိုသော် လုပ်ဆောင်ချက်များ/ငွေရှင်းသည့်လုပ်ဆောင်ချက်သည် PR တွင် မသေမချာဖြစ်နေသောလုပ်ဆောင်ချက်များကို ရှောင်ရှားရန် ၎င်း၏ကိုယ်ပိုင်သီးသန့် hash ကို ပြုလုပ်ပေးသောကြောင့်ဖြစ်သည်။

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

အရာအားလုံး ကောင်းမွန်စွာ လုပ်ဆောင်ခဲ့ပါက၊ သိုလှောင်မှုတွင် ပက်ကေ့ဂျ်များ ကဏ္ဍ (https://github.com/antkorwin/github-actions/packages) ကိုဖွင့်ပါ၊ သင်သည် docker ပုံအသစ်ကို တွေ့ရလိမ့်မည်-

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

ထိုနေရာတွင် docker image ၏ဗားရှင်းများစာရင်းကိုလည်း သင်တွေ့နိုင်သည်။

ကျန်ရှိနေသေးသည်မှာ ကျွန်ုပ်တို့၏ဆာဗာကို ဤမှတ်ပုံတင်ခြင်းနှင့်အတူ လုပ်ဆောင်ရန်နှင့် ဝန်ဆောင်မှုကို ပြန်လည်စတင်ရန် ပြင်ဆင်ရန်ဖြစ်သည်။ ဒါကိုစနစ်တကျလုပ်နည်းကို နောက်တစ်ခေါက်လောက်ပြောဖြစ်မယ်ထင်တယ်။

စောင့်ကြည့်လေ့လာခြင်း

ကျွန်ုပ်တို့၏အပလီကေးရှင်းအတွက် GitHub Actions ကိုအသုံးပြု၍ ကျန်းမာရေးစစ်ဆေးနည်းကို ရိုးရှင်းသောရွေးချယ်မှုကို ကြည့်ကြပါစို့။ ကျွန်ုပ်တို့၏ boot application တွင် actuator တစ်ခုပါရှိသည်၊ ထို့ကြောင့် ၎င်း၏ status ကိုစစ်ဆေးရန် API တစ်ခုရေးရန်မလိုအပ်ပါ၊ ကျွန်ုပ်တို့သည် ပျင်းသူများအတွက် အရာအားလုံးကို လုပ်ဆောင်ပြီးဖြစ်သည်။ သင်သည် အိမ်ရှင်ကို ဆွဲထုတ်ရန်သာလိုသည်- 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 ကိုအသုံးပြု၍ ဆာဗာကိုစစ်ဆေးရန် အလုပ်တစ်ခုရေးရန်ဖြစ်ပြီး ရုတ်တရက် အဖြေမပေါ်ပါက၊ ကျွန်ုပ်တို့သည် တယ်လီဂရမ်မှတစ်ဆင့် အကြောင်းကြားစာပေးပို့မည်ဖြစ်သည်။

ပထမဦးစွာ၊ cron workflow ကိုမည်သို့လုပ်ဆောင်ရမည်ကိုရှာဖွေကြပါစို့။

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

ရိုးရှင်းပါတယ်၊ Github မှာ webhooks နဲ့ လုံးဝ မလိုက်ဖက်တဲ့ အဖြစ်အပျက်တွေကို ဖန်တီးနိုင်တယ်ဆိုတာ ယုံတောင်မယုံနိုင်ပါဘူး။ အသေးစိတ်အချက်အလက်များကို စာရွက်စာတမ်းတွင် ဖော်ပြထားသည်။ help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

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"

ပထမဦးစွာ၊ ကျွန်ုပ်တို့သည် တောင်းဆိုချက်ကို ဆာဗာက တုံ့ပြန်သည့် variable တစ်ခုအဖြစ် သိမ်းဆည်းထားပြီး၊ နောက်တစ်ဆင့်တွင် ကျွန်ုပ်တို့သည် အခြေအနေကို UP ဖြစ်နေကြောင်း စစ်ဆေးကာ၊ ထိုသို့မဟုတ်ပါက၊ ထို့နောက် ကျွန်ုပ်တို့သည် အမှားတစ်ခုဖြင့် ထွက်သွားပါသည်။ လုပ်ဆောင်ချက်တစ်ခုကို လက်ဖြင့် “လွှမ်း” ရန် လိုအပ်ပါက၊ ထွက်ပေါက် ၃၁ - သင့်လျော်သောလက်နက်။

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

ယခင်အဆင့်တွင် လုပ်ဆောင်မှု မအောင်မြင်ပါက ကြေးနန်းစာသို့ ပေးပို့ပါသည်။ မက်ဆေ့ချ်ပို့ရန်အတွက် ကျွန်ုပ်တို့သည် appleboy/telegram-action ကိုအသုံးပြုသည်၊ စာရွက်စာတမ်းတွင် bot token နှင့် chat id ကို မည်သို့ရယူရမည်ကို သင်ဖတ်နိုင်သည်- github.com/appleboy/telegram-action

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

Github တွင် လျှို့ဝှက်ချက်များ ရေးသားရန် မမေ့ပါနှင့်။ ဆာဗာအတွက် URL နှင့် တယ်လီဂရမ် ဘော့တ်အတွက် တိုကင်များ။

ပျင်းသူများအတွက် ဘောနပ်စ်ပုဒ် - JIRA

ငါတို့ JIRA ကိုပြန်မယ်လို့ ကတိပေးခဲ့တယ်၊ ငါတို့ပြန်လာပြီ။ ဆော့ဖ်ဝဲရေးသားသူများသည် အင်္ဂါရပ်တစ်ခုပြုလုပ်၍ အကိုင်းအခက်တစ်ခုကို ပေါင်းစည်းလိုက်သောအခါ မတ်တပ်ရပ်လိုက်သည့်အခြေအနေတစ်ခုကို အကြိမ်ရာနှင့်ချီ၍ စောင့်ကြည့်ခဲ့ရသော်လည်း ပြဿနာကို JIRA သို့ ဆွဲယူရန်မေ့သွားခဲ့သည်။ ဤအရာအားလုံးကို တစ်နေရာတည်းတွင် လုပ်ဆောင်ပါက ပိုမိုလွယ်ကူမည်ဖြစ်သော်လည်း အမှန်တကယ်တွင် ကျွန်ုပ်တို့သည် IDE တွင် ကုဒ်ကိုရေးပြီး အကိုင်းအခက်များကို bitbucket သို့မဟုတ် GitHub အတွင်းသို့ ပေါင်းစည်းကာ အလုပ်များကို Jira ထဲသို့ ဆွဲယူပါ၊ ၎င်းအတွက် ကျွန်ုပ်တို့သည် ဝင်းဒိုးအသစ်များကို ဖွင့်ရန် လိုအပ်ပါသည်။ တခါတရံ log in ပြန်ဝင်သည် စသည်တို့ဖြစ်သည်။ သင်ဘာဆက်လုပ်ရမယ်ဆိုတာ ကောင်းကောင်းမှတ်မိတဲ့အခါ ဘုတ်ကိုပြန်ဖွင့်ဖို့ဆိုတာ ဘာအကြောင်းမှမရှိပါဘူး။ ရလဒ်အနေဖြင့်၊ နံနက်ခင်းတွင်သင်အလုပ်ဘုတ်ကိုမွမ်းမံပြင်ဆင်ရန်အချိန်ဖြုန်းရန်လိုအပ်သည်။

GitHub သည် ဤလုပ်ရိုးလုပ်စဉ်လုပ်ငန်းဆောင်တာတွင် ကျွန်ုပ်တို့ကို ကူညီပေးလိမ့်မည်၊ စတင်ရန်အတွက်၊ ကျွန်ုပ်တို့သည် တောင်းဆိုချက်တစ်ခုတင်ပြသောအခါတွင် ပြဿနာများကို code_review ကော်လံသို့ အလိုအလျောက်ဆွဲယူနိုင်သည်။ သင်လုပ်ဆောင်ရန်မှာ ဌာနခွဲအမည်ပေးခြင်းဆိုင်ရာ သဘောတူညီချက်ကို လိုက်နာရန်ဖြစ်သည်-

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

ဥပမာအားဖြင့်၊ ပရောဂျက်ကီး "GitHub Actions" သည် GA ဖြစ်ပါက၊ GA-8-jira-bot GA-8 လုပ်ငန်းကို အကောင်အထည်ဖော်ရန်အတွက် ဌာနခွဲတစ်ခု ဖြစ်နိုင်သည်။

JIRA နှင့် ပေါင်းစည်းခြင်းသည် Atlassian မှ လုပ်ဆောင်ချက်များအားဖြင့် အလုပ်လုပ်သည်၊ ၎င်းတို့သည် ပြီးပြည့်စုံခြင်းမရှိပါ၊ အချို့မှာ ကျွန်ုပ်အတွက် လုံးဝအလုပ်မဖြစ်ဟု ဆိုရပါမည်။ ဒါပေမယ့် ကျိန်းသေအလုပ်လုပ်ပြီး တက်တက်ကြွကြွအသုံးပြုနေတဲ့သူတွေကိုသာ ဆွေးနွေးပါမယ်။

ပထမဦးစွာ သင်သည် လုပ်ဆောင်ချက်- atlassian/gajira-login ကို အသုံးပြု၍ JIRA သို့ ဝင်ရောက်ရန် လိုအပ်သည်။

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 စျေးကွက်တွင် သင်ရှာဖွေပါက၊ ဤလုပ်ငန်းအတွက် လုပ်ဆောင်မှုတစ်ခုကို သင်တွေ့နိုင်သော်လည်း၊ Atlassian မှ ဤလုပ်ဆောင်ချက်သည် ကျွန်ုပ်၏ပရောဂျက်တွင် မည်သည့်နည်းနှင့်မျှ မလုပ်ဆောင်လိုသောကြောင့် grep ဌာနခွဲ၏အမည်ကို အသုံးပြု၍ တူညီသောအရာကို ရေးခဲ့ရပါသည်။ အဲဒီမှာ ဘာမှားနေလဲ အဖြေရှာဖို့ - တူညီတဲ့အရာကို လက်နဲ့လုပ်ရတာထက် ပိုကြာပါတယ်။

ဆွဲထုတ်တောင်းဆိုမှုကို ဖန်တီးသောအခါ ကျန်ရှိသည့်အရာအားလုံးကို "ကုဒ်ပြန်လည်သုံးသပ်ခြင်း" ကော်လံသို့ ရွှေ့ရန်ဖြစ်သည်-

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

GitHub တွင် ၎င်းအတွက် အထူးလုပ်ဆောင်မှုတစ်ခု ရှိသည်၊ ၎င်း၏ လိုအပ်သည်မှာ ယခင်အဆင့်တွင် ရရှိသော ပြဿနာ ID နှင့် အထက်တွင် ပြုလုပ်ခဲ့သည့် JIRA တွင် ခွင့်ပြုချက်ဖြစ်သည်။

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

ထိုနည်းအတူ၊ သင်သည် လုပ်ဆောင်စရာများကို မာစတာသို့ ပေါင်းစည်းသည့်အခါ၊ GitHub အလုပ်အသွားအလာမှ အခြားဖြစ်ရပ်များကို ဆွဲယူနိုင်သည်။ ယေဘူယျအားဖြင့်၊ ၎င်းအားလုံးသည် သင်၏ စိတ်ကူးစိတ်သန်းနှင့် လုပ်ရိုးလုပ်စဉ်များကို အလိုအလျောက်လုပ်ဆောင်လိုသော ဆန္ဒပေါ်တွင် မူတည်ပါသည်။

တွေ့ရှိချက်များ

ဂန္ထဝင် DEVOPS ပုံကြမ်းကို ကြည့်ရင်၊ ဖြစ်နိုင်တာက လည်ပတ်တာကလွဲလို့၊ အဆင့်အားလုံးကို ခြုံငုံမိပြီ၊ သင်ကြိုးစားရင်၊ အကူအညီ-စားပွဲတင်စနစ်နဲ့ ပေါင်းစည်းဖို့အတွက် စျေးကွက်ထဲမှာ လုပ်ဆောင်ချက်အချို့ကို တွေ့နိုင်တာကြောင့် ပိုက်လိုင်းပြောင်းသွားတယ်လို့ ယူဆပါလိမ့်မယ်။ စေ့စေ့စပ်စပ်ဖြစ်ရန်နှင့် ၎င်း၏အသုံးပြုမှုအပေါ်အခြေခံ၍ ကောက်ချက်ဆွဲနိုင်သည်။

GitHub လုပ်ဆောင်ချက်များဖြင့် ငရဲစက်ဝိုင်းများ (Java ပရောဂျက်အတွက် CI/CD ပိုက်လိုင်းတည်ဆောက်ခြင်း)

အပြစ်တွေ:

  • အချိန်တိုင်းအတွက် အဆင်သင့်လုပ်ထားသည့် လုပ်ဆောင်ချက်များပါရှိသော Marketplace၊ ၎င်းသည် အလွန်မိုက်ပါသည်။ ၎င်းတို့အများစုတွင် အလားတူပြဿနာကို ဖြေရှင်းနည်းကို နားလည်ရန် သို့မဟုတ် GitHub သိုလှောင်မှုတွင် စာရေးသူထံ တိုက်ရိုက်ပေးပို့သည့် အင်္ဂါရပ်တောင်းဆိုချက်ကို နားလည်ရန် အရင်းအမြစ်ကုဒ်ကိုလည်း ကြည့်ရှုနိုင်သည်။
  • စည်းဝေးပွဲအတွက် ပစ်မှတ်ပလပ်ဖောင်းကို ရွေးချယ်ခြင်း- Linux၊ mac os၊ windows သည် အတော်လေး စိတ်ဝင်စားစရာကောင်းသည့် အင်္ဂါရပ်တစ်ခုဖြစ်သည်။
  • Github Packages သည် ကောင်းမွန်သောအရာဖြစ်သည်၊ အခြေခံအဆောက်အဦတစ်ခုလုံးကို တစ်နေရာတည်းတွင်ထားရန် အဆင်ပြေသည်၊ မတူညီသော windows မှတဆင့် ဆော့ကစားရန် မလိုအပ်ပါ၊ အရာအားလုံးသည် မောက်စ်ကလစ်တစ်ချက် သို့မဟုတ် နှစ်ခုအကွာအဝေးအတွင်းတွင်ရှိပြီး GitHub Actions နှင့် အပြည့်အဝပေါင်းစပ်ထားသည်။ အခမဲ့ဗားရှင်းတွင် Docker မှတ်ပုံတင်ခြင်းပံ့ပိုးမှုသည် ကောင်းမွန်သောအားသာချက်တစ်ခုလည်းဖြစ်သည်။
  • GitHub သည် တည်ဆောက်မှတ်တမ်းများတွင် လျှို့ဝှက်ချက်များကို ဖုံးကွယ်ထားသောကြောင့် စကားဝှက်များနှင့် တိုကင်များကို သိမ်းဆည်းရန် ၎င်းကိုအသုံးပြုခြင်းသည် ကြောက်စရာမဟုတ်ပါ။ ကျွန်ုပ်၏စမ်းသပ်မှုအားလုံးတွင်၊ ကွန်ဆိုးလ်ရှိ ၎င်း၏သန့်ရှင်းသောပုံစံဖြင့် လျှို့ဝှက်ချက်ကို ဘယ်သောအခါမှ မမြင်နိုင်ပါ။
  • Open Source ပရောဂျက်များအတွက် အခမဲ့

cons:

  • YML၊ ငါ သူ့ကို မကြိုက်ဘူး။ ထိုသို့သောစီးဆင်းမှုဖြင့်လုပ်ဆောင်သောအခါတွင်၊ ကျွန်ုပ်တွင်အသုံးအများဆုံး commit message မှာ "fix yml format" ဖြစ်ပြီး၊ ထို့နောက် tab တစ်ခုကို တစ်နေရာရာမှာထားရန် မေ့သွားခြင်း သို့မဟုတ် မှားယွင်းသောစာကြောင်းပေါ်တွင် ရေးလိုက်ပါ။ ယေဘူယျအားဖြင့်၊ ပရိုတက်တာနှင့် ပေတံဖြင့် ဖန်သားပြင်ရှေ့တွင်ထိုင်ခြင်းသည် အပျော်ဆုံးအတွေ့အကြုံမဟုတ်ပေ။
  • DEBUG၊ commits ဖြင့် စီးဆင်းမှုကို အမှားရှာခြင်း၊ ပြန်လည်တည်ဆောက်ခြင်းနှင့် console သို့ output ထုတ်ပေးခြင်းသည် အမြဲတမ်းအဆင်ပြေသည်မဟုတ်ပါ၊ သို့သော် ၎င်းသည် "သင်လွန်သွားပြီ" အမျိုးအစားထဲမှ သာ၍ဖြစ်သည်၊ သင်သည် မည်သည့်အရာကိုမဆို အမှားရှာနိုင်သည့်အခါတွင် အဆင်ပြေသော IDEA နှင့် အလုပ်လုပ်ဖူးသည်။ .
  • Docker တွင် ရေးထားမည်ဆိုပါက မည်သည့်အရာကိုမဆို ရေးနိုင်သော်လည်း javascript ကိုသာ မူရင်းအတိုင်း ပံ့ပိုးထားသည်၊ ဟုတ်ပါတယ်၊ ဒါက အရသာရှိပေမယ့် js အစား အခြားတစ်ခုခုကို ပိုကြိုက်ပါတယ်။

script များအားလုံးပါရှိသော repository သည် ဤနေရာတွင် ရှိနေကြောင်း သင့်အား သတိပေးပါရစေ။ github.com/antkorwin/github-actions

နောက်တစ်ပတ်မှာ ကျွန်တော်နဲ့အတူ ဖျော်ဖြေမှာပါ။ အစီရင်ခံစာ Heisenbug 2020 Piter ကွန်ဖရင့်တွင် စမ်းသပ်ဒေတာပြင်ဆင်ရာတွင် အမှားအယွင်းများကို ရှောင်ရှားနည်းသာမက Java အပလီကေးရှင်းများတွင် ဒေတာအစုံဖြင့် လုပ်ဆောင်ခြင်းဆိုင်ရာ ကျွန်ုပ်၏လျှို့ဝှက်ချက်များကိုလည်း မျှဝေပေးပါမည်။

source: www.habr.com