Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Sau da yawa dole in gina bututun gine-gine a Java. Wani lokaci yana buɗe tushen, wani lokacin ba haka bane. Kwanan nan na yanke shawarar ƙoƙarin motsa wasu ma'ajiyar tawa daga Travis-CI da TeamCity zuwa GitHub Actions, kuma wannan shine abin da ya fito daga ciki.

Me za mu yi ta atomatik?

Da farko, muna buƙatar aikin da za mu sarrafa ta atomatik, bari mu yi ƙaramin aikace-aikacen a cikin boot boot / Java 11 / Maven. Don dalilan wannan labarin, ba za mu yi sha'awar dabarun aikace-aikacen kwata-kwata ba; kayan aikin da ke kewaye da aikace-aikacen suna da mahimmanci a gare mu, don haka mai sauƙin REST API mai sarrafa zai ishe mu.

Kuna iya duba majiyoyin anan: github.com/antkorwin/github-actions Dukkan matakai na gina bututu suna nunawa a cikin buƙatun ja na wannan aikin.

JIRA da tsarawa

Yana da kyau a ce mu yawanci muna amfani da JIRA a matsayin mai bin diddigin lamarin, don haka bari mu ƙirƙiri kwamiti daban don wannan aikin kuma mu ƙara batutuwan farko a can:

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Nan gaba kadan za mu koma ga abubuwan ban sha'awa JIRA da GitHub zasu iya bayarwa a hade.

Muna sarrafa ta atomatik taro na aikin

An gina aikin gwajin mu ta hanyar maven, don haka gina shi abu ne mai sauƙi, duk abin da muke buƙata shine kunshin mvn mai tsabta.

Don yin wannan ta amfani da Ayyukan Github, za mu buƙaci ƙirƙirar fayil a cikin ma'ajin da ke kwatanta aikinmu, ana iya yin wannan tare da fayil na yml na yau da kullum, Ba zan iya cewa ina son "iml shirye-shirye", amma menene zamu iya yi - muna yin shi a cikin .github/ directory workflow/ file build.yml a cikin abin da za mu bayyana ayyukan lokacin gina babban reshe:

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 - wannan shi ne bayanin taron da za a kaddamar da rubutun mu a kansa.

kan: pull_request/push - yana nuna cewa ana buƙatar ƙaddamar da wannan aikin a duk lokacin da aka yi turawa ga maigidan kuma an ƙirƙiri buƙatun ja.

Mai zuwa shine bayanin ayyukan (jobs) da matakan aiwatarwa (matakai) ga kowane aiki.

gudu-on - Anan za mu iya zaɓar OS da aka yi niyya, abin mamaki, har ma za ku iya zaɓar Mac OS, amma a kan ma'ajiyar sirri wannan yana da tsada sosai (idan aka kwatanta da Linux).

amfani yana ba ku damar sake amfani da wasu ayyuka, misali, ta amfani da ayyuka/saitin-java mataki da muke shigar da mahalli don Java 11.

Tare da taimakon tare da za mu iya ƙayyade sigogin da muke ƙaddamar da aikin da su, ainihin waɗannan su ne muhawarar da za a wuce zuwa aikin.

Abin da ya rage shi ne gudanar da ginin aikin tare da Maven: run: mvn -B clean package tuta -B ya ce muna buƙatar yanayin da ba ya hulɗa da shi don kada maven ba zato ba tsammani ya so ya tambaye mu wani abu

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Mai girma! Yanzu, duk lokacin da kuka yi wa maigidan, aikin ginin yana farawa.

Ƙaddamar da gwaji ta atomatik

Taro yana da kyau, amma a gaskiya, ana iya haɗa aikin cikin aminci, amma ba aiki ba. Don haka, mataki na gaba shine sarrafa ayyukan gwajin ta atomatik. Bugu da kari, yana da matukar dacewa don duba sakamakon wucewar gwaje-gwajen lokacin da kuke yin bita na PR - kun san tabbas cewa gwaje-gwajen sun wuce kuma babu wanda ya manta da gudanar da reshe kafin yin haɗin gwiwa.

Za mu gudanar da gwaje-gwaje lokacin ƙirƙirar buƙatun ja da haɗawa cikin maigidan, kuma a lokaci guda za mu ƙara ƙirƙirar rahoto kan rikodin-lambar.

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

