Sobes.tech
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
# Μεταγενέστερη χρήση αυτού του αρχείου από την εφαρμογή