Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Saepe in Java incepta ad aedificandum fistulas aedificandas habeo. Aliquando fons aperta est, aliquando non est. Nuper decrevi tentare aliqua repositoria mea a Travis-CI et TeamCity ad GitHub Actiones movere, et hoc est quod ex eo processit.

Quid faciemus automate?

Primum consilium opus est quod automate faciemus, parvam applicationem in tabernus Spring / Java 11 / Maven faciamus. Ad proposita huius articuli, in applicatione logicae omnino non quaerenda est: infrastructura circa applicationem interest nobis, ut simplex QUIS API moderatoris nobis sufficiat.

Fontes hic videre potes: github.com/antkorwin/github-actions Omnes gradus aedificationis pipelinei redduntur in petitionibus trahere huius rei.

JIRA et consilio

Dignum est dicere nos solere uti JIRA tamquam exitus venatoris, ut singulas tabulas huius incepti crearemus et primae ibi quaestiones addere:

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Paulo post revertemur ad res commodas JIRA et GitHub quae coniunctim offerre possunt.

Nos ecclesiam project automate

Examen nostrum project per maven aedificatum est, ut aedificatio sit admodum simplex, omnibus nobis opus est sarcina mvn munda.

Ad hoc utens Github Actiones, opus erit limam creare in repositorio nostro laboris in describendo, hoc fieri potest cum file regulari yml, non possum dicere me "yml programmandi" amo, sed quid agamus - id facimus in .github/ directorio workflow/ lima build.yml in quo actiones describemus cum fabricando ramum magistri;

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 β€” haec est descriptio eventus in quo scriptum nostrum mittetur.

in: pull_request / dis - indicat hunc laborem necessitatem immittendi quotiescumque impulsio ad dominum facta est et petitiones trahere creantur.

Haec est descriptio officiorum.Jobs) et gradus supplicium (gressus) cuique opus.

fugit-on- - Hic scopum OS eligere possumus, mire, etiam Mac OS eligere potes, sed in repositoriis privatis haec est admodum pretiosa (comparata Linux).

usus, sino vos ut alias actiones reuse, exempli gratia, actiones/setup-Javas utentes, ambitum Javae 11 instituimus.

per apud parametros exprimere possumus cum quibus actionem deducimus, essentialiter haec sunt argumenta quae ad actionem transibunt.

Reliquum est ut in Maveno currendum exstent; run: mvn -B clean package vexillum -B dicit nos modus non-interactive egere ut repente puer aliquid a nobis petere non velit

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Magna! Nunc, quotienscumque domino mandas, exertus incipit aedificare.

Automating test movet

Conventus est bonus, re vera, consilium tuto congregari potest, opus non est. Ideo proximus gradus est ut automate test fugit. Praeterea satis commodum est inspicere eventus transeuntium probationum cum a PR review - scis certe probata praeterire et nemo oblitus est ramum suum currere antequam merge fecerit.

Testimonia decurremus cum petitionem trahendi creandi et in dominum mergemus, simulque creationem relationis in codice-coverage addemus.

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

Ad probationes tegendas, codecov uti utor, cum jacoco plugin coniuncto. codecov suam habet actionem, sed signo indiget laboris rogationis nostrae trahere;

${{ secrets.CODECOV_TOKEN }} β€” Hanc constructionem plus quam semel videbimus, secreta machinatio est ad secreta recondenda in GitHub, scribere possumus ibi tesseras/signes/exercitus/urlas et alia notitia quae in repositorio codice basi non contineri debent.

Variam secretis addere potes in repositorio ad occasus in GitHub:

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Potes accipere ad indicium codecov.io Post concessionem per GitHub, consilium publicum addere debes modo nexum sequi sicut hoc: Nomen usoris GitHub/[repo nomen]. Repositorium privatum etiam addi potest, ad hoc faciendum, iura applicanda in Github dare debes.

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Plugin iacoco addere ad POM fasciculum:

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

Iam codecov automati intrabit singulas petitiones nostras viverra et adde graphum coverage de mutatione:

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Addamus analyser static