Don rufe gwaje-gwaje, Ina amfani da codecov a haɗe tare da jacoco plugin. codecov yana da nasa aikin, amma yana buƙatar alamar aiki tare da buƙatar ja da mu:

${{ secrets.CODECOV_TOKEN }} - za mu ga wannan ginin fiye da sau ɗaya, asirin wata hanya ce ta adana sirri a GitHub, za mu iya rubuta kalmomin shiga / alamomi / runduna / url da sauran bayanan da bai kamata a haɗa su a cikin asusun ajiyar kuɗi ba.

Kuna iya ƙara mai canzawa zuwa ga sirri a cikin saitunan ma'ajin akan GitHub:

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Kuna iya samun alamar a codecov.io Bayan izini ta hanyar GitHub, don ƙara aikin jama'a kawai kuna buƙatar bi hanyar haɗi kamar wannan: Sunan mai amfani GitHub/[repo name]. Hakanan ana iya ƙara ma'ajiyar sirri; don yin wannan, kuna buƙatar ba da haƙƙin codecov ga aikace-aikacen a Github.

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Ƙara plugin ɗin jacoco zuwa fayil ɗin 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>

Yanzu codecov bot zai shigar da kowane buƙatun mu kuma ya ƙara jadawali canjin ɗaukar hoto:

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Bari mu ƙara a tsaye analyzer

A yawancin ayyukan buɗaɗɗen tushena Ina amfani da gajimare na sonar don bincike na lamba, yana da sauƙin haɗi zuwa travis-ci. Don haka yana da ma'ana mataki lokacin ƙaura zuwa GitHub Actions don yin iri ɗaya. Kasuwar aiki abu ne mai sanyi, amma a wannan karon ya ɗan rage mini, saboda saboda al'ada na sami aikin da nake buƙata kuma na ƙara shi cikin aikin aiki. Amma ya juya cewa sonar baya tallafawa aiki ta hanyar aiki don nazarin ayyukan akan maven ko gradle. Tabbas, an rubuta wannan a cikin takardun, amma wa ya karanta?!

Ba zai yiwu ta hanyar aiki ba, don haka za mu yi ta 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 - za a iya samu a sonarcloud.io kuma kana bukatar ka yi rajista a cikin sirri. GITHUB_TOKEN - wannan alama ce da aka gina a ciki wanda GitHub ke samarwa, tare da taimakon wanda sonarcloud[bot] zai iya shiga Git domin ya bar mana saƙonni a cikin buƙatun ja.

Dsonar.projectKey - sunan aikin a cikin sonar, zaka iya ganin shi a cikin saitunan aikin.

Dsonar.kungiyar - sunan kungiyar daga GitHub.

Muna yin buƙatar ja da jira sonarcloud[bot] ya zo a cikin sharhi:

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Gudanar da saki

An tsara ginin, an gudanar da gwaje-gwaje, kuma za mu iya yin saki. Bari mu kalli yadda GitHub Actions zai iya sa sarrafa saki ya fi sauƙi.

A wurin aiki, Ina da ayyukan da tushen lambar su ke cikin bitbucket (komai yana kama da wannan labarin "Na rubuta zuwa bitbucket da rana, yi wa GitHub da dare"). Abin takaici, bitbucket ba shi da ginanniyar kayan aikin sarrafa saki. Wannan matsala ce, saboda kowane saki dole ne ka ƙirƙiri shafi da hannu a cikin haɗuwa kuma jefa duk abubuwan da aka haɗa a cikin sakin a can, bincika cikin fadojin tunani, ayyuka a jira, aikata a cikin ma'ajiyar. Akwai dama da yawa don yin kuskure, kuna iya mantawa da wani abu ko shigar da wani abu da aka riga aka saki a ƙarshe, wani lokacin kawai ba a bayyana abin da za a rarraba buƙatun ja kamar yadda - siffa ce ko gyara kwaro, ko gwaje-gwajen gyara, ko wani abu ababen more rayuwa .

Ta yaya ayyukan GitHub zai iya taimaka mana? Akwai babban aiki - mai tsara sakin saki, yana ba ku damar saita samfurin fayil ɗin bayanin kula don saita nau'ikan buƙatun ja da kuma haɗa su ta atomatik a cikin fayil ɗin bayanin kula:

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Misalin samfuri don kafa rahoto (.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

Ƙara rubutun don samar da daftarin saki (.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 }}

Za a tattara duk buƙatun ja daga yanzu a cikin bayanan saki ta atomatik - sihiri!

