ผู้สร้างเครื่องมือสำหรับนักพัฒนารับเชิญของเราที่ Pantheon พูดถึงวิธีทำให้ WordPress ใช้งานได้โดยอัตโนมัติโดยใช้ GitLab CI/CD
В
ฉันมักจะเห็นนักพัฒนาประสบปัญหากับเซิร์ฟเวอร์ staging เดียว
เป็นเรื่องน่ายินดีอย่างยิ่งที่ได้รอถึงคราวของคุณเพื่อใช้เซิร์ฟเวอร์ระดับกลางหรือส่ง URL ให้กับลูกค้าพร้อมข้อความว่า “ดูที่นี่ แต่อย่าเพิ่งดูที่นี่”
แต่ Pantheon ไม่มีเครื่องมือสำหรับการควบคุมเวอร์ชันหรือการบูรณาการและการปรับใช้อย่างต่อเนื่อง (CI/CD) แต่เป็นแพลตฟอร์มที่ยืดหยุ่นซึ่งคุณสามารถรวมเครื่องมือต่างๆ ได้
ฉันยังสังเกตเห็นว่าทีมต่างๆ ใช้เครื่องมือบางอย่างเพื่อการพัฒนา และเครื่องมือที่แตกต่างกันสำหรับการประกอบและการปรับใช้
ตัวอย่างเช่น มีเครื่องมือที่แตกต่างกันสำหรับการควบคุมเวอร์ชันและ CI/CD คุณต้องเล่นซอและสลับระหว่างเครื่องมือต่างๆ เพื่อแก้ไขโค้ดและวินิจฉัยปัญหา
На
ฉันชอบระบบอัตโนมัติ ดังนั้นฉันจึงได้เรียนรู้วิธีการเชื่อมต่อ Pantheon กับ GitLab เพื่อให้คอมมิตกับสาขาหลักบน GitLab ถูกนำไปใช้กับสภาพแวดล้อมการพัฒนาหลักใน Pantheon และคำขอรวมบน GitLab สามารถสร้างและปรับใช้โค้ดกับสภาพแวดล้อม multidev ใน Pantheon
ในบทช่วยสอนนี้ ฉันจะอธิบายวิธีตั้งค่าการเชื่อมต่อระหว่าง GitLab และ Pantheon และเพิ่มประสิทธิภาพเวิร์กโฟลว์ WordPress และ Drupal ของคุณ
แน่นอนว่าเป็นไปได้
การแนะนำ
สำหรับโพสต์นี้ คุณต้องเข้าใจว่า Pantheon แบ่งแต่ละไซต์ออกเป็นสามองค์ประกอบ: รหัส ฐานข้อมูล และไฟล์
โค้ดนี้ประกอบด้วยไฟล์ CMS เช่น WordPress core, ปลั๊กอิน และธีม ไฟล์เหล่านี้ได้รับการจัดการใน
ไฟล์ใน Pantheon คือไฟล์สื่อ กล่าวคือ รูปภาพสำหรับไซต์ โดยปกติแล้วผู้ใช้จะอัปโหลดและ Git จะเพิกเฉยต่อพวกเขา
สมมติฐาน
โครงการของฉันใน Pantheon และ GitLab มีชื่อว่า pantheon-gitlab-blog-demo
. ชื่อโปรเจ็กต์ต้องไม่ซ้ำกัน ที่นี่เราจะทำงานร่วมกับไซต์ WordPress คุณสามารถใช้ Drupal ได้ แต่คุณจะต้องเปลี่ยนแปลงบางสิ่ง
ฉันจะใช้
สร้างโครงการ
ก่อนอื่นมาสร้างกันก่อน
ขณะนี้
หากมือของคุณอยากเปลี่ยนแปลงบางสิ่ง เช่น ลบหรือเพิ่มปลั๊กอิน ให้อดทน ไซต์ยังไม่ได้เชื่อมต่อกับ GitLab และเราต้องการให้การเปลี่ยนแปลงโค้ดทั้งหมดผ่าน GitLab
เมื่อเราติดตั้ง WordPress แล้ว ให้กลับไปที่แดชบอร์ดเว็บไซต์ Pantheon และเปลี่ยนโหมดการพัฒนาเป็น Git
ความมุ่งมั่นเริ่มต้นบน GitLab
ตอนนี้คุณต้องถ่ายโอนโค้ด WordPress เริ่มต้นจากไซต์ Pantheon ไปยัง GitLab ในการดำเนินการนี้ เราโคลนโค้ดจากที่เก็บ Git ของไซต์ Pantheon ในเครื่อง จากนั้นจึงส่งไปยังที่เก็บ GitLab
เพื่อให้ง่ายและปลอดภัยยิ่งขึ้น
ในการดำเนินการนี้ ให้โคลนเว็บไซต์ Pantheon ในเครื่องโดยคัดลอกคำสั่งจากช่อง Clone with Git บนแดชบอร์ดของเว็บไซต์
หากคุณต้องการความช่วยเหลือ โปรดอ่านเอกสารประกอบ
ตอนนี้เรามาเปลี่ยนกัน git remote origin
เพื่อชี้ไปที่ GitLab แทน Pantheon ก็สามารถทำได้ командой git remote
ไปที่โปรเจ็กต์ GitLab และคัดลอก URL ของที่เก็บจากดรอปดาวน์ Clone ในหน้ารายละเอียดโปรเจ็กต์ มาเลือกตัวเลือก Clone with SSH กัน เนื่องจากเราได้กำหนดค่าคีย์ SSH แล้ว
Поумолчанию git remote
สำหรับสำเนาที่เก็บโค้ดในเครื่อง - origin
. สิ่งนี้สามารถเปลี่ยนแปลงได้ค git remote set-url origin [URL репозитория GitLab]
โดยที่เราใส่ URL จริงแทนวงเล็บ
ในที่สุดเราก็เปิดตัว git push origin master --force
เพื่อส่งโค้ด WordPress จาก Pantheon ไปยัง GitLab
ตัวเลือก –force จำเป็นเพียงครั้งเดียวเท่านั้น แล้วในทีม
git push
มันจะไม่มีบน GitLab
การตั้งค่าข้อมูลรับรองและตัวแปร
จำได้ไหมว่าเราเพิ่มคีย์ SSH ในเครื่องเพื่อเข้าสู่ระบบ Pantheon และ GitLab ได้อย่างไร โทเค็น SSH สามารถใช้เพื่ออนุญาต GitLab และ Pantheon
GitLab มีเอกสารที่ยอดเยี่ยม มาดูกัน
ตอนนี้เราจะดำเนินการสองขั้นตอนแรกให้เสร็จสิ้น: มาสร้างคู่คีย์ SSH ใหม่ภายในเครื่องด้วย ssh-keygen และเพิ่มคีย์ส่วนตัวเป็นตัวแปรให้กับโปรเจ็กต์.
แล้วเราจะถาม SSH_PRIVATE_KEY
ในขณะที่
ในขั้นตอนที่สามและสี่ เราจะสร้างไฟล์ .gitlab-ci.yml
โดยมีเนื้อหาดังนี้
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
อย่าเพิ่งคอมมิตไฟล์ .gitlab-ci.yml
จากนั้นคุณจะต้องเพิ่มอย่างอื่นลงไป
ตอนนี้เราทำขั้นตอนที่ห้าและ เพิ่มรหัสสาธารณะที่คุณสร้างในขั้นตอนแรกให้กับบริการที่คุณต้องการเข้าถึงในสภาพแวดล้อมการสร้าง.
ในกรณีของเรา เราต้องการเข้าถึง Pantheon จาก GitLab เราปฏิบัติตามคำแนะนำในเอกสาร Pantheon เมื่อ
ข้อควรจำ: SSH ส่วนตัวอยู่ใน GitLab, SSH แบบเปิดอยู่ใน Pantheon
มาตั้งค่าตัวแปรสภาพแวดล้อมอีกสองสามตัวกัน อันแรกเรียกว่า PANTHEON_SITE ค่าของมันคือชื่อของไซต์ Pantheon บนเครื่องของคุณ
ชื่อบนเครื่องจะแสดงอยู่ที่ส่วนท้ายของคำสั่ง Clone with Git คุณได้โคลนไซต์ในเครื่องแล้ว ดังนั้นนี่จะเป็นชื่อของไดเร็กทอรีที่เก็บในเครื่อง
ต่อไป มาตั้งค่าตัวแปรสภาพแวดล้อมกัน PANTHEON_GIT_URL
. นี่คือ URL ที่เก็บ Git สำหรับไซต์ Pantheon ที่เราใช้อยู่แล้ว
ป้อนเฉพาะ URL ที่เก็บ SSH โดยไม่ต้องใส่
git clone
และชื่อไซต์บนเครื่องตอนท้าย
วุ้ย. เสร็จแล้ว ตอนนี้เราสามารถทำไฟล์ของเราให้เสร็จได้แล้ว .gitlab-ci.yml
.
สร้างงานการปรับใช้
สิ่งที่เราจะทำใน GitLab CI ในตอนแรกนั้นคล้ายคลึงกับสิ่งที่เราทำกับที่เก็บ Git ในอดีตมาก แต่คราวนี้ เราจะเพิ่มพื้นที่เก็บข้อมูล Pantheon เป็นแหล่ง Git ระยะไกลแหล่งที่สอง จากนั้นจึงพุชโค้ดจาก GitLab ไปยัง Pantheon
ในการดำเนินการนี้ มากำหนดค่ากัน deploy
и deploy:dev
เพราะเราจะปรับใช้กับสภาพแวดล้อมการพัฒนาบน Pantheon ไฟล์ผลลัพธ์ .gitlab-ci.yml
มันจะมีลักษณะเช่นนี้
stages:
- deploy
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- master
ตัวแปร SSH_PRIVATE_KEY, PANTHEON_SITE
и PANTHEON_GIT_URL
ควรดูคุ้นเคย - เราตั้งค่าตัวแปรสภาพแวดล้อมเหล่านี้ไว้ก่อนหน้านี้ ด้วยตัวแปรเหล่านี้เราจะสามารถใช้ค่าในไฟล์ได้ .gitlab-ci.yml
หลายครั้งและจะต้องอัปเดตในที่เดียวเท่านั้น
สุดท้าย เพิ่ม คอมมิต และส่งไฟล์ .gitlab-ci.yml
บน GitLab
การตรวจสอบการใช้งาน
ถ้าเราทำทุกอย่างถูกต้องงานนั้น deploy:dev
จะทำงานสำเร็จใน GitLab CI/CD และส่งคอมมิต .gitlab-ci.yml
ที่วิหารแพนธีออน มาดูกันดีกว่า
กำลังส่งเธรดคำขอรวมไปยัง Pantheon
ที่นี่เราจะใช้คุณสมบัติ Pantheon ที่ฉันชื่นชอบ -
ก่อนอื่นเรามาสร้างสาขา Git ใหม่โดยใช้ในเครื่องกันก่อน git checkout -b multidev-support
. ตอนนี้เรามาเปลี่ยนบางสิ่งบางอย่างอีกครั้งใน .gitlab-ci.yml
.
ฉันต้องการรวมหมายเลขคำขอรวมไว้ในชื่อสภาพแวดล้อมของ Pantheon ตัวอย่างเช่น คำขอรวมครั้งแรกคือ mr-1
, ที่สอง - mr-2
ฯลฯ
คำขอรวมมีการเปลี่ยนแปลง ดังนั้นเราจึงจำเป็นต้องกำหนดชื่อสาขา Pantheon แบบไดนามิก เป็นเรื่องง่ายบน GitLab คุณเพียงแค่ต้องใช้
เรารับได้ $CI_MERGE_REQUEST_IID
เพื่อระบุหมายเลขคำขอรวม ลองใช้ทั้งหมดนี้ร่วมกับตัวแปรสภาพแวดล้อมส่วนกลางที่เราระบุไว้ก่อนหน้านี้ และเพิ่มงานการปรับใช้: multidev ใหม่ที่ด้านล่างของไฟล์ .gitlab-ci.yml
.
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Checkout the merge request source branch
- git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon git repository as an additional remote
- git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
only:
- merge_requests
มันจะคล้ายกับงานของเรา deploy:dev
มีเพียงสาขาเท่านั้นที่ถูกส่งไปยัง Pantheon ไม่ใช่ไป master
.
เราได้เพิ่มและคอมมิตไฟล์ที่อัปเดตแล้ว .gitlab-ci.yml
และตอนนี้เรามาผลักดันสาขาใหม่ไปที่ GitLab ด้วย git push -u origin multidev-support
.
ตอนนี้เรามาสร้างคำขอรวมใหม่จากสาขากัน multidev-support
โดยกด สร้างคำขอรวม.
เมื่อสร้างคำขอรวมแล้ว เราจะดูว่างาน CI/CD ดำเนินการอย่างไร deploy:multidev
.
ดูสิ มีการส่งกระทู้ใหม่ไปที่ Pantheon แล้ว แต่ถ้าเราไปที่ส่วน multidev บนแดชบอร์ดของไซต์ Pantheon เราจะไม่เห็นสภาพแวดล้อมใหม่ที่นั่น
มาดูในส่วนของ Git Branches กันดีกว่า
ส่งผลให้กระทู้ของเรา mr-1
ไปถึงแพนธีออนแล้ว มาสร้างสภาพแวดล้อมจากสาขากันเถอะ mr-1
.
เราได้สร้างสภาพแวดล้อมแบบ multidev แล้ว ตอนนี้กลับไปที่ GitLab และดูที่ส่วนนี้กัน การดำเนินงาน > สภาพแวดล้อม. เราจะเห็นรายการสำหรับ dev
и mr-1
.
นี่เป็นเพราะเราได้เพิ่มรายการ environment
ด้วยชื่อ name
и url
ในงาน CI/CD หากเราคลิกที่ไอคอนสภาพแวดล้อมแบบเปิด เราจะไปที่ URL ของสภาพแวดล้อมแบบ multidev บน Pantheon
สร้าง multidev โดยอัตโนมัติ
โดยหลักการแล้ว คุณสามารถหยุดที่นี่และอย่าลืมสร้างสภาพแวดล้อมแบบ multidev สำหรับคำขอรวมแต่ละรายการ แต่กระบวนการนี้สามารถดำเนินการได้โดยอัตโนมัติ
Pantheon มีเครื่องมือบรรทัดคำสั่ง
เราจำเป็นต้องมีคำขอรวมใหม่เพื่อทดสอบสิ่งนี้ มาสร้างสาขาใหม่โดยใช้ git checkout -b auto-multidev-creation
.
หากต้องการใช้ Terminus ในงาน GitLab CI/CD คุณต้องมีโทเค็นเครื่องสำหรับการตรวจสอบสิทธิ์ด้วย Terminus และคอนเทนเนอร์อิมเมจด้วย Terminus
PANTHEON_MACHINE_TOKEN
.
หากคุณลืมวิธีเพิ่มตัวแปรสภาพแวดล้อม GitLab ให้กลับไปที่ที่เรากำหนดไว้
PANTHEON_SITE
.
การสร้าง Dockerfile ด้วย Terminus
หากคุณไม่ได้ใช้ Docker หรือไม่ชอบไฟล์ Dockerfile
, ถ่ายรูปของฉัน registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
และข้ามส่วนนี้ไป
Terminus เป็นเครื่องมือบรรทัดคำสั่ง PHP ดังนั้นเรามาเริ่มกันที่อิมเมจ PHP กันก่อน ฉันกำลังติดตั้ง Terminus ผ่าน Composer ดังนั้นฉันจะใช้ Dockerfile
ในไดเร็กทอรีที่เก็บโลคัลซึ่งมีเนื้อหาดังต่อไปนี้:
# Use the official Composer image as a parent image
FROM composer:1.8
# Update/upgrade apk
RUN apk update
RUN apk upgrade
# Make the Terminus directory
RUN mkdir -p /usr/local/share/terminus
# Install Terminus 2.x with Composer
RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"
ทำตามคำแนะนำในการประกอบและส่งภาพจากส่วนนี้ สร้างและผลักดันภาพ в Dockerfile
แล้วดันไปที่ GitLab
กำลังเปิดส่วน รีจิสทรี ในโครงการ GitLab หากทุกอย่างเป็นไปตามแผนภาพลักษณ์ของเราก็จะอยู่ที่นั่น เขียนลิงก์ไปยังแท็กรูปภาพ - เราต้องการลิงก์สำหรับไฟล์ .gitlab-ci.yml
.
ส่วน script
ในปัญหา deploy:multidev
เริ่มที่จะขยายใหญ่ขึ้นแล้ว เรามาย้ายมันไปยังไฟล์อื่นกันดีกว่า สร้างไฟล์ใหม่ private/multidev-deploy.sh:
#!/bin/bash
# Store the mr- environment name
export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID
# Authenticate with Terminus
terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN
# Checkout the merge request source branch
git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon Git repository as an additional remote
git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force
# Create a function for determining if a multidev exists
TERMINUS_DOES_MULTIDEV_EXIST()
{
# Stash a list of Pantheon multidev environments
PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)"
while read -r multiDev; do
if [[ "${multiDev}" == "$1" ]]
then
return 0;
fi
done <<< "$PANTHEON_MULTIDEV_LIST"
return 1;
}
# If the mutltidev doesn't exist
if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV
then
# Create it with Terminus
echo "No multidev for $PANTHEON_ENV found, creating one..."
terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV
else
echo "The multidev $PANTHEON_ENV already exists, skipping creating it..."
fi
สคริปต์อยู่ในไดเร็กทอรีส่วนตัวและ deploy:multidev
ไฟล์ .gitlab-ci.yml
มันจึงกลายเป็นเช่นนี้:
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requests
เราจำเป็นต้องตรวจสอบให้แน่ใจว่างานของเราได้รับการดำเนินการในอิมเมจแบบกำหนดเองที่สร้างขึ้น ดังนั้นเรามาเพิ่มคำจำกัดความกัน image
จาก URL รีจิสทรีไปที่ .gitlab-ci.yml
. ผลลัพธ์ที่ได้คือไฟล์แบบนี้ .gitlab-ci.yml
:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- master
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requests
เพิ่ม กระทำ และส่ง private/multidev-deploy.sh
и .gitlab-ci.yml
. ตอนนี้เรากลับไปที่ GitLab และรอให้งาน CI/CD เสร็จสิ้น อดทนรอ: multidev อาจใช้เวลาหลายนาทีในการสร้าง
จากนั้นเราไปดูรายการ multidev บน Pantheon โอ้ ปาฏิหาริย์! สภาพแวดล้อมแบบ Multidev mr-2
ที่นี่แล้ว
ข้อสรุป
ทีมของฉันสนุกสนานมากขึ้นเมื่อเราเริ่มเปิดคำขอรวมและสร้างสภาพแวดล้อมโดยอัตโนมัติ
ด้วยเครื่องมืออันทรงพลังของ GitLab และ Pantheon คุณสามารถเชื่อมต่อ GitLab กับ Pantheon ได้โดยอัตโนมัติ
เนื่องจากเราใช้ GitLab CI/CD เวิร์กโฟลว์ของเราจึงมีพื้นที่ให้เติบโต ต่อไปนี้เป็นแนวคิดสองสามข้อในการเริ่มต้น:
- เพิ่มขั้นตอนการสร้าง
- เพิ่มการทดสอบอัตโนมัติ
- เพิ่มงานเพื่อให้แน่ใจว่าเป็นไปตามมาตรฐานโค้ด
- เพิ่ม
การทดสอบความปลอดภัยของแอปพลิเคชันแบบไดนามิก .
แจ้งให้เราทราบว่าคุณคิดอย่างไรเกี่ยวกับ GitLab, Pantheon และระบบอัตโนมัติ
ป.ล. คุณรู้หรือไม่ว่า Terminus เครื่องมือบรรทัดคำสั่งของ Pantheon
พวกเราที่ Pantheon ทำงานได้ดีกับเวอร์ชัน 2 ของเรา build:project:create
คุณต้องการเพียงโทเค็น Pantheon และโทเค็น GitLab เธอจะปรับใช้หนึ่งในโปรเจ็กต์ตัวอย่างด้วย Composer และการทดสอบอัตโนมัติ สร้างโปรเจ็กต์ใหม่ใน GitLab ซึ่งเป็นไซต์ Pantheon ใหม่ และเชื่อมต่อโปรเจ็กต์เหล่านั้นโดยใช้ตัวแปรสภาพแวดล้อมและคีย์ SSH
เกี่ยวกับผู้แต่ง
Andrew Taylor สร้างเครื่องมือสำหรับนักพัฒนาใน
ที่มา: will.com