Middle+
Πώς μπορεί να μεταδοθεί ένα δυναμικό χαρακτηριστικό από το CI στο Docker κατά την κατασκευή της εικόνας, για παράδειγμα, το αναγνωριστικό έργου, αν δεν χρησιμοποιούνται μεταβλητές περιβάλλοντος;
sobes.tech AI
Απάντηση από AI
Μπορείτε να χρησιμοποιήσετε επιχειρήματα κατασκευής.
# Σύνταξη για τον ορισμό επιχειρήματος κατασκευής με προεπιλεγμένη τιμή
ARG PROJECT_ID=default
# Χρήση του επιχειρήματος στην εντολή COPY, για παράδειγμα
COPY ./app_${PROJECT_ID}.jar /app/app.jar
# Ή στην εντολή RUN
RUN echo "Το ID του έργου είναι ${PROJECT_ID}"
Στη γραμμή εργασίας CI/CD, κατά την κατασκευή της εικόνας, μπορείτε να περάσετε την τιμή του επιχειρήματος χρησιμοποιώντας τη σημαία --build-arg:
# Παράδειγμα εντολής κατασκευής σε CI
docker build --build-arg PROJECT_ID=$CI_PROJECT_ID -t my-image:${CI_COMMIT_SHORT_SHA} .
Εδώ, το $CI_PROJECT_ID είναι μια μεταβλητή CI που περιέχει τον αναγνωριστικό του έργου.
Ένας άλλος τρόπος είναι η χρήση ενός αρχείου με μεταβλητές για την κατασκευή, που είναι μια παραλλαγή της χρήσης μεταβλητών περιβάλλοντος:
# Το Dockerfile δεν αλλάζει
ARG PROJECT_ID=default
COPY ./app_${PROJECT_ID}.jar /app/app.jar
Αρχείο build-args.env:
PROJECT_ID=my-specific-project
Εντολή κατασκευής με αρχείο:
docker build --build-arg PROJECT_ID=$(cat build-args.env) -t my-image:${CI_COMMIT_SHORT_SHA} .
Άλλη επιλογή είναι η δημιουργία ενός αρχείου μέσα στο Dockerfile χρησιμοποιώντας το RUN:
ARG PROJECT_ID=default
# Δημιουργία αρχείου με το αναγνωριστικό του έργου
RUN echo "${PROJECT_ID}" > /app/project_id.txt
# Μεταγενέστερη χρήση αυτού του αρχείου από την εφαρμογή