Drone 1.0 Release Candidate가 나왔습니다.

이 기사는 모집 라이프 스타일 Advent Calendar 2018의 셋째 날 기사입니다.

소개



새로운 서비스를 개발하고 있습니다 @ 아케치.
현재 실시하고 있는 서비스의 개발에서는 CI/CD 툴에 Drone을 채용하고 있습니다.
지난달 1.0 Release Candidate가 발표되었으므로, 어떤 버전 업인지 쫓아 보았습니다.

업그레이드 시 주의사항



0.8에서 1.0으로 자동 업그레이드할 수 없습니다.
데이터베이스에 호환되지 않는 변경사항이 있으므로 업그레이드에는 마이그레이션 유틸리티가 필요합니다.
이 유틸리티는 11월 16일까지 준비한다고 하는 기술이 문서에 있습니다만, 아직 없는 것 같습니다.

추천 기능



YAML 형식의 상당한 향상



파이프라인 구문은 1.0에서 크게 바뀝니다.
새로운 구문은 Kubernetes에서 영감을 얻었습니다.
Drone 커뮤니티의 대부분은 이미 Kubernetes를 채택하고 있으며 잘 알려진 이유입니다. (나도 그 1명입니다)

오래된 형식

.drone.yml
pipeline:
  build:
    image: golang
    commands:
    - go build
    - go test

services:
  redis:
    image: redis:latest

새로운 형식

.drone.yml
kind: pipeline
name: default

steps:
- name: build
  image: golang
  commands:
  - go build
  - go test

services:
- name: redis
  image: redis:latest

Multi-Machine 파이프라인



빌드 시간을 줄이기 위해 여러 머신에 빌드 작업을 분산하고 싶을 때 유용한 기능입니다.
Multi-Machine 파이프라인은 여러 YAML 문서로 구성됩니다.
다음은 두 개의 병렬 파이프라인을 실행하는 예입니다.
빌드 상태는 두 파이프라인의 결과에 따라 결정됩니다.

.drone.yml
kind: pipeline
name: frontend

steps:
- name: build
  image: node
  commands:
  - npm install
  - npm test

---
kind: pipeline
name: backend

steps:
- name: build
  image: golang
  commands:
  - go build
  - go test

services:
- name: redis
  image: redis

Multi-Platform 파이프라인



여러 OS나 아키텍처에서 빌드나 테스트가 필요할 때 편리한 기능입니다.
하나의 파이프라인은 Linux/ARM에서 실행되고 다른 파이프라인은 Linux/AMD64에서 실행되는 예입니다.

.drone.yml
kind: pipeline
name: amd

platform:
  os: linux
  arch: amd64

steps:
- name: build
  image: golang
  commands:
  - go build
  - go test

---
kind: pipeline
name: arm64

platform:
  os: linux
  arch: arm64

steps:
- name: build
  image: golang
  commands:
  - go build
  - go test

서명된 YAML 파일



신뢰성을 검증하거나 마음대로 다시 쓰는 것을 방지하기 위해 YAML 파일에 서명할 수 있습니다.
이는 공용 리포지토리에서 승인되지 않은 변경을 방지하는 데 특히 유용한 기능입니다.
사용자가 변경하여 서명 확인에 실패하면 파이프 라인은 승인 될 때까지 보류됩니다.
서명은 YAML 파일에 signature 자원으로 작성됩니다.

.drone.yml
---
kind: pipeline
name: default

steps:
- name: build
  image: golang
  commands:
  - go build
  - go test

---
kind: signature
hmac: F10E2821BBBEA527EA02200352313BC059445190

Jsonnet으로 설정



Jsonnet 파일에서 동적으로 YAML 파일을 생성하는 기능입니다.
예를 들어 Ruby의 여러 버전에서 테스트를 실행하고 싶을 때 사용할 수 있습니다.

.drone.yml
---
kind: pipeline
name: ruby-2-4

steps:
- name: test
  image: ruby:2.4
  commands:
  - bundle install --jobs=3 --retry=3
  - rake

---
kind: pipeline
name: ruby-2-3

steps:
- name: test
  image: ruby:2.3
  commands:
  - bundle install --jobs=3 --retry=3
  - rake

.jsonnet으로 작성하면 다음과 같습니다.
local Pipeline(name, image) = {
  kind: "pipeline",
  name: name,
  steps: [
    {
      name: "test",
      image: image,
      commands: [
        "bundle install --jobs=3 --retry=3",
        "rake"
      ]
    }
  ]
};

[
  Pipeline("ruby23", "ruby:2.3"),
  Pipeline("ruby24", "ruby:2.4"),
]

네이티브 지원



에이전트를 여러 OS 및 아키텍처에 설치할 수 있습니다.
  • Linux AMD64
  • Linux ARM
  • Linux ARM64
  • Windows 1803

  • 사용자 인터페이스 개조





    기타


  • cron 작업으로 스케줄링
  • drone fmt 명령

  • Matrix 더 이상 사용되지 않음

  • 요약



    Drone 1.0 Release Candidate의 기능을 살펴 보았습니다.
    버전이 1.0이 된 것으로, 지금까지 원한다고 생각했던 기능이 꾸준히 추가되어 왔습니다.
    현재는 0.8을 사용하고 있으므로, GA가 되면 본격적으로 업그레이드하고 싶다고 생각합니다.

    좋은 웹페이지 즐겨찾기