CircleCI의 machine Executor에서 build 작업에서 deploy 작업으로 파일 전달(Workspace)
개요
CircleCI machine Executor
를 사용하여 "Docker 빌드 ~ 배포"를 수행하는 프로젝트에서 build job에서 생성 된 파일/디렉토리를 deploy job에 전달하는 단계를 적어 둡니다.
방법(결론)
작업 사이에 Workspace를 통해 배포에 필요한 파일/디렉토리를 공유합니다.
persist_to_workspace
후속 deploy job에 제공할 파일/디렉토리를 Workspace에 업로드합니다.
특히 빌드 작업의 마지막 단계에서 persist_to_workspace
를 실행합니다.
config.yml - persist_to_workspace:
root: .
paths:
- ./app/build
- ./app/deps
작업 사이에 Workspace를 통해 배포에 필요한 파일/디렉토리를 공유합니다.
persist_to_workspace
후속 deploy job에 제공할 파일/디렉토리를 Workspace에 업로드합니다.
특히 빌드 작업의 마지막 단계에서
persist_to_workspace
를 실행합니다.config.yml
- persist_to_workspace:
root: .
paths:
- ./app/build
- ./app/deps
root:
working_directory
의 상대 경로) 형태로 지정합니다. paths:
attach_workspace
Workspace에 저장된 데이터를
attach_workspace
로 가져옵니다..circleci/config.yml
- attach_workspace:
at: .
at:
working_directory
의 상대 경로) 형태로 지정합니다. 보충 설명
CircleCI
jobs
는 격리 된 개별 환경에서 실행되는 사양입니다..circleci/config.yml
# 例:build jobで生成されたファイルは、そのままではdeploy jobには渡らない
jobs:
build:
...: ...
deploy:
...: ...
그 때문에, 특정의 job의 결과를 다른 job로 사용하기 위해서는, 이러한 「Workspace로 데이터 공유한다」등의 방법으로 전달을 실시하는 처리가 필요합니다.
(이미지 인용: CircleCI/Jobs overview )
예
실행 환경
상황
.
├── .circleci/
│ └── config.yml
├── app
│ ├── Dockerfile
│ ├── (build/)
│ ├── (deps/)
│ └── moge.json
└── docker-compose.yml
build job중,
docker-compose build
에 의해 생성된 빌드 파일군을 저장하고 있습니다 의사 코드
moge deps.get
를 실행하면 app/moge.json에 설명 된 종속 패키지가 생성되어 deps 디렉토리에 저장됩니다.npm install
package.json 설명 패키지를 node_modules/에 저장하는 것과 동일한 이미지입니다 코드
.circleci/config.yml
version: 2.1
orbs:
# 擬似Orb
deploy-orb: deploy-orb/deploy-orb@latest
executors:
machine-executor:
machine:
image: ubuntu-1604:202010-01
workflows:
version: 2
build-deploy:
jobs:
- build
- deploy:
requires:
- build
jobs:
build:
executor:
name: machine-executor
steps:
- checkout
- run:
name: Build Docker container
command: |
set -x
docker-compose build
- run:
name: Moge deps.get
command: |
set -x
# 擬似コード(依存パッケージ取得)
docker-compose run --rm app bash -c "moge deps.get"
- run:
name: Up Docker container
command: docker-compose up -d
- run:
name: Moge test
command: |
set -x
# 擬似コード(テスト実行)
docker-compose exec app bash -c "moge test"
- persist_to_workspace:
root: .
paths:
- ./app/build
- ./app/deps
- run:
name: Finish build
command: echo "Finish build"
deploy:
executor:
name: machine-executor
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Check files/directories
command: |
set -x
pwd && ls -a && ls app
- run:
name: Container push and release
working_directory: app
command: |
# 擬似コード(本番環境へビルドコンテナをデプロイ)
deploy-orb/install-and-push-release -a $YOUR_APP_NAME
- run:
name: Finish deploy
command: echo "Finish deploy"
(참고)
h tps : // / rc ぇ시. 이 m/도 cs/2.0/을 rkfぉws/
htps : // 해 rc ぇ시. 이 m / 두 cs / 2.0 / 조 bs-s ps /
h tps : // / rc ぇ시. 이 m / 두 cs / 2.0 / 네, rty ぺ s /
Reference
이 문제에 관하여(CircleCI의 machine Executor에서 build 작업에서 deploy 작업으로 파일 전달(Workspace)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/im_miolab/items/cd16e59fd51bd4f1805d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)