11/22/2023

Github Action 확장사용

1. Github Action 확장사용법 

  • Github의 변경사항 정리 
Github에 최근 변경사항 및 관련부분들 정리 

  • Github Action 기본사용법 
Github Action 기본사용법 정리 (반드시 확인) 

  • Github Action 설명 Site
설명이 잘 되어있어, 아래 부분들을 Link 연결하며, 지금까지 나만 사용 못했나 보다. 


Runner(Virtual Machine)기반으로 Docker를 이용하여 사용할 수 있으며, 본인만의 Github Action도 구현가능하다. 
시간이 좀 더 되면 다시, CirCleCI의 Relese 기능과 관련부분도 같이 좀 더 봐야 할 것 같다.


1.1 Docker 이용하여 확장사용가능 

Docker를 기본적으로 이용할 줄 알면 아래의 사용법도 대충 알 것이라고 생가되어진다.
좀 세련되게 구성하고자 한다면 본인이 직접 Containter (Dockerfile)을 만들어서 등록 후 사용해도 좋다. 

  • Github Action 내부에서 Docker 와 Docker Hub 사용법 
Docker Hub를 통하여 사용하면 되겠으며, 본인 마음대로 만들어서 사용해보도록 하자.

  • Docker 기본 사용법 
Docker의 기본명령어와 사용법을 알아두도록 하자 

  • Docker Package 하여 Publish 방법 
Docker Hub에 Publish 하는 방법 



1.2 보안기능지원 


현재 Cloud 기반의 Devops CI/CD는 쿠버네티스(Kubernetes)기반으로 병렬(Parrell)로도 지원하도록 가는 추세이며, 
더불어 보안기능제공하는 DevOps에서 DevSecOps  변경되어 가는 것 같다. 

  • Github Action도 제공 
보안기능도 제공을 해주어서, 요즘 DevOps 에서 DevSecOps로 가는 것 같다.
글을 읽어보면, TOKEN방식으로 진행하는 것 같으며, 흐음, 아직 보안은 좀 더 강화되어야 할 것 같다.


1.3 각 시각화 및 문제해결 

  • Worklofw Monitor
Cloud로 진행하다 보니, 어디서 막히는지 그런 것을 Debuging 하려고 만들 것 같으며, 시각화도 너무 멋지다. 

  • Github Action Badge
Github의 REAME.md에 세련되게 아래의 Github 공식 Badge 정도는 넣어두도록하자.