Anan tambayar zata iya tashi: menene idan masu haɓakawa suka manta da sanya alamun a cikin PR? Sa'an nan ba a bayyana ko wane nau'in za a saka shi ba, kuma za ku sake yin mu'amala da shi da hannu, tare da kowane PR daban. Don gyara wannan matsalar, za mu iya amfani da wani mataki - mai tabbatar da lakabin - yana bincika kasancewar alamun a kan buƙatar ja. Idan babu alamun da ake buƙata, to cak ɗin zai gaza kuma za mu ga saƙo game da wannan a cikin buƙatun mu na ja.

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'

Yanzu duk wani buƙatar cirewa dole ne a yi masa alama da ɗaya daga cikin tags: type: fix, type:features, type: documents, type: tests, type:config.

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Bayanin buƙatun ja ta atomatik

Tun da mun taɓa irin wannan batu a matsayin aiki mai tasiri tare da buƙatun ja, yana da daraja magana game da irin wannan aikin a matsayin mai lakabi, yana sanya alamomi a cikin PR dangane da abin da aka canza fayiloli. Misali, zamu iya yiwa alama kamar [gina] kowane buƙatun ja wanda ya ƙunshi canje-canje ga kundin adireshi .github/workflow.

Haɗa shi abu ne mai sauƙi:

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

Muna kuma buƙatar fayil ɗin da ke kwatanta wasiƙun da ke tsakanin kuɗaɗen kundayen aikin da batutuwan buƙatun ja:

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

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

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

theme:documentation:
  - "docs/**"

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

Ban yi nasarar haɗa aikin da ke sanya lakabi ta atomatik a cikin buƙatun ja tare da aikin da ke bincika kasancewar alamun da ake buƙata ba; lakabin wasa baya son ganin alamun da bot ɗin ya ƙara. Yana da sauƙi don rubuta aikin ku wanda ya haɗa matakan biyu. Amma ko da a cikin wannan nau'i ya dace sosai don amfani; kuna buƙatar zaɓar lakabi daga lissafin lokacin ƙirƙirar buƙatar ja.

Lokaci yayi da za a tura

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Na gwada zaɓuɓɓukan turawa da yawa ta hanyar GitHub Actions (ta hanyar ssh, ta hanyar scp, da amfani da docker-hub), kuma zan iya cewa, mai yiwuwa, zaku sami hanyar loda binary zuwa uwar garken, komai karkatacciyar bututun ku. shine.

Ina son zaɓin adana duk abubuwan more rayuwa a wuri ɗaya, don haka bari mu kalli yadda ake turawa zuwa GitHub Packages (wannan wurin ajiyar abubuwa ne na binary, npm, jar, docker).

Rubutun don gina hoton docker da buga shi a cikin 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 }}"

Da farko, muna buƙatar gina fayil ɗin JAR na aikace-aikacenmu, bayan haka muna lissafin hanyar zuwa rajistar Docker GitHub da sunan hotonmu. Akwai ‘yan dabaru a nan da ba mu ci karo da su ba tukuna:

  • gini kamar: echo “::set-output name=NAME::VALUE” yana baka damar saita darajar ma’aunin canji a matakin yanzu, ta yadda za’a iya karanta shi a duk sauran matakai.
  • za ku iya samun ƙimar canjin da aka saita a matakin da ya gabata ta hanyar gano wannan matakin: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Madaidaicin madaidaicin GITHUB_REPOSITORY yana adana sunan ma'ajiyar da mai shi ("mai shi/repo-name"). Domin yanke komai daga wannan layin sai dai sunan wurin ajiya, za mu yi amfani da bash syntax: ${GITHUB_REPOSITORY#*/}

Na gaba muna buƙatar gina hoton docker:

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

Shiga cikin rajista:

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

Kuma buga hoton zuwa Ma'ajiyar Fakitin GitHub:

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

