この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
YAMLに項目を追加する際、重複した構成ならエイリアスの利用が好ましいと思いますが、エイリアスが意図した構成になっているかどうかが問題となります。
CircleCIのconfig.yamlに設定したWorkflowから重複を省くため、エイリアス展開を目視しながらの編集を実現するものを探していましたが特に見つからず、代わりにエイリアスを展開出力するツールにて確認を行ってみました。
yaeについて
Goで作成された、YAML の alias を anchor の内容に展開した YAML を出力するコマンドです。要はYAML展開専用のツールです。
shin1x1/yae: YAML aliases expander
go get -u github.com/shin1x1/yae
yae .circleci/config.yaml | less
PythonにおけるOrderedDictのような挙動ではないため若干項目に上下があり、インデント等にも整形が入ります。そのため厳密な差分確認には向かないと思われます。
以下、実際にエイリアスを使ったファイルをyaeに展開した例です。
.circleci/config.yaml
version: 2.1
orbs:
aws-cli: circleci/aws-cli@0.1.16
slack: circleci/slack@3.4.0
aws-ecr: circleci/aws-ecr@6.5.0
references:
save_cach_ref: &save_cach_ref
key: pipenv-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
paths:
- ".venv"
docker_image: &docker_image
docker:
- image: circleci/python:3.7.3
environment:
PIPENV_VENV_IN_PROJECT: true
resource_class: small
parameters:
python-version:
type: string
default: "3.7"
.
.
jobs:
test:
<<: *docker_image
executor: aws-cli/default
steps:
- checkout
- setup_remote_docker
- restore_cache:
key: pipenv-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
- run: echo "export latest_commit_log=$(git log --oneline -1)" >> $BASH_ENV
- run:
command: |
pipenv sync --dev
- save_cache:
<<: *save_cach_ref
% yae .circleci/config.yaml
.
.
job:
test:
docker:
- environment:
PIPENV_VENV_IN_PROJECT: true
image: circleci/python:3.7.3
executor: aws-cli/default
parameters:
python-version:
default: "3.7"
type: string
resource_class: small
steps:
- checkout
- setup_remote_docker
- restore_cache:
key: pipenv-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
あとがき
yq
でのキー構成確認という手もありますが、複数の構成が正常に展開されたかどうか俯瞰確認するのには辛いなと思い、今回のエントリとなりました。
circleci cliでのvalidateにて、キー構成のミスが分かり、かつエイリアス設定のため非常に確認が面倒なケースには重宝すると思われます。