Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Aku kerep kudu mbangun pipa kanggo proyek bangunan ing Jawa. Kadang iku open source, kadhangkala ora. Aku bubar mutusake kanggo nyoba mindhah sawetara repositori saka Travis-CI lan TeamCity menyang Tindakan GitHub, lan iki sing metu saka iku.

Apa sing bakal kita otomatisake?

Pisanan, kita butuh proyek sing bakal diotomatisasi, ayo nggawe aplikasi cilik ing Spring boot / Java 11 / Maven. Kanggo tujuan artikel iki, kita ora bakal kasengsem ing logika aplikasi kabeh; prasarana ing saubengé aplikasi iku penting kanggo kita, saéngga pengontrol REST API sing prasaja bakal cukup kanggo kita.

Sampeyan bisa ndeleng sumber ing kene: github.com/antkorwin/github-actions Kabeh tahapan mbangun pipa dibayangke ing panjalukan narik kanggo proyek iki.

JIRA lan planning

Perlu dikandhakake yen kita biasane nggunakake JIRA minangka tracker masalah, mula ayo nggawe papan sing kapisah kanggo proyek iki lan nambah masalah pisanan ing kana:

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Sakcepete mengko, kita bakal bali menyang apa sing bisa ditawakake JIRA lan GitHub kanthi kombinasi.

Kita ngotomatisasi perakitan proyek kasebut

Proyèk test kita dibangun liwat maven, supaya mbangun iku cukup prasaja, kabeh kita kudu paket mvn resik.

Kanggo nindakake iki nggunakake Tindakan Github, kita kudu nggawe file ing repositori sing nggambarake alur kerja kita, iki bisa ditindakake kanthi file yml biasa, aku ora bisa ngomong yen aku seneng "pemrograman yml", nanging apa sing bisa ditindakake - kita nindakaken ing .github/ alur kerja direktori/ file build.yml kang bakal njlèntrèhaké tumindak nalika mbangun cabang master:

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 — iki minangka katrangan babagan acara sing bakal diluncurake naskah kita.

ing: pull_request / push - nuduhake yen alur kerja iki kudu diluncurake saben push digawe menyang master lan panjaluk narik digawe.

Ing ngisor iki katrangan babagan tugas (jobs) lan langkah eksekusi (langkah) kanggo saben tugas.

mlaku-mlaku - ing kene kita bisa milih target OS, kaget, sampeyan malah bisa milih Mac OS, nanging ing repositori pribadi iki cukup larang (dibandhingake karo Linux).

Efesus ngidini sampeyan nggunakake maneh tumindak liyane, contone, nggunakake tumindak / setup-java tumindak kita nginstal lingkungan kanggo Java 11.

Kanthi bantuan saka karo kita bisa nemtokake paramèter karo kang kita miwiti tumindak, ateges iki bantahan sing bakal liwati kanggo tumindak.

Kabeh sing isih ana yaiku mbukak proyek ing Maven: run: mvn -B clean package gendera -B ngandika yen kita kudu mode non-interaktif supaya maven dumadakan ora arep takon kita soko

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

apik tenan! Saiki, saben sampeyan tundhuk karo master, mbangun proyek diwiwiti.

Ngotomatisasi tes diluncurake

Majelis apik, nanging nyatane, proyek bisa dirakit kanthi aman, nanging ora bisa digunakake. Mula, langkah sabanjure yaiku ngotomatisasi uji coba. Kajaba iku, cukup trep kanggo ndeleng asil tes nalika nindakake review PR - sampeyan ngerti manawa tes kasebut lulus lan ora ana sing lali mbukak cabang sadurunge nindakake gabungan.

Kita bakal mbukak tes nalika nggawe panjalukan narik lan nggabung menyang master, lan ing wektu sing padha kita bakal nambah nggawe laporan ing kode-jangkoan.

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

Kanggo nutupi tes, aku nggunakake codecov bebarengan karo plugin jacoco. codecov duwe tumindak dhewe, nanging mbutuhake token kanggo nggarap panjaluk tarik:

