В Amazon EC2, что лучший способ состоит в том, чтобы клонировать частный репозиторий GitHub на начальной загрузке?

Я должен настроить группу автомасштаба экземпляров EC2, которые на начальной загрузке клонируют конкретное ответвление и фиксацию из частного репозитория GitHub, затем выполнят код из того репозитория.

Я использую полученный из Ubuntu AMI, который имеет облачную-init систему запуска на нем, таким образом, это кажется мне самым простым способом реализовать, это было бы облачным-init пользовательским сценарием, который устанавливает GitHub, развертывают ключ, использование что клонировать репозиторий, и затем запускает соответствующие сценарии в клонированном репозитории.

Вот моя первая попытка (развернуть ключ, ответвление и хеш фиксации вставляются процессом управления, который управляет кластером автомасштаба прежде, чем инициализировать LaunchConfiguration):

#!/usr/bin/env python

# ** IMPORTS OMITTED **

DEPLOY_KEY = '''
--- RSA PRIVATE KEY GOES HERE ---
'''
REPO_URL = 'git@github.com:github_user/MyRepository.git'
BRANCH = 'master'
COMMIT = '6dba9ae2cb77dc30c525ce14aeb82b072c88042b'
USER_HOMEDIR = os.environ['HOME']
WORKING_PATH = USER_HOMEDIR

try:
    os.makedirs(os.path.join(USER_HOMEDIR, '.ssh'))
except:
    pass

# Install the deploy key as the user's default identity file
keypath = os.path.join(USER_HOMEDIR, '.ssh', 'id_rsa')
try:
    with open(keypath, 'w') as keyfile:
        keyfile.write(DEPLOY_KEY)
except:
    with open(keypath, 'r') as keyfile:
        assert keyfile.read() == DEPLOY_KEY

# openSSH requires identitiy file mode to be 600
os.chmod(keypath, stat.S_IREAD)

# Disable strict host checking for github.com so we don't get the prompt
with open(os.path.join(USER_HOMEDIR, '.ssh', 'config'), 'a') as sshconfig:
    sshconfig.write("\nHost github.com\n\tStrictHostKeyChecking no\n")

# clone the get repo
os.chdir(WORKING_PATH)
subprocess.call('git clone %s --branch %s' % (REPO_URL, BRANCH), shell=True)
if COMMIT != 'HEAD':
    os.chdir(os.path.join(WORKING_PATH, 'LFAnalyze'))
    subprocess.call('git checkout ' + COMMIT, shell=True)

Этот сценарий работает от оболочки входа в систему, но ему не удается для выполнения в облачной-init's среде, потому что переменная среды $HOME еще не установлена (облачные-init выполнения в Новомодном задании в runlevel 2 с доступом к этим переменным среды).

клон мерзавца, кажется, не имеет опцию передать в опциях SSH тех, которые позволили бы мне использовать конкретный файл ключей. Это просто смотрит в ~/.ssh/для ключа идентификационных данных по умолчанию. Если $HOME не определяется, когда этот сценарий выполняется, как я могу сказать клон мерзавца, где искать Развернуть Ключ?

С другой стороны, там некоторый путь состоит в том, чтобы заставить облако-init выполнить сценарий как конкретного пользователя, эмулируя среду оболочки входа в систему?

Или я просто приближаюсь к этой всей проблеме неправильный путь? Существует ли установленная лучшая практика или стандартный способ сделать это?

1
задан 12 June 2013 в 21:55
1 ответ

Обычно я бы рекомендовал вам создать рабочий экземпляр EC2 с ключом SSH и git repo clone (рабочий экземпляр с вашей идеальной конфигурацией).

Затем создайте AMI этого экземпляра и в конфигурации запуска введите свои сценарии в пользовательские данные, чтобы сценарии запускались каждый раз (в основном обновляйте git и запускайте команду) при запуске экземпляра.

Образец сценария будет (при условии, что / opt / src находится там, где находится ваше репо):

#!/bin/sh
cd /opt/src
git pull
source run_cmd.sh

Таким образом, ваш скрипт содержится и поддерживается в хорошем состоянии. Надеюсь, это поможет.

3
ответ дан 3 December 2019 в 18:53

Теги

Похожие вопросы