Concourse CI:项目结构

时间:2017-01-09 16:17:24

标签: concourse

情境:

我一直在努力实现一个大厅ci管道超过一个月,我的单个yml文件已经变得安静了一点。我知道最好将管道拆分成几个文件并在管道中引用它们。

问题:

有人可以提供构建大厅ci管道的最佳实践吗?

我的思维过程:

offering-pipeline | |_ ci: | | | |_ images: | | |_ Dockerfile | | | |_ misc: | | |_ python-requirements.txt | | | |_ ci-pipeline.yml | |_ project: |_ project-pipeline.yml | |_ jobs | |_ scripts : | |_ build: | |_ build_xyz. | |_ deploy: | |_ deploy_xyz. | |_ test: | |_ test_xyz. | |_ publish: |_ publish_xyz.

谢谢,

-Abe。

1 个答案:

答案 0 :(得分:2)

第一步是将所有任务提取到文件中。我有一个任务文件夹,一个模板文件夹和每个管道的脚本文件夹。在上面(在根目录中)我有一个包含管道根结构的pipeline.yml,以及一个用于在汇总中设置管道的Makefile和Makefile.constants。

由于我没有那么多的构建,测试,发布任务,我对它们有一个命名约定,而不是每个文件夹中包含1-4个文件。

atom中管道文件夹中的树:

enter image description here

注意:pipeline.yml文件仍然很长(~500行)

Makefile,$ {}来自包含的文件:

#Setup Makefile constants for urls etc:
include ../Makefile.constants

#Setup Makefile constants for  repo:
include ./Makefile.constants


set-pipe:
    fly -t dev_refactor set-pipeline \
        --config pipeline.yml \
        --pipeline ${PIPELINE} \
        --var "client-repo=${CLIENT_REPO_URI}" \
        --var "client-branch=${CLIENT_BRANCH}" \
        --var "server-repo=${SERVER_REPO_URI}" \
        --var "server-branch=${SERVER_BRANCH}" \
        --var "private-key=$$(cat ~/.ssh/id_rsa_no_passphrase)" \
        --var "docker-registry=${DOCKER_REGISTRY}" \
        --var "docker-registry-cert=$$(cat ../keys/docker-registry/docker-registry.crt)" \
        --var "docker-registry-server-dist=${DOCKER_REGISTRY}/server" \
        --var "docker-registry-client-dist=${DOCKER_REGISTRY}/client" \
        --var "docker-registry-node=${DOCKER_REGISTRY}/node" \
        --var "docker-registry-maven=${DOCKER_REGISTRY}/maven" \
        --var "docker-registry-protractor=${DOCKER_REGISTRY}/protractor" \
        --var "docker-registry-npm-cache=${DOCKER_REGISTRY}/npm-cache" \
        --var "docker-registry-soap=${DOCKER_REGISTRY}/soap-ui" \
        --var "reports-server=${REPORTS_SERVER}" \
        --var "concourse-url=${CONCOURSE_URL}" \
        --var "nexus-url=${NEXUS_URL}"

.PHONY: set-pipe

destroy-pipe:
# Destroy the pipeline in concourse
    fly -t dev_refactor destroy-pipeline \
        --pipeline ${PIPELINE}
.PHONY: destroy-pipe