Tôi đang cố gắng sử dụng Jenkins để xây dựng dự án C ++ trong bộ chứa Docker. Tôi không gặp vấn đề gì khi xây dựng ở Jenkins, hoặc xây dựng trong một container bên ngoài Jenkins.
Dưới đây là những gì tôi đã cố gắng. Tôi đang bỏ qua các ánh xạ khối lượng cho rõ ràng.
Trường hợp 1
Lệnh sau chạy thành công bản dựng trong trình bao.
docker run --rm --interactive=true --tty=true $IMAGE make
Tuy nhiên, khi chạy trong Jenkins như một bước "thực thi trình bao" Docker trả về lỗi sau.
cannot enable tty mode on non tty input
Trường hợp 2
Lệnh sau tương tự lệnh trước nhưng vô hiệu hóa tính tương tác.
docker run --rm $IMAGE make
Jenkins có thể chạy một bản dựng thành công. Tuy nhiên, có những vấn đề nghiêm trọng khi hủy bỏ một bản dựng. Bản dựng ngay lập tức được đánh dấu là bị hủy bỏ nhưng container vẫn tiếp tục chạy cho đến khi bản dựng hoàn thành. Ngoài ra, container không được gỡ bỏ sau khi thoát.
Khi chạy trong shell, lệnh xây dựng thành công nhưng không thể làm gián đoạn nó. Ngoài ra các container được gỡ bỏ sau khi thoát.
Câu hỏi
Có ai biết làm thế nào để chạy sạch các bản dựng trong các container Docker từ Jenkins và giữ lại khả năng hủy bỏ các bản dựng không?
Sử dụng bất kỳ plugin nào của Jenkins không phải là một tùy chọn vì các lệnh gọi Docker nằm trong tập lệnh và không thể trích xuất dễ dàng.