포스트

Github Actions - Artifact, 서로 다른 job에서 파일 공유하기

github actions에서 artifact는 서로 다른 job의 파일을 공유할 때 사용한다!


Upload Artifact

https://github.com/actions/upload-artifact


artifact 파일은 업로드 되어있는 동안은 아무나 다운 받을 수 있기 때문에, 민감성 정보가 담긴 파일을 업로드 하지 않도록 유의해야 한다.

  • artifact 파일의 외부 노출 관리를 제한하는 방법으로는
    artifact 보관 기간을 짧게 설정하거나 사용 후 바로 삭제, 비공개 repository에서 artifact 생성하는 방법이 있다.


옵션 정보

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
- uses: actions/upload-artifact@v4 # 24.09.01 기준 최신 버전
  with:
    # 옵션 값
    # 생성할 artifact 이름
    # 지정하지 않을 경우 'artifact'로 생성된다.
    name:

    # 필수 값
    # 업로드 할 파일이나 폴더 경로를 설정
    path:

    # 옵션 값
    # 파일을 찾지 못한 경우 사용할 옵션
    #   warn: 경고 문구를 출력하고 action을 계속 수행
    #   error: 에러 문구를 출력하고 action을 중지함
    #   ignore: 관련 문구를 출력하지 않고 action을 계속 수행
    # 옵션 값을 추가하지 않을 경우 기본 값은 'warn'이다.
    if-no-files-found:

    # 옵션 값
    # 보존 기간 설정
    # 1일 ~ 90일 사이로 설정할 수 있다. 
    # 옵션 값을 설정하지 않을 경우 repository에 기본 설정된 기간이 적용된다.
    retention-days:

    # 옵션 값
    # artifact 압축 레벨 설정
    # 0 ~ 9 사이로 설정 가능
    # 0 레벨은 압축을 하지 않으므로 업로드 속도가 빨라진다.
    # 기본 값은 '6'
    compression-level:

    # 옵션 값
    # true로 설정 시 같은 이름의 artifact가 있으면 삭제하고 이번 업로드를 진행한다.
    # false로 설정 시, 같은 이름의 artifact가 있으면 action을 중지한다.
    # artifact가 없으면 해당되지 않는 옵션이다. 
    # 기본 값은 'false'
    overwrite:

    # 옵션 값
    # 지정한 경로 중 숨김 파일의 업로드 여부를 설정
    # 기본 값은 'false'
    include-hidden-files:


Download Artifact

https://github.com/actions/download-artifact

Upload Artifact로 생성한 artifact를 다운받는다.

다른 repository에 위치한 artifact를 가져올 수도 있다.


옵션 정보

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
uses: actions/download-artifact@v4 # 24.09.01 기준 최신 버전
  with:
  
    # 옵션 값. 
    # artifact 이름. 
    # 생략시 모든 artifact를 다운 받는다. 
    name: 
    
    # 옵션 값
    # 목적 경로
    path: 

    # 옵션 값
    # 다운받을 artifact 이름 패턴
    pattern: 
    
    # 옵션 값(기본 false)
    # 여러개의 artifact가 대상일 때 
    # - true를 적용하면 하나의 디렉토리에 다운받음
    # - false를 적용하면 각 이름의 디렉터리로 다운받음
    merge-multiple: 
    
    # 옵션 값
    # 다른 repository의 artifact를 다운받으려 할 때 필요
    github-token: 
    
    # 옵션 값
    # 다른 repository의 artifact를 다운받으려 할 때 필요
    repository: 
    
    # 옵션 값
    # 다운받을 artifact가 포함된 workflow id 
    run-id:  


사용 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
name: artifact study

on:
  push:
    branches:
      - main

jobs:
  upload:
      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: upload-artifact
          path: |
            **/build/libs/**.jar
            **/compose**.yml
            **/**ockerfile
          if-no-files-found: error

  download:
    runs-on: ubuntu-latest
    needs: upload
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          name: upload-artifacts
  • upload 실행 결과
    • upload-artifact 이름으로 path에 해당하는 파일 업로드 image
  • download 실행 결과
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    ls -al
      
    .
    ├── compose-build.yml
    ├── compose-local.yml
    ├── compose.yml
    ├── discovery
    │   ├── compose.yml
    │   ├── server-eureka
    │   │   ├── Dockerfile
    │   │   └── build
    │   │       └── libs
    │   │           └── server-eureka-0.0.1.jar
    │   └── server-gateway
    │       ├── Dockerfile
    │       └── build
    │           └── libs
    │               └── server-gateway-0.0.1.jar
    └── simpleBoard02
        ├── a-common-jwt
        │   └── build
        │       └── libs
        │           └── a-common-jwt-0.0.1-plain.jar
        ├── b-server-user
        │   ├── Dockerfile
        │   └── build
        │       └── libs
        │           └── b-server-user-0.0.1.jar
        ├── c-server-article
        │   ├── Dockerfile
        │   └── build
        │       └── libs
        │           └── c-server-article-0.0.1.jar
        └── compose.yml
      
    18 directories, 14 files
    




참고한 사이트

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.