Я хочу написать сценарий Python3, который создаст нетронутую систему (например: «Fedora: 42»), скопируйте локальный клон репозитория GIT и запустите его тесты. Для непрерывной интеграции. Я действительно предпочел бы избежать Dockerfiles. Подобный код в Perl-https://github.com/thewml/website-meta- ... -ci-run.pl. (Обратите внимание, что он использует Podman на Fedora.) Я хочу, чтобы эквиваленты Python3 методов в https://metacpan.org/pod/docker:cli::Wrapper::container. Кто-нибудь может помочь? .exec_run () для работы? Я хочу иметь возможность выполнять коды Bash в контейнере, увидеть их stdout/stderr и ждать, пока они закончат. Синхронно.#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2025 Shlomi Fish < https://www.shlomifish.org/ >
#
# Licensed under the terms of the MIT license.
"""
"""
import json
# import time
from podman import PodmanClient
"""Demonstrate PodmanClient."""
# Provide a URI path for the libpod service. In libpod, the URI can be a unix
# domain socket(UDS) or TCP. The TCP connection has not been implemented in
# this package yet.
uri = "unix:///run/user/1000/podman/podman.sock"
with PodmanClient(base_url=uri) as client:
version = client.version()
if False:
print("Release: ", version["Version"])
print("Compatible API: ", version["ApiVersion"])
print("Podman API: ",
version["Components"][0]["Details"]["APIVersion"], "\n")
# get all images
for image in client.images.list():
print(image, image.id, "\n")
sysname = 'fedora:42'
pull = client.images.pull(sysname)
print(pull)
image = client.images.get(sysname)
# image = pull
print(image)
containers = client.containers
# container = image.create()
container = containers.create(image)
print(container)
# container.attach(eot=4)
# container.attach()
container2 = containers.run(image=image, detach=True,)
print(container)
print(container2)
# time.sleep(5)
ret = container.exec_run(
cmd='echo helloworld\n',
demux=True,
)
print(container)
print(ret)
# container.run()
print('before exec_run', container)
if False:
# find all containers
for container in client.containers.list():
# After a list call you would probably want to reload the container
# to get the information about the variables such as status.
# Note that list() ignores the sparse option and assumes True
# by default.
container.reload()
print(container, container.id, "\n")
print(container, container.status, "\n")
# available fields
print(sorted(container.attrs.keys()))
print(json.dumps(client.df(), indent=4))
< /code>
его вывод: < /p>
$ python docker_ci.py
Traceback (most recent call last):
File "/home/shlomif/progs/python/pysol-cards-in-C/docker_ci.py", line 53, in
ret = container.exec_run(
cmd='echo helloworld\n',
demux=True,
)
File "/usr/lib/python3.13/site-packages/podman/domain/containers.py", line 211, in exec_run
response.raise_for_status()
~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/site-packages/podman/api/client.py", line 82, in raise_for_status
raise APIError(cause, response=self._response, explanation=message)
podman.errors.exceptions.APIError: 500 Server Error: Internal Server Error (can only create exec sessions on running containers: container state improper)
Подробнее здесь: https://stackoverflow.com/questions/796 ... ing-python
Автоматизация рабочего процесса CI на основе Podman с использованием Python ⇐ Linux
1746673492
Anonymous
Я хочу написать сценарий Python3, который создаст нетронутую систему (например: «Fedora: 42»), скопируйте локальный клон репозитория GIT и запустите его тесты. Для непрерывной интеграции. Я действительно предпочел бы избежать Dockerfiles. Подобный код в Perl-https://github.com/thewml/website-meta-language/blob/master/ci-testing/docker-ci-run.pl. (Обратите внимание, что он использует Podman на Fedora.) Я хочу, чтобы эквиваленты Python3 методов в https://metacpan.org/pod/docker:cli::Wrapper::container. Кто-нибудь может помочь? .exec_run () для работы? Я хочу иметь возможность выполнять коды Bash в контейнере, увидеть их stdout/stderr и ждать, пока они закончат. Синхронно.#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2025 Shlomi Fish < https://www.shlomifish.org/ >
#
# Licensed under the terms of the MIT license.
"""
"""
import json
# import time
from podman import PodmanClient
"""Demonstrate PodmanClient."""
# Provide a URI path for the libpod service. In libpod, the URI can be a unix
# domain socket(UDS) or TCP. The TCP connection has not been implemented in
# this package yet.
uri = "unix:///run/user/1000/podman/podman.sock"
with PodmanClient(base_url=uri) as client:
version = client.version()
if False:
print("Release: ", version["Version"])
print("Compatible API: ", version["ApiVersion"])
print("Podman API: ",
version["Components"][0]["Details"]["APIVersion"], "\n")
# get all images
for image in client.images.list():
print(image, image.id, "\n")
sysname = 'fedora:42'
pull = client.images.pull(sysname)
print(pull)
image = client.images.get(sysname)
# image = pull
print(image)
containers = client.containers
# container = image.create()
container = containers.create(image)
print(container)
# container.attach(eot=4)
# container.attach()
container2 = containers.run(image=image, detach=True,)
print(container)
print(container2)
# time.sleep(5)
ret = container.exec_run(
cmd='echo helloworld\n',
demux=True,
)
print(container)
print(ret)
# container.run()
print('before exec_run', container)
if False:
# find all containers
for container in client.containers.list():
# After a list call you would probably want to reload the container
# to get the information about the variables such as status.
# Note that list() ignores the sparse option and assumes True
# by default.
container.reload()
print(container, container.id, "\n")
print(container, container.status, "\n")
# available fields
print(sorted(container.attrs.keys()))
print(json.dumps(client.df(), indent=4))
< /code>
его вывод: < /p>
$ python docker_ci.py
Traceback (most recent call last):
File "/home/shlomif/progs/python/pysol-cards-in-C/docker_ci.py", line 53, in
ret = container.exec_run(
cmd='echo helloworld\n',
demux=True,
)
File "/usr/lib/python3.13/site-packages/podman/domain/containers.py", line 211, in exec_run
response.raise_for_status()
~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.13/site-packages/podman/api/client.py", line 82, in raise_for_status
raise APIError(cause, response=self._response, explanation=message)
podman.errors.exceptions.APIError: 500 Server Error: Internal Server Error (can only create exec sessions on running containers: container state improper)
Подробнее здесь: [url]https://stackoverflow.com/questions/79611663/automating-a-podman-based-ci-workflow-using-python[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия