GiitHubAction에서 Packer+Ansible를 사용하여 자동으로 이미지를 구성하는 동작
12055 단어 AnsibleGitHub ActionsPackertech
개시하다
기계 이미지를 자동으로 생성하는 Packer편리한 도구죠.Packer를 사용하면 하나의 지령으로 이미지를 구축할 수 있지만 하나의 지령도 자동화되면 쉬울 것 같아서 GiitHub Actions에서 Ansible의 provisioner에서 사용하는 Packer 빌딩을 만드는 방법을 쓰고 싶습니다.
메서드
GiitHub Actions에서 하려면 먼저 공식적으로 준비한 작업 절차를 사용합니다.
물론 Packer에도 공식적인 업무 절차가 있다.
하지만 공식적인 작업 절차라면 Provisionar는 Ansible를 사용할 수 없을 것 같습니다
이 issue에 적힌 것처럼
ansible-playbook
실행할 수 없는 느낌이다.페이커의 작업 흐름은 주자의 Docker 컨테이너에서 수행되기 때문에 안에 Ansible가 설치되어 있지 않은 것 같다.
따라서 공식적인 작업 절차에서 Ansible을 사용할 수 없기 때문에 도커의 이미지와 동작을 스스로 준비할 필요가 있으니 제작하세요!
참고로 자신의 작품의 동작을 자세히 알고 싶으면 아래 공식 문서를 참고하세요.
이번에 Docker가 컨테이너 동작으로 Packer+Ansible을 만들 거예요.
방법
일단 목록 구성은 다음과 같은 느낌.
├── .github
│ └── workflows
│ └── packer.yml
├── Dockerfile
├── action.yml
├── entrypoint.sh
└── packer
├── packer.json
└── roles
Docker 이미지 준비
먼저 Docker file을 작성합니다.
하는 일은 debian의 기본 인상을 사용하고 Packer와 Ansiblen이 설치되어 있습니다.
설치에 관해서는 이쪽의 공식 문서를 참고하였다.
FROM debian:buster-slim
RUN apt update
RUN apt -y upgrade
RUN apt -y install gnupg
RUN apt -y install curl
RUN apt -y install software-properties-common
# Install Packer
RUN curl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add -
RUN apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
RUN apt update && apt -y install packer
# Install Ansible
RUN echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" >> /etc/apt/sources.list
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
RUN apt update && apt -y install ansible
COPY "entrypoint.sh" "/entrypoint.sh"
ENTRYPOINT ["/entrypoint.sh"]
action.준비
GiitHub Actions에서 사용자가 정의한 작업을 수행하려면 작업을 수행합니다.yml 제작이 필요합니다.
하고 있는 일로 input과command에서 일합니다.directory의 두 개의 입력을 받아 방금 준비한 Docker 동작을 실행하기 위해runs에 Docker file을 설정합니다.
action.공식 문서에는yml에 대한 상세한 내용이 상세하게 기재되어 있다.
# action.yml
name: 'Packer Build'
description: 'Automatic build with Packer'
inputs:
command:
description: 'input command'
required: true
working_directory:
description: working directory for command (defaults to root)
required: false
runs:
using: 'docker'
image: 'Dockerfile'
entrypoint.sh의 준비
entrypoint.sh는 다음과 같다.
하고 있는 일로 아까 액션.yml의 input에 정의된command와workingdirectory에서 얻은 입력으로 환경 변수
INPUT_COMMAND
와 INPUT_WORKING_DIRECTORY
필요한 입력 항목command가 없으면 오류를 토로하고 끝냅니다.어떤 경우에는 일을 한다directory에서 지정한 디렉토리의 CD에서 명령을 실행합니다.#!/usr/bin/env bash
set -e
# fail if INPUT_COMMAND is not set
if [ -z "${INPUT_COMMAND}" ]; then
echo "Required variable \`command\` is missing"
exit 1
fi
if [ -n "${INPUT_WORKING_DIRECTORY}" ]; then
cd "${INPUT_WORKING_DIRECTORY}"
fi
${INPUT_COMMAND}
workflows/packer.yml
드디어 작업흐름에 관한 서류가 도착했습니다.
다음과 같은 느낌이 듭니다.
설정
uses:./
을 통해 방금 만든 동작입니다.실행하다그리고 커맨드랑 워크맨.directory에서 실행할 명령과 디렉터리를 지정합니다.
명령을 직접 전달하는 형식이기 때문에validate 명령 등을 통해 문법 검사를 할 수도 있다.
with:
command: packer build packer.json
working_directory: ./packer
이 작업 절차라면on
workflow_dispatch
이기 때문에 수동으로 실행할 수 있습니다.이 부분은 PR 합병 시 다양한 설정이 가능하며 취향에 맞게 변경할 수 있다.
name: Packer Build
on:
workflow_dispatch:
jobs:
packer:
runs-on: ubuntu-latest
name: packer
steps:
- uses: actions/checkout@v2
- name: Packer Validate
uses: ./
with:
command: packer validate -syntax-only packer.json
working_directory: ./packer
- name: Packer Build
uses: ./
with:
command: packer build packer.json
working_directory: ./packer
실행하다
workflow_dispatch
GiitHub의 창고 라벨에서 Actions 선택방금
Select Workflow
에서 만든 Packer Build
선택Run workflow
에서 수행할 수 있습니다.실행 후 이런 느낌으로 step 옆에 체크 표시를 하면 성공합니다.
총결산
나는 이렇게 하면 GiitHub Actions에서Ansible를 사용하여 Packer 빌딩을 지을 수 있을 것이라고 생각한다.
앞으로도 본격적인 업무 절차에서도 할 수 있었으면 좋겠어요!
그리고 이번에 제작된 용기에서 지령을 수행하는 동작은 통용성이 높아 기릿허브 액션스에서 이 지령을 사용하려 했지만, 제대로 된 동작을 만들지 않을 때는 제 작품도 간단해질 것 같았어요.
Reference
이 문제에 관하여(GiitHubAction에서 Packer+Ansible를 사용하여 자동으로 이미지를 구성하는 동작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tetrapod117/articles/9541a7e9be727e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)