Packer로 이미지 만들기를 CircleCI로 시도

Packer로 이미지 만들기를 CircleCI로 시도



Packer로 이미지를 만드는 동안 여러 가지 시도로 만든 Packer json을 사용하여 CircleCI에서 Packer를 실행하고 싶습니다.
  • github 에 push 한다
  • CircleCI에서 후크하여 자동으로 packer가 움직입니다.
  • packer로 만든 이미지가 aws의 AMI로 푸시됩니다.

    뭐, 이런 흐름을 해보고 싶습니다.

    조금 살펴보면, CircleCI의 곰(bear)씨가 Packer Workflows to validate, build and deploy AMIs using CircleCI 라고 하는 것을 올려 줍니다. 다만, 조금 내용이 어려운 느낌이므로, 좀 더 간단한 녀석을 만들어 보고 싶습니다.

    전제


  • CircleCI에 계정을 만드십시오 (github 로그인하면 자동으로 연결됩니다 ...)
  • CircleCI의 Contexts에 AWS의 키 정보를 설정합시다

  • aws 라든지 github 라든지는 지금 사소한 느낌이므로, 할애합니다. . .

    리포지토리 만들기



    github에 리포지토리를 만드십시오.New repository 라고 하는 버튼을 누르면, 적당하게 만들 수 있다고 생각합니다.


    Repository name 넣고 private 선택하고 Create repository 누릅니다.



    할 수있는 사람의 HTTPS 주소를 확인하십시오.



    github에 올리는 소스를 만듭니다.



    먼저 리포지토리에 대한 디렉터리를 만듭니다.
    > mkdir circleci_test
    > cd circleci_test
    > mkdir .circlrci
    

    CircleCI 용 구성 파일을 만듭니다.
    우선, Packer로 빌드할 뿐입니다.

    circleci/config.yml
    version: 2
    jobs:
      build:
        docker:
          - image: hashicorp/packer:1.3.3
        working_directory: ~/packer
        steps:
          - checkout
          - attach_workspace:
              at: ~/packer
          - run:
              name: Build
              command: packer build build.json
              no_output_timeout: 30m
    workflows:
      version: 2
      build-and-deploy:
        jobs:
          - build:
              context: AMI
    

    contextAMI 로 설정하고 있으므로, 이것은 적절히 맞추어 주십시오.

    Packer용 빌드 파일은 이전과 동일할 수 있습니다.
    (이름만 example.json -> build.json으로 변경했습니다)

    build.json
    {
      "variables": {
        "aws_access_key": "",
        "aws_secret_key": ""
      },
      "builders": [{
        "type": "amazon-ebs",
        "access_key": "{{user `aws_access_key`}}",
        "secret_key": "{{user `aws_secret_key`}}",
        "region": "ap-northeast-1",
        "source_ami_filter": {
          "filters": {
            "virtualization-type": "hvm",
            "name": "ubuntu/images/*ubuntu-bionic-18.04-amd64-server-*",
            "root-device-type": "ebs"
          },
          "owners": ["099720109477"],
          "most_recent": true
        },
        "instance_type": "t2.micro",
        "ssh_username": "ubuntu",
        "ami_name": "packer-example {{timestamp}}"
      }],
      "provisioners": [
        {
          "type": "shell",
          "inline": [
            "sleep 30",
            "sudo apt-get update",
            "sudo apt-get install -y nginx"
          ]
        }
      ]
    }
    

    그렇다면 커밋하고 밀어 버리자.
    > git init
    > git add .
    Initialized empty Git repository in ~/circleci_test/.git/
    > git commit -m "first commit"
    [master 00ffe8c] second commit
     2 files changed, 54 insertions(+)
     create mode 100644 .circleci/config.yml
     create mode 100644 build.json
    > git remote add origin https://github.com/<your account>/<repository name>.git
    > git push -u origin master
    Username for 'https://github.com': <account mail>
    Password for 'https://<account mail>@github.com':
    Counting objects: 6, done.
    Delta compression using up to 3 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (5/5), 958 bytes | 0 bytes/s, done.
    Total 5 (delta 0), reused 0 (delta 0)
    To https://github.com/<your account>/<repository name>.git
       e5d5887..00ffe8c  master -> master
    Branch master set up to track remote branch master from origin.
    

    우선, 이것으로 푸시는 할 수 있었을 것입니다.

    CircleCI로 협력합시다.



    CircleCI 에 로그인하고 ADD PROJECTS 에서 만든 리포지토리 이름의 녀석을 Set Up Project 합니다.


    Start Building 라고 나온다고 생각하므로 포치 밀어 줍니다.



    빌드가 실행되고 성공하면 SUCCESS 가 됩니다.



    잊어버릴 수 없는 Contexts


    Create Cotext 를 포치 합니다.


    AMI를 생성하여 필요한 AWS 키를 등록합니다.SecurityPublic 라는 것은 같은 조직 내에서 볼 수 있다는 의미입니다.



    이번 작업이라면 AWS_IMAGE 는 사용하지 않습니다.

    AMI가 있는지 확인



    AWS의 Companne에서 확인해 봅시다.



    할 수 있습니다.

    요약



    우선 테스트라든지 없이 해 보았습니다.
    이제 github를 업데이트할 때마다 AMI가 생성됩니다.

    좋은 웹페이지 즐겨찾기