GitHub Actions로 Ansible 배포

GitHub Actions로 Ansible 배포



"GitHub Actions를 사용하여 리포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행합니다."GitHub Actions 설명서 페이지의 소개를 말합니다. 이것이 Ansible과 어떤 관련이 있습니까? Ansible은 코드이므로 Git 이벤트를 기반으로 배포하는 워크플로를 구축할 수 있습니다. 리포지토리에 대한 푸시 또는 풀 요청과 같은 것입니다.

Ansible 작업 만들기



GitHub Actions는 작업을 만들고 워크플로를 사용자 지정하기 위해 결합하는 개별 작업입니다. Docker container Action 을 사용하여 풀 요청을 푸시하거나 병합할 때마다 Ansible을 실행하기 위한 고유한 항목을 생성합니다.

Ansible 작업 디렉터리를 만듭니다.

mkdir .github/actions/ansible


새로 만들기Dockerfile .

FROM  <DockerHub-UserName>/ansible-in-containers

COPY ./entrypoint.sh /entrypoint.sh

ENTRYPOINT ["bash","/entrypoint.sh"]

entrypoint.sh 스크립트를 Ansible Action 디렉토리에 복사합니다.

#BASH
Copy entrypoint.sh .github/actions/ansible

#POWERSHELL
Copy-Item entrypoint.sh .github/actions/ansible


새 디렉터리에 action.yml를 만듭니다.

name: 'Ansible'
description: 'Runs an Ansible playbook'
inputs:
  playbook:
    description: 'Ansible playbook to run'
    required: true
    default: playbook.yml
  inventory:
    description: 'Ansible inventory to use'
    required: true
    default: localhost
runs:
  using: 'docker'
  image: 'Dockerfile'
  args:
    - ${{ inputs.playbook }}
    - ${{ inputs.inventory }}


이름과 설명은 작업이 무엇이고 무엇을 하는지에 대한 컨텍스트를 제공합니다. 입력은 Docker 컨테이너 작업에서 사용하는 매개변수를 정의합니다. 플레이북과 인벤토리가 없으면 진입점 인수가 비어 있고 ansible-command가 실행되지 않기 때문에 이 작업에 필요한 입력입니다. 각 입력에는 기본값도 있습니다.

마법이 일어나는 실행 섹션 내에서. docker를 사용하여 설정하는 것은 Action 유형을 Docker 컨테이너 Action으로 지정하는 것입니다. 이미지를 Dockerfile로 설정하면 작업이 사용하는 컨테이너를 빌드하기 위해 작업 디렉터리에 로컬인 Dockerfile을 사용하도록 작업에 지시합니다. Args는 이미지가 빌드되고 Action이 컨테이너를 실행한 후에 전달됩니다.

워크플로 만들기



워크플로는 빌드, 테스트 및 릴리스를 오케스트레이션할 수 있는 사용자 지정 자동화 프로세스입니다. 워크플로를 사용하여 모든 Ansible 파일을 린트한 다음 Ansible Docker 컨테이너 작업을 실행합니다.
workflow 디렉토리 생성

mkdir .github/workflows

deploy_ansible.yml 워크플로 파일을 생성합니다.

name: deploy ansible

on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: checkout repo
      uses: actions/checkout@v2
    - name: Lint Ansible Playbook
      uses: ansible/ansible-lint-action@master
      with:
        targets: ""
  deployAnsible:
    needs: build
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - uses: ./.github/actions/ansible
      with: 
        playbook: playbook.yml
        inventory: localhost


위의 코드는 deploy Ansible이라는 GitHub 워크플로를 생성합니다. 리포지토리의 마스터 브랜치에 푸시 또는 풀 요청이 있을 때만 트리거됩니다. 워크플로우가 트리거되면 두 가지 작업이 시작됩니다. 먼저 build 작업이 실행됩니다. 빌드는 리포지토리의 모든 .yml 또는 .yaml 파일에 대해 ansible-lint 명령줄 유틸리티를 실행하는 ansible-lint라는 공개 GitHub 작업을 실행합니다. ansible-lint가 성공하면 두 번째 작업이 트리거됩니다. Ansible Docker 컨테이너 작업 실행deployAnsible은 컨테이너에 대한 인수로 제공된 값을 사용하여 실행됩니다. 그런 다음 컨테이너는 ansible-playbook 목록에 지정된 인수를 사용하여 with 명령을 실행합니다.

남은 것은 변경 사항을 푸시하는 것입니다. GitHub는 .github 디렉터리 내의 파일을 감지하고 해당 디렉터리의 .yml 문서를 기반으로 작업 및 워크플로를 생성합니다. 1~2분 정도 기다린 다음 GitHub.com의 리포지토리에서 작업 탭 아래에서 작업 결과를 검토합니다.



결론



이제 Docker 컨테이너 내에서 Ansible을 빌드, 실행 및 배포하는 방법을 배웠습니다. 컨테이너는 더 이상 개발자만이 애플리케이션을 실행하는 데 사용하는 것이 아닙니다. 시스템 관리자, DevOps 엔지니어 및 SRE가 코드형 인프라를 배포하는 방법이기도 합니다. 컨테이너를 직접 사용하면 이점을 직접 확인할 수 있습니다. 컨테이너는 귀하, 귀하의 팀 및 릴리스 파이프라인, Ansible 환경의 버전이 지정된 이미지, 향상된 이식성 및 유연성을 위한 일관된 개발 경험을 제공합니다. 컨테이너는 단순한 웹 앱이 아니라 인프라의 미래입니다. 그들에 대해 배울 필요가 있을 때까지 기다리지 말고 오늘 시작하세요. 지금 시작하세요.


"Using Ansible in Containers"에서 전체 블로그 게시물duffney.io 읽기

좋은 웹페이지 즐겨찾기