CircleCI API에서 cURL에서 매개 변수를 지정하고 Job 실행

CircleCI API에서 매개 변수를 지정하고 실행하는 방법입니다. cURL등의 외부 커멘드를 이용해 Job에 파라미터를 건네주고 유연하게 Job을 실행하는 것이 가능하게 됩니다.

CircleCI 설정



프로젝트 설정



프로젝트 → Advanced Settings에서 Enable pipelines가 On으로 설정되어 있는지 확인합니다. 기본 설정은 On입니다.

API 토큰 발급


  • CircleCI 관리 화면에서 자신의 아이콘을 클릭하십시오

  • 사용자 설정을 클릭하십시오

  • Personal API Tokens를 클릭하십시오

  • Create New Token을 클릭하여 토큰을 만듭니다




  • API를 통해 Job 실행



    샘플 YAML



    .circleci/config.yml
    version: 2.1
    
    parameters:
      messages:
        type: string
        default: ""
    
    jobs:
      build:
        docker:
          - image: circleci/node
        steps:
          - checkout
          - run:
              command: |
                echo "<< pipeline.parameters.messages >>"
    
    workflows:
      version: 2.1
      workflow:
        jobs:
          - build
    

    실행 명령


    curl -u [circleci-api-token]: 
    -X POST 
    -H "Content-Type: application/json" 
    -d '{"branch":"[branch_name]", 
    "parameters": 
    {"messages": "hello,world!"}
    }'
    https://circleci.com/api/v2/project/gh/[github_project_name]/[github_repo_name]/pipeline
    

    실행 결과





    명령 해설 해설



    circleci-api-token


  • 말미에 「:」를 부여하는 것으로 패스워드의 입력을 스킵 시킵니다.

  • 브랜치, 파라미터



    현재의 API v2의 사양이라고 리비전은 지정할 수 없는 것 같다? 입니다. 분기 이름을 지정합니다. 파라미터를 지정하는 경우는 {"파라미터명1":"값1", "파라미터명2":"값2",...}의 형식이 됩니다.

    API 버전



    1.1 대신 2를 사용합니다. CircleCI의 Using the API to Trigger Jobs - CircleCI을 참고하면 version 1.1의 API 레퍼런스에 링크가 붙어 있습니다.

    version 1.1에서는 움직이지 않으므로 반드시 version2 참조 를 참고로 합니다.

    기타



    Contexts 정보



    Contexts(프로젝트 전체의 환경 변수를 설정하는 기능)로 지정한 환경 변수도 Job에 반영됩니다.

    Commands, Orbs 정보



    config.yml에 commands 섹션과 orbs 섹션이 포함되어 있어도 API에서 Job이 실행됩니다.

    예를 들면 다음과 같은 config.yml에서도 동작 확인할 수 있었습니다. API에서 Google Compute Engine으로 인스턴스를 시작하고 시작이 성공하면 Twitter의 직접 메시지에 알리는 프로세스입니다.

    .circleci/config.yml
    version: 2.1
    orbs:
      gcp-cli: circleci/[email protected]
    
    parameters:
      instance-name:
        type: string 
        default: ""
    
    commands:
      initialize-gce:
        description: "Register GCP access keys to CircleCI project"
        steps:
          - gcp-cli/initialize
      start-vm:
        steps:
          - run:
              command: |
                gcloud compute instances start << pipeline.parameters.instance-name >> \
                --zone=asia-northeast1-b
      send-notification:
        description: "Send job status to Twitter direct message"
        steps:
          - run:
              name: Set external IP address to environment variable
              command: |
                ip_addr=$(
                           gcloud compute instances describe << pipeline.parameters.instance-name >> \
                           --format='get(networkInterfaces[0].accessConfigs[0].natIP)' \
                           --zone=asia-northeast1-b \
                         )
                echo "export INSTANCE_IP=${ip_addr}" >> $BASH_ENV
          - run:
              name: Install Tweepy
              command: |
                pip install tweepy
          - run:
              name: Send Job notifcation
              command: |
                python tweet.py \
                ${TWITTER_CONSUMER_KEY} \
                ${TWITTER_CONSUMER_SECRET_KEY} \
                ${TWITTER_ACCESS_TOKEN} \
                ${TWITTER_ACCESS_TOKEN_SECRET} \
                ${TWITTER_RECIPIENT}
    
    jobs:
      build:
        docker:
          - image: google/cloud-sdk:latest
        steps:
          - checkout
          - initialize-gce
          - start-vm
          - send-notification
    
    workflows:
      version: 2.1
      start-vm:
        jobs:
          - build:
              context: GCP
    

    참고 사이트


  • Introducing CircleCI API v2
  • CircleCI API v2에서 자유롭게 비즈니스 워크 플로우 작업 수행 - KAYAC engineers 'blog
  • 좋은 웹페이지 즐겨찾기