Private repository는 Github에서 공식으로 제공되는 Badge 이외는 동작하지 않으므로 주의
e.g. 
![GitHub release](https://img.shields.io/github/release/JeonghunLee/lora_gateway.svg?style=flat-square)              
![GitHub Action](https://github.com/JeonghunLee/lora_gateway/actions/workflows/ccpp.yml/badge.svg)    


2. Github Runner 사용 

일단 Cloud에서 돌아가는 Virtual Machine이라고 생각하며 되겠으며, 이 기반에 각 OS를 설정하여 돌아 간다고 생각하면 되겠다.
각 Runner는 현재 Parallel로는 지원되지 않는 것 같으며, 다만 Github Manaul의 그림보면, Parallel로 되는 것 처럼 나온다.
대신, Runner 한개로 Docker 기반으로 Concurency하게 동작은 가능할 것 같다. 

이렇게 까지 사용할 분들이 있을지 모르지만, Build 속도 때문에, 상위부분은 민감한 부분일 수 있다. 
특히 만약 Yocto로 한다면, 좀 골치가 아플 것 같다. 나중에 해봐야 알겠지만 


2.1 Github Runner 사용 

나의 경우에는 Github Hosting Runner를 사용했지만 아래와 같이 별도로 등록하여 사용해도 괜찮은 것 같다.
나는 이것만으로도 만족하며, 각 요금제에 따라 동작하는 Runner(Virtual Machine)이 다르므로 확인해야 한다.



2.2 Self-hosted Runner 등록 후 사용 

나는 아직 테스트를 못했지만, 자기가 가지고 있는 Machin(Self-Hosted Runner) 역시 등록하여, 다양하게 기능을 제공해주고 있는 것 같다. 
나중에 별도로 DevOps 전용 서버가 있다면 등록하여 테스트 해보도록하자.

  • Self host Runner
나의 경우는 현재 Github에서 제공해주는 Runner(Virtual Machine)이용하지만, 본인의 Hosted Runner를 등록가능한 것 같다.

  • 반드시 확인 (제한사항들) 



3. Github Action 기본분석 및 사용방법  

Github에서 제공하는 Github Action만 사용가능한게 아니며, 본인이 원하면 원하대로 구성도 가능하다.
이 부분은 아래에서 Github 에서 제공하는 Github ActionCustom Github Action을 각 분석을 해보겠다. 

  • Github 에서 제공하는 Action 기능확인 
현재 Github에서 제공해주고 있는 Action 기능들을 확인.


  • Action Checkout
가장기본으로 사용하며, Git checkout 소스를 download하여 한 후 build를 진행 
사용방법은 release에 각 release version 존재하며 README.md에서 각 사용법을 알아두도록하자.


  • Action upload artifact
C/I를 build를 진행하여 나온 결과물을 Upload하는 것으로 사용방법은 RADME.md에서 각 사용법참조.


  • Action Github Release
최종 Github Release 로, Source 를 압축하여 Release하고, 변경관련정보를 같이 넣어 Github Release에서 확인가능.
더불어 Tag 와 release 이름도 넣어 진행가능하며 변경사항도 정리도 가능 


  • Action Github Release->Asset 
Github Release의 Asset에 별도로 File을 추가한다. (나의 경우 Binary File 추가)


  • 항상 Github Action 사용전에 
기본적으로 사용법을 알고 싶다면, 각 Github Action의 Site의 README.md를 확인하도록 하자.


3.1 Github Action 세부분석   

Github에서 제공하는 Github Action이며, 이를 좀 자세히 분석해보도록 하자. 
일단 위치는 https://github.com/actions 이곳에 있으며, 이 중 checkout을 비교 분석해보자.

  • action/checkout 분석 
action.yml 시작 점으로 각 Java Script을 과 이에 배포에 필요한 Package.json 확인해야 하는 것 같다.
Java Script을 완벽히 잘모르기 때문에 간단히 분석하며, 아래의 Custom Github Action 과 일단 다른 구조이다. 

action.yml 확인 
아래에서 실행되는 파일을 찾아서 보면, run의 dist/index.js 이며 , node.js 이고 HTTP Post방식같다.

dist/index.js 확인 
상위 run에서 실행되어지는 Java Script 

Node.js Package 작업시 같이 필요할 것 같아 Link만 연결  

일단 다 봐도 세련되게 Node.js로 구성한 것 같다. 


3.2 Github Action 사용법

이전 기본사용법에서도 봤듯이 workflow 구성한 후  Job 의 밑에 step을 두고, 각 사용하면된다.  

action/checkout 사용법


concurrency 로도 동작가능



3.3 Custom Github Action 구성

상위 Github에서 제공하는 Github Action만 사용가능한게 아니며, 본인의 Custom Github Action 구성도 가능하다.

  • Github Custom Action 지원 
기본으로 제공하는 Github Action 이외에도 본인 Container를 구성 후 만들어도 좋다.
DockerFile을 설정 후 EntryPoint 기반으로 구현하는 것으로 보인다. 


  • Github Custom Action 만드는 방법 
나도 아직 만들어 보지 못했지만, Github manual을 보면 쉽게 만들 것이라고 생각되어진다.
아래의 Github manual을 자세히 보고, 다른 예제를 보면 될것 같다.

STEP.1 Docker Container 생성 
Docker Container를 구성후 각 Entrypoint 설정과 관련 Script 이용
Python 이든 본인이 익숙한 언어로 구성하면 될 것 같다. 


STEP.2 hello-world-docker-action/action.yml 생성 
metafile이라고 하는데, yml로 쉽게 생성가능 


STEP.3 Docker의 Entrypoint 실행파일 
실제적인 Action Code라고 하며, 가장 중요 


STEP.4 README.md 파일에 사용법 
다른 것 처럼 README.md에 사용법을 적어놓도록하자. 


STEP.5 전체구성 확인 
Git으로 최종으로 잘 동작되면, Tag를 넣어, 올리고 전체구성을 다시 확인 


  • 만들어진 Custom Github Action 사용법 
이제 사용이 가능하며, 실제 사용방법은 espressif로 보면 될 것 같다.

    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - name: Hello world action step
        id: hello
        uses: actions/hello-world-docker-action@v2

상위예제는 아래에 만들었을 경우인 것 같음 

개인 or 조직 
아래와 같이 개인 이나, 조직 기반으로 만들면, 상위에 한번 개인 or 조직이름만 추가해주면 되는 것 같음 


3.4 Espressif사 의 Custome Github Action 분석 

Espressif에서는 본인들의 Github Action을 확장하여 사용하고 있으며, 이를 간단히 분석가능하다. 
매번 느끼지만, Espressif에서 많은 것을 보고 배우며, 잘 만들었다. 
JIRA와 Github Project와도 Sync를 할 수 있도록 Github Action을 만들었으며, 다양하게 만들어서 예제로 좋은 것 같다.

  • Espressif 의 확장 Custom Github Action 
상위의 Custom Github Action Manual대로 만들었으며, 쉽게 이해가 가며 다양한 예제가 존재

  • Github 의 Project 의 Issue 들을 JIRA와 Sync 작업 및 기타 
예제가 너무 좋은 것 같으며, JIRA와 Github Project를 같이 사용하면 괜찮을 것 같다.
나의 경우는 현재 Github Project도 괜찮다. 
release zip으로 예제 

소스를 보면 쉽게 이해가 가며, 역시 잘 만들어 놓은 것 같다.