In plerisque apertis meis inceptis fonte uti nube sonaria pro analysi codice statico, facile est coniungere cum travis-ci. Est igitur gressus logicus cum in GitHub actus migrandi ad idem faciendum. Actio mercatus frigidum est, sed hoc tempore paulum me demittere, quia ex consuetudine actionis quam indigebam inveni et illud in workflow addidi. Sed evenit ut sonar non sustineat operationem per actionem ad analysin incepta in maven vel gradatim. Utique scriptum est in documentis, sed quis legit?

Non potest per actionem, sic per mvn plugin faciemus:

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 - obtineri potest ad sonarcloud.io et in secretis debes subcriptio. GITHUB_TOKEN - Hoc constructum est in signo quod GitHub generat, cuius ope sonarcloud[bot] log in Git poterit ut nobis nuntios in petitionibus trahendis relinquat.

Dsonar.projectKey - nomen consilii in sonar, in occasus project videre potes.

Dsonar.organization β€” nomen regiminis a GitHub.

Petitionem viverra facimus et exspectamus sonarcloud[bot] ut in commenta veniat:

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

release procuratio

In aedificatione figuratum est, probationes decurrunt et solutionem facere possumus. Intueamur quomodo actiones GitHub multo facilius solutionem facere possunt.

In opere, incepta habeo cuius signum basis in bitbucket (omnia similia sunt in illa fabula "Scribo bitbucket interdiu, GitHub in nocte committo"). Infeliciter, bitbucket instrumenta in remissionis administratione non aedificavit. Hoc problema est, quia pro unoquoque emissione habes paginam ad confluentiam manualem creare et omnia lineamenta quae ibi in emissione mittent, scrutare per palatia mentis, opera in jira, in repositorium committit. Plures casus errare, oblivisci aliquid potes vel aliquid inire, quod ultimo tempore iam emissum est, interdum simpliciter non liquet quid ad petitionem trahendi indicandam sit - est pluma vel cimex figere, vel edendi probationes, vel quid infrastructural.

Quomodo actiones GitHub adiuva nos? Actio magna est - dimissionis latrinae, permittit te mittere notas dimissionis tabellae templates constituere categorias petitionum viverrarum ac automatice eas in emissione notarum fasciculorum aggregare;

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Exemplum exemplum proponendi relationem (.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

Scriptum addere emissionem generandi capturam (.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 }}

Omnes petitiones viverra posthac colligentur in notis emissione automatice - magicae!

Hic quaestio oriri potest: quid si tincidunt obliviscuntur tags in PR? Tunc non liquet utra categoria eam iniciat, iterumque manualiter agere debebis cum singulis PR separatim. Ad hanc quaestionem figere, alia actione - label verificantis uti possumus - praesentiam tags in trahere rogatu cohibet. Si non sunt tags requisita, perscriptio deficietur et nuntium de hoc videbimus in petitione viverra nostra.

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'

Nunc quaelibet petitio viverra notanda est una e tags: type:fix, type: features, type:documentationis, type:tests, type:config.

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Auto-annotationem viverra petitiones

Cum tale thema tam efficax opus cum petitionibus trahendis tetigimus, dignum est loqui de tali actione sicut labeler, tags in PR subnixa ponit in quo tabulae mutatae sunt. Exempli gratia, notare possumus quamlibet petitionem viverrarum quae mutationes in indicem continent .github/workflow.

Connexio satis simplex est;

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

Volumus etiam ut fasciculus describens congruentiam inter directoria consilii et thema petendi viverra:

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

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

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

theme:documentation:
  - "docs/**"

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

Non impetravi actionem quae automatice pittacia in petitionibus pullorum ponit cum actione quae retentat ad praesentiam pittaculorum requisitorum, par-titulus non vult videre pittacia automati addita. Facilius videtur scribere actionem tuam quae utrumque tempus coniungit. Sed etiam in hac forma satis commodum est uti, debes pittacium e indice eligere cum petitionem trahere creando.

Aliquam explicandi

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Plures optiones instruere conatus sum per Actiones GitHub (per ssh, via scp, et utens docker-hub), et possum dicere, verisimile, viam invenias ad binarium servo sistendum, utcumque curva tua pipeline. sit.

