Menu

Friday, June 28, 2019

[Docker] วิธีการใช้ Git Tag เป็น Version ของ Code ใน Docker Image
[Docker] How to Use Git Tag as Version of Code in Docker Image

ในกรณีที่เราต้องการใช้ GIT Tag เพื่อแสดงเป็น Version บนหน้าเว็บ มีวิธีทำดังนี้

ขั้นแรก แก้ไข Dockerfile โดยเพิ่มบรรทัดตามด้านล่างนี้
ARG GIT_TAG=12345
ARG MAIN_FILE
RUN sed -i -e "s/version:\"0\.0\.0\"/version:\"${GIT_TAG}\"/" public/$MAIN_FILE
  • บรรทัดแรก เป็นการประกาศว่า เราจะรับตัวแปรชื่อ GIT_TAG ที่จะถูกส่งเข้ามาทาง build argument ตอนสั่ง docker build ซึ่งถ้าไม่มีค่าอะไรส่งเข้ามาเลย ให้ตั้งค่าตั้งต้นเป็น 12345
  • บรรทัดที่สอง เป็นการประกาศว่า เราจะรับตัวแปรชื่อ MAIN_FILE ที่จะถูกส่งเข้ามาทาง build argument
  • บรรทัดที่สุดท้าย เป็นการรันคำสั่งเพื่อ replace ค่า 0.0.0 ในไฟล์ MAIN_FILE ด้วยค่าของ GIT_TAG

[Bash Script] วิธีการประกาศและใช้ตัวแปรใน Bash Script
[Bash Script] How to Declare and Use Variable in Bash Script

สำหรับการประกาศตัวแปรพร้อม assign ค่า ให้ใช้รูปแบบดังนี้
VARIABLE_NAME=VALUE
หมายเหตุ: ไม่มีช่องว่างข้างหน้าและข้างหลังเครื่องหมายเท่ากับ (=)

สำหรับการเรียกใช้ค่าตัวแปร ให้ใช้รูปแบบดังนี้
echo $VARIABLE_NAME;
หมายเหตุ: มี $ นำหน้าชื่อตัวแปร

สำหรับการ assign ค่าที่ได้จากการรันคำสั่งอื่นๆ ให้ใช้รูปแบบดังนี้
VARIABLE_NAME=$(COMMAND)
หมายเหตุ:  คำสั่งที่รันอยู่ภายใน $(...) ตัวอย่างเช่น
VERSION=1.0.0
MAIN_FILE=$(grep -o 'main.[0-9a-z]*.js' public/index.html)
sed -i -e "s/version:\"0\.0\.0\"/version:\"$VERSION\"/" public/$MAIN_FILE

Monday, June 24, 2019

[Docker] วิธีการส่งผ่านค่า Build Argument และตั้งค่าเป็น Environment Variable
[Docker] How to Pass Build Argument and Set as Environment Variable

สมมติว่า var_name เป็น argument ที่เราต้องการส่งเข้าไป เพื่อตั้งค่าเป็น Environment Variable

ใน Dockerfile ให้เพิ่มบรรทัดดังนี้
ARG var_name
ENV env_var_name=$var_name
บรรทัดแรกเป็นการรับค่า var_name ที่เป็น build argument
บรรทัดที่ 2 เป็นการตั้งค่า Environment Variable โดยให้ชื่อว่า env_var_name และมีค่าตาม var_name

หลังจากแก้ไข Dockerfile แล้ว เรามีวิธีการส่งค่า build argument หลายแบบดังนี้

แบบที่ 1 ส่งชื่อตัวแปรพร้อมค่าของตัวแปรที่เรากำหนดเอง
docker build --build-arg var_name=VALUE [--build-arg var_name2=VALUE2 ...] (...)

แบบที่ 2 ส่งชื่อตัวแปรพร้อมค่าของตัวแปรจาก environment variable ปัจจุบัน
docker build --build-arg var_name=${VARIABLE_NAME} (...)
โดยที่ VARIABLE_NAME เป็นชื่อของ environment variable

แบบที่ 3 ส่งชื่อตัวแปรที่เป็นชื่อเดียวกันกับ environment variable ซึ่งค่าของตัวแปรนี้จะถูกตั้งตามค่า environment variable ที่ชื่อเดียวกันโดยอัตโนมัติ
docker build --build-arg var_name (...)

[Bash Script] วิธีการหาส่วนของข้อความที่อยู่ภายในไฟล์ข้อความ โดยใช้ Regular Expression
[Bash Script] How to Find Substring within Text File by Using Regular Expression

คุณสามารถใช้คำสั่ง grep ตามด้านล่างนี้
grep -o 'Regex pattern' filename
ตัวอย่างเช่น
grep -o 'main.[0-9a-z]*.js' public/index.html
ในกรณีนี้ index.html เป็นไฟล์ที่ถูกสร้างโดย AngularJS และมีชื่อไฟล์ main.{hash}.js อยู่ภายในไฟล์

เราไม่สามารถรู้ค่า hash ของชื่อไฟล์นี้ได้ แต่เรารู้รูปแบบข้อความของชื่อไฟล์นี้

ดังนั้นเราสามารถใช้ Regular Expression ในการหาชื่อไฟล์นี้จาก index.js ได้

Thursday, June 13, 2019

[Laravel - Carbon] ข้อควรระวัง: การใช้ Carbon::today()->toDateString() เพื่อเปรียบเทียบกับ Date String
[Laravel - Carbon] Warning: Using Carbon::today()->toDateString() for Comparing with Date String

Carbon เป็น PHP API extension สำหรับ DateTime

Carbon::today() เป็นฟังก์ชั่นที่ใช้สร้าง Carbon object ที่มีวันที่เป็นวันปัจจุบัน อย่างไรก็ตามในส่วนของเวลาจะเป็น 00:00:00 

จากภาพด้านล่างเป็นผลลัพธ์การเปรียบเทียบระหว่าง Carbon::today() กับวันที่ในรูปแบบข้อความ โดยใช้การเปรียบเทียบข้อความปกติ


ดังนั้นถ้าต้องการเปรียบเทียบเพียงวันที่เท่านั้น ให้เปลี่ยนไปใช้ Carbon::today()->toDateString() แทน

ผลลัพธ์การเปรียบเทียบจะเป็นดังภาพด้านล่าง