Don nuna nau'in hoton, muna amfani da lambobi na farko daga SHA hash na aikatawa - GITHUB_SHA akwai kuma nuances a nan, idan kun yi irin wannan ginawa ba kawai lokacin haɗawa zuwa master ba, har ma bisa ga ƙirƙirar buƙatun ja. taron, to, SHA bazai dace da zaton da muke gani a cikin tarihin git ba, saboda ayyukan / aikin dubawa yana yin nasa zanta na musamman don guje wa ayyukan kashewa a cikin PR.

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Idan komai yayi aiki da kyau, sannan buɗe sashin fakiti (https://github.com/antkorwin/github-actions/packages) a cikin ma'ajiyar, zaku ga sabon hoton docker:

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

A can kuma zaku iya ganin jerin nau'ikan hoton docker.

Abin da ya rage shi ne saita uwar garken mu don yin aiki tare da wannan rajista kuma a sake kunna sabis ɗin. Wataƙila zan yi magana game da yadda ake yin wannan ta hanyar tsarin wani lokaci.

Kulawa

Bari mu kalli zaɓi mai sauƙi kan yadda ake yin gwajin lafiya don aikace-aikacen mu ta amfani da Ayyukan GitHub. Aikace-aikacen taya namu yana da mai kunnawa, don haka ba ma buƙatar rubuta API don bincika matsayinsa; Mun riga mun yi komai ga malalaci. Kuna buƙatar kawai ja mai masaukin baki: 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"}

Duk abin da muke buƙata shine rubuta aiki don bincika uwar garken ta amfani da cron, kuma idan ba zato ba tsammani bai amsa mana ba, to zamu aika da sanarwa ta hanyar telegram.

Da farko, bari mu gano yadda ake gudanar da aikin cron:

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

Yana da sauƙi, Ba zan iya ma yarda cewa a cikin Github ba za ku iya ƙirƙirar abubuwan da ba su dace da shafukan yanar gizo ba kwata-kwata. Cikakkun bayanai suna cikin takaddun: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Bari mu bincika matsayin uwar garken da hannu ta hanyar 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"

Da farko, muna ajiyewa a cikin m abin da uwar garken ya amsa ga buƙatar, a mataki na gaba muna duba cewa matsayi yana UP kuma, idan ba haka ba, to, mun fita tare da kuskure. Idan kana buƙatar "wuce" aiki da hannunka, to fita 1 - makami mai dacewa.

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

Muna aika zuwa telegram kawai idan aikin ya gaza a matakin da ya gabata. Don aika saƙo muna amfani da appleboy/telegram-action; zaku iya karanta game da yadda ake samun alamar bot da taɗi a cikin takaddun: github.com/appleboy/telegram-action

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Kar a manta da rubuta a cikin sirrin akan Github: URL don uwar garken da alamu na bot na telegram.

Waƙar Bonus - JIRA ga malalaci

Na yi alkawari za mu koma JIRA, kuma mun dawo. Sau ɗaruruwan na lura da halin da ake ciki a tsaye lokacin da masu haɓakawa suka yi fasalin, sun haɗa reshe, amma na manta da ja batun zuwa JIRA. Tabbas, idan aka yi duk wannan wuri guda, zai yi sauƙi, amma a gaskiya muna rubuta code a cikin IDE, mu haɗa rassan zuwa bitbucket ko GitHub, sannan mu ja ayyukan cikin Jira, don haka muna buƙatar buɗe sabbin windows. , wani lokacin sake shiga da sauransu. Lokacin da kuka tuna daidai abin da kuke buƙatar yi na gaba, to babu ma'ana a sake buɗe allon. A sakamakon haka, da safe a tsaye kuna buƙatar ciyar da lokaci don sabunta allon ɗawainiya.

GitHub kuma zai taimaka mana a cikin wannan aikin na yau da kullun; don farawa, za mu iya ja al'amura ta atomatik zuwa shafi na code_review lokacin da muka ƙaddamar da buƙatar ja. Abin da kawai kuke buƙatar ku yi shi ne bi ƙa'idar reshe suna:

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

misali, idan maɓallin aikin "GitHub Actions" shine GA, to GA-8-jira-bot zai iya zama reshe don aiwatar da aikin GA-8.

Haɗin kai tare da JIRA yana aiki ta hanyar ayyuka daga Atlassian, ba su da cikakke, dole ne in ce wasu daga cikinsu ba su yi mini aiki ba kwata-kwata. Amma za mu tattauna kawai waɗanda suke da shakka aiki kuma ana amfani da su sosai.

Da farko kuna buƙatar shiga JIRA ta amfani da aikin: 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 }}

Don yin wannan, kuna buƙatar samun alama a cikin JIRA, yadda ake yin hakan an bayyana shi anan: confluence.atlassian.com/cloud/api-tokens-938839638.html

Muna cire mai gano aikin daga sunan reshe:

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