Placuit optioni totam infrastructuram in uno loco servandi, ut inspiciamus quomodo explicanda GitHub Packages (hoc est repositio contentorum binariorum, npm, dolium, docker).

Scriptor ad fabricam docker imaginem et in GitHub Packages publici iuris fecit:

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

Primum opus est fasciculi URNA applicationis aedificandi, post quod iter ad GitHub docker subcriptio et nomen imaginis nostrae computamus. Paucae hic strophæ sunt quas adhuc non offendimus:

  • constructio similis: echo ":: paro-output name=NAME:: VALUS" sinit ut valorem variabilis in gressu currenti constituas, ut tunc in omnibus aliis gradibus legi possit.
  • valorem variabilis in praecedenti gradu constituto per identifier huius gradus: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME}}
  • Vexillum GITHUB_REPOSITORIUM variabilis reponit nomen repositorii et possessoris eius ("dominus/repo-nomen"). Ut omnia ex hac linea secanda, praeter nomen repositorii, syntaxi vernacula utemur: ${GITHUB_REPOSITORY#*/}

Deinde necesse est imaginem schoeni aedificare:

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

Log in subcriptio:

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

Et ede imaginem ad Repositorium GitHub Packages:

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

Ad designandum versionem imaginis, primis digitis ex SHA Nullam commisso utimur - GITHUB_SHA sunt etiam hic nuances, si tales aedificationes faciunt non solum cum bus in dominum, sed etiam secundum trahere petitionem creationis. eventum, ergo SHA non congruit Nullam quam in historia git cernimus, quia actiones/checkout actio suam singularem facit Nullam ad vitandum actiones mortiferas in PR.

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Si omnia bene elaborata sunt, tunc sectionem fasciculorum (https://github.com/antkorwin/github-actions/packages) in reposito aperies, novam in reposito imaginem videbis:

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Ibi etiam indicem versionum imaginis scopulorum videre potes.

Reliquum est ut servo nostro configurare cum hoc registro laborare et servitium sileo. Probabiliter loquar quomodo hoc per systema aliud tempus feceris.

Cras

Intueamur de optione simplici in quam facere perceptum sanitatis pro applicatione nostra utens Actionibus GitHub. Applicatio nostra tabernus actuatorem habet, quare etiam scribere API ad eius statum reprimendum ne opus est, omnia pigris iam fecimus. Vos iustus hospes trahere debes; 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"}

Omnes opus est scribere munus ut servo utentis cron reprimat, et si subito nobis non respondeat, notitiam in telegrapho mittemus.

Primum sit figura quomodo currendum est in workflow cron;

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

Simplex est, etiam credere non possum in Github posses creare eventus qui in telas interretiales omnino non conveniunt. Singula in documentis sunt: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Sit scriptor reprehendo per manually servo status Crispum:

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"

Primum, nisi in variabili quod servo responderit petitioni, in proximo gradu coarguimus statum esse UP et, si hoc non est, eximus per errorem. Si opus "subvertere" actionem manibus tuis, deinde I exitus β€” Aptum telum.

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

Ad telegraphum mittimus si modo actio ante gradum priorem defecit. Epistulam mittere utimur pupillo/telegrammate-actio, legere potes quomodo bot tesseram ac chat id in documentis accipias: github.com/appleboy/telegram-action

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Noli oblivisci scribere in secretis in Github: URL pro servitore et signis telegraphi automati.

Bonus semita - JIRA pro pigris

Promisi nos ad JIRA redituros esse, et nos reddidisse. Centies observavi condicionem in statis-ups cum tincidunt plumam fecit, ramum immiscuit, sed oblitus est exitum in JIRA trahere. Utique, si omnia uno in loco gesta sunt, facilius esset, re vera in IDE codicem scribimus, rami in bitbucket vel GitHub confunduntur, et operas in Jira trahunt, ad hoc opus est novas fenestras aperire. interdum aperi iterum atque etc. Cum plane memineris quid faciendum tibi sit, tunc demum tabula aperienda non est. Quam ob rem, in mane ad standum tempus terere debes tabulae negotium adaequationis.

GitHub adiuvabit etiam nos in hoc munere exercitationis, nam imprimis quaestiones automatice in columna code_recensi trahere possumus cum petitionem trahere subiciemus. Omne quod debes facere est sequere ramum nominatio placitum;

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

exempli gratia, si clavis exertus "GitHub Actionum" est GA, erit GA-8-jira-bot posset esse ramus ad exsequendam GA-8 opus.

Integratio cum JIRA opera per actiones ab Atlassiano perfecta non sunt, necesse est dicere aliquas earum non omnino mihi operari. Sed de iis tantum quae definite laborant et activo modo tractabimus.

Primum opus est ut ini JIRA utendo actionem: 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 }}