${{ secrets.CODECOV_TOKEN }} - kita bakal weruh construction iki luwih saka sapisan, Rahasia iku mekanisme kanggo nyimpen Rahasia ing GitHub, kita bisa nulis ana sandhi / token / host / url lan data liyane sing ngirim ora kalebu ing basis kode gudang.

Sampeyan bisa nambah variabel menyang rahasia ing setelan repositori ing GitHub:

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Sampeyan bisa njaluk token ing codecov.io Sawise wewenang liwat GitHub, kanggo nambah proyek umum sampeyan mung kudu ngetutake link kaya iki: jeneng pangguna GitHub/[repo jeneng]. Repositori pribadi uga bisa ditambahake; kanggo nindakake iki, sampeyan kudu menehi hak codecov kanggo aplikasi ing Github.

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Tambah plugin jacoco menyang file 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>

Saiki bot codecov bakal ngetik saben panjaluk tarik kita lan nambah grafik pangowahan jangkoan:

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Ayo ditambahake penganalisa statis

Ing umume proyek sumber terbuka, aku nggunakake awan sonar kanggo analisis kode statis, cukup gampang nyambung menyang travis-ci. Dadi langkah sing logis nalika migrasi menyang Tindakan GitHub kanggo nindakake perkara sing padha. Pasar aksi minangka barang sing keren, nanging wektu iki rada ngeculke, amarga saka pakulinan aku nemokake tumindak sing dibutuhake lan ditambahake menyang alur kerja. Nanging ternyata sonar ora ndhukung tumindak kanggo nganalisa proyek ing maven utawa gradle. Mesthi, iki ditulis ing dokumentasi, nanging sing maca?!

Ora bisa ditindakake kanthi tumindak, mula kita bakal nindakake liwat plugin 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 - bisa dipikolehi ing sonarcloud.io lan sampeyan kudu ndhaftar ing rahasia. GITHUB_TOKEN - iki minangka token sing dibangun ing GitHub, kanthi bantuan sonarcloud[bot] bakal bisa mlebu menyang Git supaya bisa ngirim pesen ing panjaluk tarik.

Dsonar.projectKey - jeneng proyek ing sonar, sampeyan bisa ndeleng ing setelan project.

Dsonar.organisasi - jeneng organisasi saka GitHub.

Kita nggawe panjalukan tarik lan ngenteni sonarcloud[bot] teka ing komentar:

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Manajemen rilis

Mbangun wis diatur, tes wis mbukak, lan kita bisa nggawe release. Ayo goleki kepiye GitHub Actions bisa nggawe manajemen rilis luwih gampang.

Ing karya, aku duwe proyek sing basis kode ana ing bitbucket (kabeh kaya ing crita kasebut "Aku nulis menyang bitbucket ing wayah awan, tundhuk karo GitHub ing wayah wengi"). Sayange, bitbucket ora duwe alat manajemen rilis sing dibangun. Iki masalah, amarga kanggo saben release sampeyan kudu nggawe kaca kanthi manual ing confluence lan uncalan kabeh fitur klebu ing release ana, nelusuri liwat kraton pikiran, tugas ing jira, laku ing gudang. Ana akeh kemungkinan kanggo nggawe kesalahan, sampeyan bisa lali soko utawa ngetik soko sing wis dirilis pungkasan wektu, kadhangkala iku mung ora cetha apa kanggo klasifikasi request narik minangka - iku fitur utawa bug fix, utawa tes editing, utawa soko infrastruktur.

Kepiye tindakan GitHub bisa mbantu kita? Ana tumindak sing apik - drafter rilis, ngidini sampeyan nyetel cithakan file cathetan rilis kanggo nyiyapake kategori panjaluk tarik lan kanthi otomatis nglumpukake ing file cathetan rilis:

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Conto cithakan kanggo nyetel laporan (.github/release-draft.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

Tambah skrip kanggo ngasilake draf rilis (.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 }}

Kabeh panjaluk tarik wiwit saiki bakal diklumpukake ing cathetan rilis kanthi otomatis - sihir!

