Self-Hosted Runner./run.sh를 실행하여 Runner를 Listening 상태로 만든다.

GitHub Runner 백그라운드 실행 방법 (Systemd 서비스로 등록)
# Runner가 설치된 폴더에서 $ sudo ./svc.sh install $ sudo ./svc.sh start # 상태 확인 $ sudo ./svc.sh status # 삭제 $ sudo ./svc.sh stop $ sudo ./svc.sh uninstall
CLOUDS_YAML : ~/.config/openstack/clouds.yamlSSH_PRIVATE_KEY : ~/.ssh/id_ecdsa.github/workflows/deploy.yml name: OpenStack CD Pipeline
on:
push:
branches: ["main"]
jobs:
deploy:
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Create clouds.yml
run: |
mkdir -p ~/.config/openstack
echo "${{ secrets.CLOUDS_YAML }}" > ~/.config/openstack/clouds.yml
- name: Setup SSH Key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ecdsa
chmod 600 ~/.ssh/id_ecdsa
ssh-keygen -y -f ~/.ssh/id_ecdsa > ~/.ssh/id_ecdsa.pub
- name: Run Ansible Playbook
run: |
source /home/name/openstack-venv/bin/activate # 가상환경 활성화
ansible-playbook provision_vm.yml
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ecdsa 부분에서 { 앞에 $를 넣지 않았다.rm ~/.ssh/id_ecdsa ~/.ssh/id_ecdsa.pub
ssh-keygen -t ecdsa -b 521
cat ~/.ssh/id_ecdsawhich ansible-playbook
/home/name/openstack-venv/bin/ansible-playbooksource /home/name/openstack-venv/bin/activate를 추가하여 가상환경을 활성화한다.-on-error=abort 옵션을 쓰면 삭제하지 않고 남겨둘 수도 았다.)# Ubuntu 22.04 Cloud Image 다운로드
$ wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
# Glance에 등록
$ source /etc/kolla/admin-openrc.sh
openstack image create "ubuntu-22.04-base" \
--file jammy-server-cloudimg-amd64.img \
--disk-format qcow2 \
--container-format bare \
--public
# HashiCorp GPG 키 추가
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
# 리포지토리 추가
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
# 설치
sudo apt update && sudo apt install packer
ubuntu-nginx.pkr.hcl)packer {
required_plugins {
openstack = {
version = ">= 1.0.0"
source = "github.com/hashicorp/openstack"
}
}
}
variable "cloud_name" {
type = string
default = "my-openstack" # clouds.yaml에 정의된 이름
}
source "openstack" "ubuntu_nginx" {
cloud = var.cloud_name
image_name = "ubuntu-nginx-golden-{{timestamp}}" # 생성될 이미지 이름
source_image = "ubuntu-22.04-base"
flavor = "m1.small"
network_discovery_cidrs = ["10.0.0.0/24"]
floating_ip_network = "ext_net"
ssh_username = "ubuntu"
use_blockstorage_volume = true
volume_size = 10
}
build {
sources = ["source.openstack.ubuntu_nginx"]
provisioner "shell" {
inline = [
"sudo apt-get update",
"sudo apt-get install -y nginx",
"sudo systemctl enable nginx",
"echo '<h1>Welcome to Golden Image created by Packer</h1>' | sudo tee /var/www/html/index.html"
]
}
}
source "openstack" : Packer가 오픈스택 API를 호출하여 임시 VM을 생성한다. 이때 Floating IP를 자동으로 할당하여 인터넷 연결을 확보한다.provisioner "shell" : VM이 부팅되면 SSH(ubuntu 계정)로 접속하여 apt-get 명령어들을 실행한다. 이 단계에서 Nginx가 설치된다.# 초기화 (플러그인 다운로드)
$ cd ~/openstack-ansible-project/packer
$ packer init .
# clouds.yaml 경로 지정
$ export OS_CLIENT_CONFIG_FILE=~/.config/openstack/clouds.yml
$ packer build ubuntu-nginx.pkr.hcl
.github/workflows/build_image.yml)name: Build Golden Image with Packer
on:
push:
paths:
- 'packer/**'
branches: ["main"]
workflow_dispatch:
jobs:
packer-build:
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Create clouds.yml
run: |
mkdir -p ~/.config/openstack
echo "${{ secrets.CLOUDS_YAML }}" > /home/name/.config/openstack/clouds.yml
- name: Packer Init
run: |
cd packer
/usr/bin/packer init .
- name: Packer build
env:
OS_CLIENT_CONFIG_FILE: /home/name/.config/openstack/clouds.yml
run: |
cd packer
/usr/bin/packer build ubuntu-nginx.pkr.hcl