Ad hoc, signum in JIRA obtinere debes, facere quod hic describitur; confluence.atlassian.com/cloud/api-token-938839638.html

Negotium identifier ex nomine rami elicimus:

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

Si quaeras in foro GitHub, actionem huius operis invenire potes, sed idem scribere debebam utens nomine rami utens, quia haec actio ab Atlassiano meo consilio quoquo modo laborare noluit. ut quid mali sit instar β€” idem facere diutius quam tuis manibus.

Reliquum est, ut munus "Codex recognitionis" moveat cum petitionem trahere a creatione;

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

Actio peculiaris in GitHub est, quae necessaria est exitus ID in priore gradu consecutus et auctoritas in JIRA quam supra fecimus.

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

Eodem modo, negotia cum domino bus in trahere potes, et alia eventa a GitHub workflow. In genere, totum pendet a tua imaginatione ac desiderio automatis in processibus exercitationis.

Inventiones

Si tabulam classicam DEVOPS spectes, omnes gradus perteximus, nisi forte operantur, opinor, si experiri potes, actionem aliquam invenire in foro ad integrationem systematis ope scriniarii, sic ponamus ut in pipeline versa ex eius usu diligenter ac conclusiones sumi possunt.

Circuli inferni cum actionibus GitHub (aedificationem CI/CD pipeline pro Java project)

pros,

  • Forum cum omnibus occasionibus paratis factis, hoc est frigidissimum. In plerisque illis, fontem quoque inspicere potes ut intelligat quomodo problema simile solvere vel postulationem plumam auctori directe in GitHub repositorio collocare.
  • Diligendo suggestum scopo pro contione: Linux, mac os, fenestrae admodum interesting pluma est.
  • Github Packages res magna est, commodius est totam infrastructuram in uno loco servare, non debes per diversas fenestras salo habere, omnia intra unius vel duorum muris strepitantium radium et cum Actionibus GitHub perfecte integrantur. Docker registro subsidium in libera versione etiam bonum commodum est.
  • GitHub occultat secreta in tigna aedificanda, ita utens ea ad tesseras et signa reponendas FORMIDULOSUS non est. Per omnia experimenta mea numquam potui videre secretum in pura forma in consolatorio.
  • Free for Open Source projects

cons:

  • YML, bene, non amo illum. Cum opus cum tali fluxu, vulgatissimum nuntium committo mihi est "fix yml format", tunc oblivisci tab alicubi ponere, vel in linea falsa scribis. In genere sedere ante velum cum protractore et rectore experientia non est suavissima.
  • DEBUG, debugging profluvium cum committit, currit reaedificandum, et ad consolandum extrahendum non semper commodum est, sed plus est de categoria "superdatus es", cum opportuna notione operari es, quando aliquid debug potes .
  • Actionem tuam de re aliqua scribere potes si in Docker involvas, sed solum html sustinetur, sane hoc de sapore est, sed aliud loco js malim.

Admoneo te repositio cum omnibus scriptoribus hic; github.com/antkorwin/github-actions

Postero septimana ego faciendo cum nuntiare apud Heisenbug 2020 Piter colloquium. Dicam tibi non solum quomodo notitias testium parando errores vitare, sed etiam secreta mea operandi cum data in applicationibus Java!

Source: www.habr.com