Ing kene bisa uga ana pitakonan: apa yen pangembang lali nyelehake tag ing PR? Banjur ora jelas kategori sing kudu dilebokake, lan maneh sampeyan kudu ngatasi kanthi manual, saben PR kanthi kapisah. Kanggo ndandani masalah iki, kita bisa nggunakake tumindak liyane - verifier label - mriksa anané tag ing request narik. Yen ora ana tag sing dibutuhake, priksa bakal gagal lan kita bakal weruh pesen babagan iki ing panyuwunan tarik.

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'

Saiki, panjaluk tarik kudu ditandhani karo salah sawijining tag: jinis: ndandani, jinis: fitur, jinis: dokumentasi, jinis: tes, jinis: config.

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Auto-anotasi panjalukan narik

Awit kita ndemek topik kasebut minangka karya sing efektif kanthi panjaluk narik, mula kudu diomongake babagan tumindak kaya labeler, nempatake tag ing PR adhedhasar file sing wis diganti. Contone, kita bisa menehi tandha minangka [mbangun] panjalukan narik sing ngemot owah-owahan ing direktori .github/workflow.

Nyambungake iku cukup prasaja:

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

Kita uga butuh file sing nggambarake korespondensi antarane direktori proyek lan topik panjaluk tarik:

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

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

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

theme:documentation:
  - "docs/**"

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

Aku ora kasil masangake tumindak sing kanthi otomatis nempatake label ing panjalukan narik karo tumindak sing mriksa anané label sing dibutuhake; match-label ora pengin ndeleng label sing ditambahake dening bot. Iku misale jek luwih gampang kanggo nulis tumindak dhewe sing nggabungake loro tahapan. Nanging sanajan ing wangun iki cukup trep kanggo nggunakake, sampeyan kudu milih label saka dhaptar nalika nggawe panjalukan narik.

Wektu kanggo nyebarake

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Aku nyoba sawetara opsi panyebaran liwat Tindakan GitHub (liwat ssh, liwat scp, lan nggunakake docker-hub), lan aku bisa ngomong sing, paling kamungkinan, sampeyan bakal nemokake cara kanggo ngunggah binar menyang server, ora ketompo carane bengkong pipo sampeyan. punika.

Мне понравился вариант держать всю инфраструктуру в одном месте, поэтому рассмотрим, как сделать деплой в GitHub Packages (это репозиторий для бинарного контента, npm, jar, docker).

Skrip kanggo mbangun gambar docker lan nerbitake ing Paket 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 }}"

