ProHoster > Blog > Pentadbiran > Cara Menyambung GitLab dan Pantheon serta Mengoptimumkan Aliran Kerja Drupal dan WordPress
Cara Menyambung GitLab dan Pantheon serta Mengoptimumkan Aliran Kerja Drupal dan WordPress
Pencipta alat pembangun tetamu kami di Pantheon bercakap tentang cara mengautomasikan penggunaan WordPress menggunakan GitLab CI/CD.
Π Pantheon Saya bekerja dalam perhubungan pembangun, jadi saya sentiasa mencari cara baharu untuk membantu pembangun WordPress dan Drupal menyelesaikan masalah automasi dalam aliran kerja mereka. Untuk melakukan ini, saya suka bereksperimen dengan alatan baharu dan menggabungkannya antara satu sama lain untuk berfungsi dengan berkesan.
Saya sering melihat pembangun bergelut dengan pelayan pementasan tunggal.
Senang rasanya menunggu giliran anda menggunakan pelayan perantaraan atau menghantar URL kepada pelanggan dengan nota: "Lihat di sini, tetapi jangan lihat di sini lagi."
Persekitaran Multidev - salah satu alat Pantheon yang hebat - menyelesaikan masalah ini, kerana dengannya anda boleh mencipta persekitaran untuk cawangan Git atas permintaan. Setiap persekitaran multidev mempunyai URL dan pangkalan data sendiri, jadi pembangun boleh bekerja dengan senyap, menyemak kualiti dan mendapatkan kelulusan tanpa memijak satu sama lain.
Tetapi Pantheon tidak mempunyai alat untuk kawalan versi atau penyepaduan dan penggunaan berterusan (CI/CD). Tetapi ia adalah platform yang fleksibel yang mana anda boleh mengintegrasikan sebarang alat.
Saya juga mendapati bahawa pasukan menggunakan alat tertentu untuk pembangunan, dan yang berbeza untuk pemasangan dan penggunaan.
Sebagai contoh, mereka mempunyai alat yang berbeza untuk kawalan versi dan CI/CD. Anda perlu bermain-main dan bertukar antara alatan untuk mengedit kod dan mendiagnosis masalah.
Pada GitLab terdapat set lengkap alatan pembangunan: untuk kawalan versi, tiket, permintaan gabungan, saluran paip CI/CD terbaik dalam kelasnya, pendaftaran kontena dan segala-galanya seperti itu. Saya masih belum menemui aplikasi yang menawarkan begitu banyak untuk mengurus aliran kerja pembangunan anda.
Saya suka automasi, jadi saya belajar cara menyambungkan Pantheon ke GitLab supaya komitmen kepada cawangan utama di GitLab digunakan ke persekitaran pembangunan utama di Pantheon. Dan permintaan gabungan pada GitLab boleh mencipta dan menggunakan kod ke persekitaran multidev dalam Pantheon.
Dalam tutorial ini, saya akan membimbing anda melalui cara menyediakan sambungan antara GitLab dan Pantheon serta mengoptimumkan aliran kerja WordPress dan Drupal anda.
Sudah tentu boleh, cermin repositori GitLab, tetapi kami akan melakukan segala-galanya dengan tangan kami untuk menyelidikinya GitLab CI dan pada masa hadapan gunakan alat ini bukan sahaja untuk penggunaan.
Pengenalan
Untuk siaran ini, anda perlu memahami bahawa Pantheon memecahkan setiap tapak kepada tiga elemen: kod, pangkalan data dan fail.
Kod tersebut termasuk fail CMS seperti teras WordPress, pemalam dan tema. Fail ini diuruskan dalam Repositori Git, dihoskan oleh Pantheon, bermakna kita boleh menggunakan kod daripada GitLab ke Pantheon dengan Git.
Fail dalam Pantheon ialah fail media, iaitu imej untuk tapak. Biasanya mereka dimuat naik oleh pengguna dan Git mengabaikannya.
Projek saya di Pantheon dan GitLab dipanggil pantheon-gitlab-blog-demo. Nama projek mestilah unik. Di sini kami akan bekerja dengan tapak WordPress. Anda boleh mengambil Drupal, tetapi anda perlu mengubah beberapa perkara.
Jika tangan anda gatal untuk menukar sesuatu, contohnya, alih keluar atau tambah pemalam, bersabarlah. Tapak ini belum disambungkan ke GitLab, dan kami mahu semua perubahan kod melalui GitLab.
Setelah kami memasang WordPress, kembali ke papan pemuka laman web Pantheon dan tukar mod pembangunan kepada Git.
Komit awal pada GitLab
Kini anda perlu memindahkan kod WordPress awal dari tapak Pantheon ke GitLab. Untuk melakukan ini, kami mengklonkan kod daripada repositori Git tapak Pantheon secara tempatan, dan kemudian menghantarnya ke repositori GitLab.
Sekarang mari kita berubah git remote originuntuk menunjuk ke GitLab dan bukannya Pantheon. Ia boleh dilakukan ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git remote.
Mari pergi ke projek GitLab dan salin URL repositori daripada lungsur turun Klon pada halaman butiran projek. Mari pilih pilihan Klon dengan SSH, kerana kami telah mengkonfigurasi kunci SSH.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ git remote untuk salinan tempatan repositori kod - origin. Ini boleh diubah c git remote set-url origin [URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ GitLab], di mana bukannya kurungan kita masukkan URL sebenar.
Akhirnya, kami melancarkan git push origin master --forceuntuk menolak kod WordPress dari Pantheon ke GitLab.
Pilihan βforce hanya diperlukan sekali sahaja. Kemudian dalam pasukan git push ia tidak akan berada di GitLab.
Menyediakan bukti kelayakan dan pembolehubah
Ingat bagaimana kami menambah kunci SSH secara tempatan untuk log masuk ke Pantheon dan GitLab? Token SSH boleh digunakan untuk membenarkan GitLab dan Pantheon.
Kami kini akan melengkapkan dua langkah pertama: Mari buat pasangan kunci SSH baharu secara tempatan dengan ssh-keygen dan tambah kunci persendirian sebagai pembolehubah kepada projek.
Kemudian kami akan bertanya SSH_PRIVATE_KEY sebagai Pembolehubah persekitaran CI/CD GitLab dalam tetapan projek.
Dalam langkah ketiga dan keempat kami akan membuat fail .gitlab-ci.yml dengan kandungan seperti ini:
Mari kita tidak memasukkan fail lagi .gitlab-ci.yml, maka anda perlu menambah sesuatu yang lain padanya.
Sekarang kita melakukan langkah kelima dan tambahkan kunci awam yang anda buat dalam langkah pertama kepada perkhidmatan yang anda perlukan akses dalam persekitaran binaan.
Dalam kes kami, kami mahu mengakses Pantheon daripada GitLab. Kami mengikut arahan dalam dokumen Pantheon pada menambahkan kunci SSH pada Pantheon dan lakukan langkah ini.
Ingat: SSH peribadi berada dalam GitLab, SSH terbuka berada dalam Pantheon.
Mari kita sediakan beberapa lagi pembolehubah persekitaran. Yang pertama dipanggil PANTHEON_SITE. Nilainya ialah nama tapak Pantheon pada mesin anda.
Nama pada mesin disenaraikan di hujung Klon dengan arahan Git. Anda telah mengklon tapak secara tempatan, jadi ini akan menjadi nama direktori repositori tempatan.
Seterusnya, mari kita sediakan pembolehubah persekitaran PANTHEON_GIT_URL. Ini ialah URL repositori Git untuk tapak Pantheon yang telah kami gunakan.
Masukkan hanya URL repositori SSH, tanpa git clone dan nama tapak pada mesin di hujungnya.
Fuh. Itu sudah selesai, sekarang kita boleh menyelesaikan fail kita .gitlab-ci.yml.
Buat tugas penempatan
Perkara yang akan kami lakukan pada mulanya dengan GitLab CI adalah sangat serupa dengan apa yang kami lakukan dengan repositori Git pada masa lalu. Tetapi kali ini, mari tambah repositori Pantheon sebagai sumber Git jauh kedua, dan kemudian tolak kod dari GitLab ke Pantheon.
Untuk melakukan ini, mari konfigurasikan peringkatdeploy ΠΈ tugasdeploy:dev, kerana kami akan menggunakan persekitaran pembangunan di Pantheon. Fail yang terhasil .gitlab-ci.yml akan kelihatan seperti ini:
Pembolehubah SSH_PRIVATE_KEY, PANTHEON_SITE ΠΈ PANTHEON_GIT_URL sepatutnya kelihatan biasa - kami menyediakan pembolehubah persekitaran ini lebih awal. Dengan pembolehubah ini kita akan dapat menggunakan nilai dalam fail .gitlab-ci.yml banyak kali, dan mereka hanya perlu dikemas kini di satu tempat.
Akhir sekali, tambah, komit dan hantar fail .gitlab-ci.yml pada GitLab.
Menyemak penempatan
Jika kita melakukan semuanya dengan betul, tugas itu deploy:dev akan berjalan dengan jayanya dalam GitLab CI/CD dan menyerahkan komit .gitlab-ci.yml di Pantheon. Jom tengok.
Menghantar benang permintaan gabungan kepada Pantheon
Di sini kita akan menggunakan ciri Pantheon kegemaran saya β multidev, di mana anda boleh mencipta persekitaran Pantheon tambahan untuk cawangan Git atas permintaan.
Akses kepada multidev adalah terhad, jadi bahagian ini boleh dilangkau. Tetapi jika anda mempunyai akses, anda boleh meningkatkan produktiviti secara serius dengan menyediakan penciptaan automatik persekitaran multidev pada Pantheon daripada permintaan gabungan GitLab.
Mula-mula mari buat cawangan Git baharu secara tempatan menggunakan git checkout -b multidev-support. Sekarang mari kita ubah sesuatu lagi .gitlab-ci.yml.
Saya suka memasukkan nombor permintaan gabungan dalam nama persekitaran Pantheon. Sebagai contoh, permintaan gabungan pertama ialah mr-1, kedua - mr-2 dan lain-lain.
Permintaan gabungan berubah, jadi kita perlu menentukan nama cawangan Pantheon secara dinamik. Ia mudah di GitLab - anda hanya perlu menggunakan pembolehubah persekitaran yang telah ditetapkan.
Kita boleh ambil $CI_MERGE_REQUEST_IIDuntuk menentukan nombor permintaan gabungan. Mari gunakan semua ini bersama-sama dengan pembolehubah persekitaran global yang kami tentukan sebelum ini dan tambahkan tugasan deploy:multidev baharu pada penghujung fail .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
Ia akan sama dengan tugas kita deploy:dev, hanya cawangan dihantar ke Pantheon, bukan ke master.
Kami telah menambah dan melaksanakan fail yang dikemas kini .gitlab-ci.yml, dan sekarang mari kita tolak cawangan baharu ke GitLab dengan git push -u origin multidev-support.
Sekarang mari kita buat permintaan gabungan baharu daripada cawangan multidev-supportdengan menekan Buat permintaan gabungan.
Setelah membuat permintaan gabungan, kami melihat bagaimana tugas CI/CD dilaksanakan deploy:multidev.
Lihat, urutan baharu telah dihantar ke Pantheon. Tetapi jika kita pergi ke bahagian multidev pada papan pemuka tapak Pantheon, kita tidak akan melihat persekitaran baharu di sana
Mari lihat bahagian Cawangan Git.
Akibatnya, benang kami mr-1 sampai ke Pantheon. Mari kita cipta persekitaran daripada cawangan mr-1.
Kami telah mencipta persekitaran multidev, sekarang mari kita kembali ke GitLab dan lihat bahagian tersebut Operasi > Persekitaran. Kita akan lihat penyertaan untuk dev ΠΈ mr-1.
Ini kerana kami menambah entri environment Dengan nama name ΠΈ url ke dalam tugasan CI/CD. Jika kami mengklik pada ikon persekitaran terbuka, kami akan dibawa ke URL persekitaran multidev di Pantheon.
Automatikkan penciptaan multidev
Pada dasarnya, anda boleh berhenti di sini dan hanya ingat untuk mencipta persekitaran multidev untuk setiap permintaan gabungan, tetapi proses ini boleh diautomasikan.
Pantheon mempunyai alat baris arahan Terminus, di mana anda boleh bekerja dengan platform secara automatik. Terminus membolehkan anda mencipta persekitaran multidev daripada baris arahan - sesuai untuk GitLab CI.
Kami memerlukan permintaan gabungan baharu untuk menguji ini. Mari buat cawangan baharu menggunakan git checkout -b auto-multidev-creation.
Untuk menggunakan Terminus dalam tugas CI/CD GitLab, anda memerlukan token mesin untuk pengesahan dengan Terminus dan imej bekas dengan Terminus.
Mencipta Token Mesin Pantheon, simpannya di tempat yang selamat dan tambahkannya sebagai pembolehubah persekitaran global dalam GitLab dengan nama PANTHEON_MACHINE_TOKEN.
Jika anda terlupa cara menambah pembolehubah persekitaran GitLab, kembali ke tempat yang kami takrifkan PANTHEON_SITE.
Mencipta Dockerfile dengan Terminus
Jika anda tidak menggunakan Docker atau tidak menyukai fail Dockerfile, ambil gambar saya registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest dan langkau bahagian ini.
GitLab mempunyai pendaftaran kontena, di mana kami boleh membina dan meletakkan Dockerfile untuk projek kami. Mari cipta fail Docker dengan Terminus untuk berfungsi dengan Pantheon.
Terminus ialah alat baris arahan PHP, jadi mari kita mulakan dengan imej PHP. Saya sedang memasang Terminus melalui Composer, jadi saya akan gunakan imej rasmi Docker Composer. Kami cipta Dockerfile dalam direktori repositori tempatan dengan kandungan berikut:
# 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"
Ikut arahan untuk memasang dan menghantar imej dari bahagian Bina dan tolak imej Π² dokumentasi pendaftaran kontenauntuk mengumpul imej daripada Dockerfile dan tolaknya ke GitLab.
Buka bahagian pendaftaran dalam projek GitLab. Jika semuanya berjalan mengikut perancangan, imej kita akan berada di sana. Tulis pautan ke teg imej - kami memerlukannya untuk fail .gitlab-ci.yml.
Seksyen script dalam masalah deploy:multidev mula berkembang, jadi mari kita alihkannya ke fail yang berasingan. Buat fail baharu 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
Skrip berada dalam direktori peribadi dan tidak membenarkan akses web ke Pantheon. Kami mempunyai skrip untuk logik multidev kami. Sekarang mari kita mengemas kini bahagian deploy:multidev fail .gitlab-ci.ymlsehingga menjadi seperti ini:
Kita perlu memastikan bahawa tugas kita dilakukan dalam imej tersuai yang dibuat, jadi mari kita tambahkan definisi image daripada URL pendaftaran kepada .gitlab-ci.yml. Akibatnya, kami mendapat fail seperti ini .gitlab-ci.yml:
Tambah, komitmen dan hantar private/multidev-deploy.sh ΠΈ .gitlab-ci.yml. Sekarang kita kembali ke GitLab dan tunggu tugas CI/CD selesai. Bersabar: multidev boleh mengambil masa beberapa minit untuk dibuat.
Kemudian kita pergi melihat senarai multidev di Pantheon. Oh keajaiban! Persekitaran Multidev mr-2 sudah di sini.
Kesimpulan
Pasukan saya berasa lebih seronok apabila kami mula membuka permintaan gabungan dan mencipta persekitaran secara automatik.
Dengan alatan GitLab dan Pantheon yang berkuasa, anda boleh menyambungkan GitLab ke Pantheon secara automatik.
Memandangkan kami menggunakan GitLab CI/CD, aliran kerja kami akan mempunyai ruang untuk berkembang. Berikut ialah beberapa idea untuk anda bermula:
Tambah langkah binaan.
Tambah ujian automatik.
Tambahkan tugasan untuk memastikan piawaian kod dipenuhi.
Kami di Pantheon telah melakukan kerja yang baik pada versi 2 kami pemalam untuk alat binaan Terminus dengan sokongan GitLab. Jika anda tidak mahu mengganggu tetapan untuk setiap projek, cuba pemalam ini dan bantu kami menguji v2 beta. Untuk pasukan Terminus build:project:create Anda hanya memerlukan token Pantheon dan token GitLab. Dia akan menggunakan salah satu projek sampel dengan Komposer dan ujian automatik, mencipta projek baharu dalam GitLab, tapak Pantheon baharu dan menyambungkannya menggunakan pembolehubah persekitaran dan kunci SSH.
Mengenai pengarang
Andrew Taylor mencipta alatan untuk pembangun dalam Pantheon.