Github action

pengooseDev·2023년 3월 11일
0
post-thumbnail

Github action은 하나의 서버다.

runner라고 불리운다.

작성한 코드는 runner에서 구동된다.
즉, 새로 push한 코드가 runner에 들어올 때, 해당 코드들로 원하는 자동화 툴을 만들 수 있다는 뜻이다.

  • 테스트에 통과할 경우 배포 진행
  • 새로 deploy될 경우, 특정 사람들에게 메일 전송 등

github action이란?

action이란?

github에서 발생하는 event 기반으로 작동(action)하는 기능을 의미한다.

우선, Actions 카테고리로 가면 하단의 여러 보일러플레이트가 제공된다. yml코드를 처음부터 작성하는 것은 귀찮기 때문에 필요한 보일러플레이트를 사용하는 것도 좋은 방법이다.

노란색 형광표를 친 set up a workflow yourself를 누르면 직접 action을 생성할 수 있다.


action 생성

yml파일 기반으로 작동한다.

name: action name

on:
  push:
    branches: [master, develop]
  pull:
  	branches: [master]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
    #- uses: actions/checkout@v2
	- name: Run pwd
      run: pwd
    - name: Run ls -al
      run: ls -al
  • name: action의 이름을 붙이는 필드이다.

  • on: event Trigger이다.
    > Event types Docs

  • jobs

  • build:

  • uses: 다른사람이 만들어둔 action(라이브러리)를 실행하고 싶을 때 사용
    actions/checkout 추가하면 저장소를 clone 및 checkout하여 이후 step에서 사용할 수 있게 해줌.

  • runs-on: action이 구동되는 환경을 설정한다. ubuntu, mac os, window 등 사용 가능

  • steps: 실제로 벌어지는 일들은 steps에 작성
    step은 name(step 이름)과 run(실제 동작 코드)로 구성된다.


환경변수 가져오기

name: CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
	- name: "context"
      env:
        COMMIT_ID: ${{ github.sha }}
      run: echo "Commit id => $COMMIT_ID"
	    

> Docs

예시코드

name: Context testing
on: push

jobs:
  dump_contexts_to_log:
    runs-on: ubuntu-latest
    steps:
      - name: Dump GitHub context
        id: github_context_step
        run: echo '${{ toJSON(github) }}'
      - name: Dump job context
        run: echo '${{ toJSON(job) }}'
      - name: Dump steps context
        run: echo '${{ toJSON(steps) }}'
      - name: Dump runner context
        run: echo '${{ toJSON(runner) }}'
      - name: Dump strategy context
        run: echo '${{ toJSON(strategy) }}'
      - name: Dump matrix context
        run: echo '${{ toJSON(matrix) }}'

결과

{
  "token": "***",
  "job": "dump_contexts_to_log",
  "ref": "refs/heads/my_branch",
  "sha": "c27d339ee6075c1f744c5d4b200f7901aad2c369",
  "repository": "octocat/hello-world",
  "repository_owner": "octocat",
  "repositoryUrl": "git://github.com/octocat/hello-world.git",
  "run_id": "1536140711",
  "run_number": "314",
  "retention_days": "90",
  "run_attempt": "1",
  "actor": "octocat",
  "workflow": "Context testing",
  "head_ref": "",
  "base_ref": "",
  "event_name": "push",
  "event": {
    ...
  },
  "server_url": "https://github.com",
  "api_url": "https://api.github.com",
  "graphql_url": "https://api.github.com/graphql",
  "ref_name": "my_branch",
  "ref_protected": false,
  "ref_type": "branch",
  "secret_source": "Actions",
  "workspace": "/home/runner/work/hello-world/hello-world",
  "action": "github_step",
  "event_path": "/home/runner/work/_temp/_github_workflow/event.json",
  "action_repository": "",
  "action_ref": "",
  "path": "/home/runner/work/_temp/_runner_file_commands/add_path_b037e7b5-1c88-48e2-bf78-eaaab5e02602",
  "env": "/home/runner/work/_temp/_runner_file_commands/set_env_b037e7b5-1c88-48e2-bf78-eaaab5e02602"
}

0개의 댓글