Idan kun bincika a cikin kasuwar GitHub, zaku iya samun aiki don wannan aikin, amma dole ne in rubuta wannan abu ta amfani da grep ta amfani da sunan reshe, saboda wannan aikin daga Atlassian bai so yin aiki akan aikina ta kowace hanya. , don gano abin da ba daidai ba a can - fiye da yin abu ɗaya da hannuwanku.

Abin da ya rage shi ne matsar da aikin zuwa ginshiƙin "Bita na lamba" lokacin ƙirƙirar buƙatar ja:

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

Akwai aiki na musamman don wannan akan GitHub, duk abin da yake buƙata shine ID na batun da aka samu a matakin da ya gabata da izini a cikin JIRA wanda muka yi a sama.

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Hakazalika, zaku iya ja ɗawainiya yayin haɗuwa cikin maigidan, da sauran abubuwan da suka faru daga aikin GitHub. Gabaɗaya, duk ya dogara da tunanin ku da sha'awar sarrafa ayyukan yau da kullun.

binciken

Idan ka dubi zane-zane na DEVOPS na gargajiya, mun rufe dukkan matakai, sai dai watakila aiki, ina tsammanin idan ka gwada, za ka iya samun wasu ayyuka a kasuwa don haɗawa tare da tsarin tebur na taimako, don haka za mu ɗauka cewa bututun ya juya. don zama cikakke kuma za'a iya yanke shawara dangane da amfani da shi.

Da'irar jahannama tare da Ayyukan GitHub (gina bututun CI/CD don aikin Java)

Sakamakon:

  • Wurin kasuwa tare da shirye-shiryen da aka yi don kowane lokaci, wannan yana da kyau sosai. A yawancin su, zaku iya duba lambar tushe don fahimtar yadda ake warware irin wannan matsala ko aika buƙatar fasalin ga marubucin kai tsaye a cikin ma'ajin GitHub.
  • Zaɓin dandali mai niyya don taro: Linux, mac os, windows abu ne mai ban sha'awa sosai.
  • Github Packages abu ne mai girma, yana da dacewa don kiyaye dukkanin abubuwan more rayuwa a wuri guda, ba dole ba ne ku yi hawan windows daban-daban, komai yana cikin radius na dannawa ɗaya ko biyu na linzamin kwamfuta kuma an haɗa shi da kyau tare da Ayyukan GitHub. Tallafin rajistar Docker a cikin sigar kyauta shima yana da fa'ida mai kyau.
  • GitHub yana ɓoye sirri a cikin ginin rajistan ayyukan, don haka amfani da shi don adana kalmomin shiga da alamun ba abin ban tsoro bane. A lokacin duk gwaje-gwaje na, ban taɓa iya ganin sirrin a cikin tsantsar sigar sa a cikin na'ura wasan bidiyo ba.
  • Kyauta don ayyukan Buɗewa

Fursunoni:

  • YML, da kyau, ba na son shi. Lokacin aiki tare da irin wannan kwarara, saƙon da aka fi sani da shi shine "fix yml format", sannan ka manta ka sanya tab a wani wuri, ko kuma ka rubuta shi akan layi mara kyau. Gabaɗaya, zama a gaban allo tare da mai ba da izini da mai mulki ba shine mafi kyawun kwarewa ba.
  • DEBUG, gyara magudanar ruwa tare da aikatawa, gudanar da sake ginawa, da fitarwa zuwa na'ura mai ba da hanya tsakanin hanyoyin sadarwa ba koyaushe ba ne mai dacewa, amma ya fi yawan nau'in "An yi muku yawa"; ana amfani da ku don aiki tare da IDEA mai dacewa, lokacin da zaku iya cire wani abu. .
  • Kuna iya rubuta aikin ku akan komai idan kun kunsa shi a cikin Docker, amma javascript kawai ake tallafawa na asali, ba shakka wannan lamari ne na dandano, amma zan fi son wani abu maimakon js.

Bari in tunatar da ku cewa ma'ajiyar da duk rubutun yana nan: github.com/antkorwin/github-actions

A mako mai zuwa zan yi wasa tare da rahoto a taron Heisenbug 2020 Piter. Zan gaya muku ba kawai yadda za ku guje wa kurakurai lokacin shirya bayanan gwaji ba, amma kuma raba sirrina na aiki tare da saitin bayanai a aikace-aikacen Java!

source: www.habr.com