Pisanan, kita kudu mbangun file JAR saka aplikasi kita, banjur ngetung path menyang registri docker GitHub lan jeneng gambar kita. Ana sawetara trik ing kene sing durung ditemokake:

  • konstruksi kaya: kumandhang ":: set-output name = NAME :: VALUE" ngidini sampeyan nyetel nilai variabel ing langkah saiki, supaya bisa diwaca ing kabeh langkah liyane.
  • sampeyan bisa entuk nilai set variabel ing langkah sadurunge liwat pengenal langkah iki: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Variabel GITHUB_REPOSITORY standar nyimpen jeneng repositori lan pemilike ("pemilik/repo-jeneng"). Kanggo ngethok kabeh saka baris iki kajaba jeneng repositori, kita bakal nggunakake sintaksis bash: ${GITHUB_REPOSITORY#*/}

Sabanjure kita kudu mbangun gambar docker:

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

Mlebu menyang registri:

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

Lan nerbitake gambar menyang Repositori Paket GitHub:

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

Kanggo nunjukake versi gambar, kita nggunakake digit pisanan saka hash SHA saka komit - GITHUB_SHA ana uga nuansa ing kene, yen sampeyan nggawe bangunan kasebut ora mung nalika gabung dadi master, nanging uga miturut nggawe request narik. acara, banjur SHA bisa uga ora cocog karo hash sing kita deleng ing sajarah git, amarga tumindak / tumindak checkout nggawe hash unik dhewe kanggo ngindhari tumindak deadlocking ing PR.

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Yen kabeh wis rampung, banjur mbukak bagean paket (https://github.com/antkorwin/github-actions/packages) ing repositori, sampeyan bakal weruh gambar docker anyar:

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Ing kana sampeyan uga bisa ndeleng dhaptar versi gambar docker.

Sing isih ana yaiku ngatur server supaya bisa nggarap registri iki lan miwiti maneh layanan kasebut. Aku bakal ngomong babagan carane nindakake iki liwat systemd ing wektu liyane.

Ngawasi

Ayo goleki pilihan sing gampang babagan cara mriksa kesehatan kanggo aplikasi kita nggunakake Tindakan GitHub. Aplikasi boot kita duwe aktuator, dadi kita ora perlu nulis API kanggo mriksa statuse; kita wis nindakake kabeh kanggo wong sing kesed. Sampeyan mung kudu narik host: SERVER-URL:PORT/actuator/health

$ curl -v 127.0.0.1:8080/actuator/health

> GET /actuator/health HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.61.1
> Accept: */*

< HTTP/1.1 200
< Content-Type: application/vnd.spring-boot.actuator.v3+json
< Transfer-Encoding: chunked
< Date: Thu, 04 Jun 2020 12:33:37 GMT

{"status":"UP"}

Kabeh sing dibutuhake yaiku nulis tugas kanggo mriksa server nggunakake cron, lan yen dumadakan ora mangsuli, mula kita bakal ngirim kabar liwat telegram.

Pisanan, ayo goleki carane mbukak alur kerja cron:

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

Iku prasaja, Aku malah ora bisa pracaya ing Github sampeyan bisa nggawe acara sing ora pas menyang webhooks ing kabeh. Rincian ana ing dokumentasi: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Ayo priksa status server kanthi manual liwat 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"

Kaping pisanan, kita nyimpen menyang variabel apa sing ditanggapi server, ing langkah sabanjure kita mriksa status UP lan, yen ora, banjur metu kanthi kesalahan. Yen sampeyan kudu "ngepung" tumindak kanthi tangan, banjur metu 1 - gegaman cocok.

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

Kita ngirim menyang telegram mung yen tumindak gagal ing langkah sadurunge. Kanggo ngirim pesen, kita nggunakake appleboy/telegram-action; sampeyan bisa maca babagan carane njaluk token bot lan id chatting ing dokumentasi: github.com/appleboy/telegram-action

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Aja lali nulis ing rahasia ing Github: URL kanggo server lan token kanggo bot telegram.

Bonus track - JIRA kanggo kesed

Aku janji bakal bali menyang JIRA, lan kita wis bali. Atusan kaping aku wis diamati kahanan ing stand-ups nalika gawe nggawe fitur, nggabung cabang, nanging kelalen nyeret masalah menyang JIRA. Mesthi, yen kabeh iki rampung ing sak panggonan, iku bakal luwih gampang, nanging nyatane kita nulis kode ing IDE, nggabung cabang menyang bitbucket utawa GitHub, lan banjur seret tugas menyang Jira, iki kita kudu mbukak windows anyar. , kadhangkala mlebu maneh lan liya-liyane. Yen sampeyan ngelingi apa sing kudu ditindakake sabanjure, mula ora ana gunane kanggo mbukak papan maneh. Akibaté, ing esuk ing standup sampeyan kudu nglampahi wektu nganyari Papan tugas.

GitHub uga bakal mbantu kita ing tugas rutin iki; kanggo wiwitan, kita bisa nyeret masalah kanthi otomatis menyang kolom code_review nalika ngirim panjaluk tarik. Sampeyan mung kudu ngetutake konvensi jeneng cabang:

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

contone,, yen project key "GitHub Actions" GA, banjur GA-8-jira-bot bisa dadi cabang kanggo ngleksanakake tugas GA-8.

Integrasi karo JIRA dianggo liwat tumindak saka Atlassian, padha ora sampurna, Aku kudu ngomong sing sawetara wong ora bisa kanggo kula ing kabeh. Nanging kita bakal ngrembug mung sing mesthi bisa digunakake lan digunakake kanthi aktif.

Pisanan sampeyan kudu mlebu menyang JIRA nggunakake tumindak: 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 }}

Kanggo nindakake iki, sampeyan kudu njaluk token ing JIRA, carane nindakake iki diterangake ing kene: confluence.atlassian.com/cloud/api-tokens-938839638.html

Kita extract pengenal tugas saka jeneng cabang:

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

Yen sampeyan nggoleki ing pasar GitHub, sampeyan bisa nemokake tumindak kanggo tugas iki, nanging aku kudu nulis bab sing padha nggunakake grep nggunakake jeneng cabang, amarga tumindak iki saka Atlassian ora pengin nggarap proyekku kanthi cara apa wae. , kanggo ngerteni apa sing salah ana - luwih suwe tinimbang nindakake perkara sing padha karo tangan sampeyan.

Kabeh sing isih ana yaiku mindhah tugas menyang kolom "Kode review" nalika nggawe panjaluk tarik:

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

Ana tumindak khusus kanggo iki ing GitHub, sing dibutuhake yaiku ID masalah sing dipikolehi ing langkah sadurunge lan wewenang ing JIRA sing ditindakake ing ndhuwur.

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Kanthi cara sing padha, sampeyan bisa nyeret tugas nalika gabung menyang master, lan acara liyane saka alur kerja GitHub. Umumé, kabeh gumantung saka imajinasi lan kepinginan kanggo ngotomatisasi proses rutin.

temonan

Yen katon ing diagram DEVOPS klasik, kita wis dijamin kabeh orane tumrap sekolah, kajaba mbok menawa operate, Aku yen nyoba, sampeyan bisa nemokake sawetara tumindak ing pasar kanggo integrasi karo sistem bantuan-meja, supaya kita bakal nganggep sing pipo diuripake. metu kanggo pepek lan kesimpulan bisa dijupuk adhedhasar nggunakake.

Lingkaran neraka karo GitHub Actions (mbangun pipa CI/CD kanggo proyek Java)

Pros:

  • Pasar karo tumindak siap kanggo kabeh kesempatan, iki apik banget. Umume, sampeyan uga bisa ndeleng kode sumber kanggo ngerti carane ngatasi masalah sing padha utawa ngirim panjaluk fitur menyang penulis langsung ing gudang GitHub.
  • Milih platform target kanggo perakitan: Linux, mac os, windows minangka fitur sing cukup menarik.
  • Paket Github minangka barang sing apik, trep kanggo njaga kabeh infrastruktur ing sak panggonan, sampeyan ora kudu surfing liwat windows sing beda-beda, kabeh ana ing radius siji utawa rong klik mouse lan digabungake kanthi sampurna karo Tindakan GitHub. Dhukungan registri Docker ing versi gratis uga minangka kauntungan sing apik.
  • GitHub ndhelikake rahasia ing mbangun log, supaya nggunakake kanggo nyimpen sandhi lan token ora medeni. Sajrone kabeh eksperimen, aku ora tau bisa ndeleng rahasia ing bentuk murni ing konsol.
  • Gratis kanggo proyek Open Source

Cons:

  • YML, aku ora seneng karo dheweke. Nalika nggarap aliran kasebut, pesen komit sing paling umum sing dakkarepake yaiku "format yml ndandani", banjur sampeyan lali nyelehake tab ing endi wae, utawa sampeyan nulis ing baris sing salah. Umumé, lungguh ing ngarep layar kanthi protraktor lan panguasa dudu pengalaman sing paling nyenengake.
  • DEBUG, debugging aliran karo commits, mlaku mbangun maneh, lan outputting menyang console ora tansah trep, nanging luwih saka kategori "sampeyan overdone"; sampeyan wis digunakake kanggo nggarap IDEA trep, nalika sampeyan bisa debug apa wae. .
  • Sampeyan bisa nulis tumindak ing apa wae yen sampeyan mbungkus ing Docker, nanging mung javascript didhukung native, mesthi iki bab rasa, nanging aku luwih seneng soko liyane tinimbang js.

Ayo kula ngelingake yen gudang karo kabeh skrip ana ing kene: github.com/antkorwin/github-actions

Minggu ngarep aku bakal tampil karo laporan ing konferensi Heisenbug 2020 Piter. Aku bakal pitutur marang kowe ora mung carane supaya kesalahane nalika nyiapake data test, nanging uga nuduhake Rahasia nggarap set data ing aplikasi Java!

Source: www.habr.com