
Tamu kami, pembuat alat pengembang Pantheon, berbicara tentang cara mengotomatiskan penerapan WordPress menggunakan GitLab CI / CD.
Di Pantheon, saya berurusan dengan hubungan pengembang, jadi saya selalu mencari cara baru untuk membantu pengembang WordPress dan Drupal memecahkan masalah otomatisasi dalam alur kerja mereka. Untuk melakukan ini, saya suka bereksperimen dengan alat baru dan menggabungkannya satu sama lain untuk pekerjaan yang efektif.
Saya sering melihat pengembang tersiksa dengan satu server pengembangan.
Sangat-sangat menyenangkan - untuk menunggu giliran Anda menggunakan server atau mengirim URL kepada klien dengan catatan: "Lihat di sini, tapi jangan lihat di sini."
Lingkungan multidev - salah satu alat keren Pantheon - menyelesaikan masalah ini, karena dengan itu Anda dapat membuat lingkungan untuk cabang Git berdasarkan permintaan. Setiap lingkungan multidev memiliki URL dan basis datanya sendiri, sehingga pengembang bekerja dengan tenang, memeriksa kualitasnya dan mendapatkan persetujuan tanpa saling bertabrakan.
Tetapi Pantheon tidak memiliki alat untuk kontrol versi atau integrasi dan penyebaran berkelanjutan (CI / CD). Tapi ini adalah platform yang fleksibel untuk mengintegrasikan alat apa pun.
Saya juga memperhatikan bahwa untuk pengembangan tim mereka menggunakan satu alat, dan untuk perakitan dan penempatan - lainnya.
Misalnya, mereka memiliki alat yang berbeda untuk kontrol versi dan CI / CD. Anda harus main-main dan beralih di antara alat untuk mengedit kode dan mendiagnosis masalah.
GitLab memiliki seperangkat alat pengembangan lengkap: untuk kontrol versi, tiket, permintaan gabungan, pipa CI / CD terbaik di kelas, daftar kontainer dan semua hal lainnya. Saya belum menemukan aplikasi di mana akan ada begitu banyak untuk mengelola alur kerja pengembangan.
Saya suka otomatisasi, jadi saya belajar cara menghubungkan Pantheon ke GitLab sehingga berkomitmen untuk cabang utama di GitLab dikerahkan ke lingkungan pengembangan utama di Pantheon. Dan menggabungkan permintaan di GitLab dapat membuat dan menggunakan kode ke lingkungan multidev di Pantheon.
Dalam panduan ini, saya akan menunjukkan kepada Anda cara mengatur koneksi antara GitLab dan Pantheon dan mengoptimalkan alur kerja WordPress dan Drupal Anda.
Anda tentu saja dapat mencerminkan repositori GitLab , tetapi kami akan melakukan segalanya dengan pena untuk menggali GitLab CI dan menggunakan alat ini tidak hanya untuk penyebaran di masa depan.
Pendahuluan
Untuk posting ini Anda perlu memahami bahwa Pantheon memecah setiap situs menjadi tiga elemen: kode, basis data dan file.
Kode ini mencakup file CMS, seperti kernel, plugin, dan tema WordPress. File-file ini dikelola di repositori Git yang di - host oleh Pantheon, yaitu, kita dapat menggunakan kode dari GitLab ke Pantheon dengan Git.
File di Pantheon disebut file media, yaitu gambar untuk situs tersebut. Biasanya mereka diunduh oleh pengguna, dan Git mengabaikannya.
Buat akun gratis , pelajari lebih lanjut tentang alur kerja Pantheon, atau daftar untuk demo di pantheon.io.
Asumsi
Proyek saya di Pantheon dan GitLab disebut pantheon-gitlab-blog-demo
. Nama proyek harus unik. Di sini kita akan bekerja dengan situs WordPress. Anda dapat menggunakan Drupal, tetapi Anda harus mengubah sesuatu.
Saya akan menggunakan baris perintah Git , dan Anda dapat bekerja di GUI jika mau.
Buat proyek
Untuk memulai, buat proyek GitLab (kami akan kembali ke sana).
Sekarang buat situs WordPress di Pantheon . Kemudian instal WordPress untuk situs dasbor.
Jika tangan Anda gatal, ubah sesuatu, misalnya, lepaskan dan tambahkan plugin, bersabarlah. Situs ini belum terhubung ke GitLab, dan kami ingin semua perubahan kode melalui GitLab.
Ketika kami menginstal WordPress, kami kembali ke dasbor situs web Pantheon dan mengubah mode pengembangan ke Git.

Komit Awal GitLab
Sekarang Anda perlu mentransfer kode WordPress awal dari situs web Pantheon ke GitLab. Untuk melakukan ini, kami mengkloning kode dari repositori situs Git Pantheon secara lokal, dan kemudian mengirimkannya ke repositori GitLab.
Untuk membuatnya lebih sederhana dan lebih aman, kami akan menambahkan kunci SSH ke Pantheon dan kami tidak akan memasukkan kata sandi setiap kali kami mengkloning repositori Pantheon Git. Pada saat yang sama, kami akan menambahkan kunci SSH ke GitLab .
Untuk melakukan ini, kami mengkloning situs Pantheon secara lokal dengan menyalin perintah dari bidang Clone with Git di dasbor situs.

Jika Anda butuh bantuan, baca dokumentasi Git Getting Started untuk Pantheon .
Sekarang ganti git remote origin
untuk menunjuk ke GitLab bukan Pantheon. Ini bisa dilakukan git remote
.
Mari kita pergi ke proyek GitLab dan menyalin URL repositori dari daftar drop-down Clone di halaman detail proyek. Kami akan memilih opsi Klon dengan SSH, karena kami telah mengonfigurasi kunci SSH.

Secara default, git remote
untuk salinan lokal dari repositori kode adalah origin
. Ini dapat diubah dengan git remote set-url origin [URL GitLab]
, di mana kita tidak memasukkan tanda kurung, melainkan memasukkan URL yang sebenarnya.
Terakhir, jalankan git push origin master --force
untuk mengirimkan kode WordPress Anda dari Pantheon ke GitLab.
Opsi – Angkatan hanya diperlukan sekali. Maka dalam perintah git push
pada GitLab tidak akan.
Konfigurasikan kredensial dan variabel
Ingat bagaimana kami menambahkan kunci SSH secara lokal untuk masuk ke Pantheon dan GitLab? Token SSH dapat digunakan untuk mengotorisasi GitLab dan Pantheon.
GitLab memiliki beberapa dokumentasi yang bagus. Mari kita lihat bagian tentang kunci SSH ketika menggunakan pelaksana Docker dalam dokumen tentang menggunakan kunci SSH dengan GitLab CI / CD .
Sekarang kita akan menyelesaikan dua langkah pertama: membuat sepasang kunci SSH baru secara lokal dengan ssh-keygen dan menambahkan kunci pribadi sebagai variabel ke proyek .
Kemudian kita menetapkan SSH_PRIVATE_KEY
sebagai variabel lingkungan GitLab CI / CD dalam pengaturan proyek.
Pada langkah ketiga dan keempat, buat file .gitlab-ci.yml
dengan konten berikut:
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"
Sampai kita mengkomit file .gitlab-ci.yml
, maka sesuatu yang lain perlu ditambahkan padanya.
Sekarang kami melakukan langkah kelima dan menambahkan kunci publik yang kami buat di langkah pertama ke layanan yang Anda perlukan akses di lingkungan build .
Dalam kasus kami, kami ingin mendapatkan akses ke Pantheon dari GitLab. Ikuti instruksi dalam dokumen Pantheon untuk menambahkan kunci SSH ke Pantheon dan selesaikan langkah ini.
Ingat: tutup SSH di GitLab, buka di Pantheon.
Siapkan beberapa variabel lingkungan lagi. Yang pertama disebut PANTHEON_SITE. Artinya adalah nama situs Pantheon di mesin Anda.
Nama pada mesin ditunjukkan di akhir Klon dengan perintah Git. Anda telah mengkloning situs tersebut secara lokal, jadi ini akan menjadi nama direktori penyimpanan lokal.

Selanjutnya, siapkan PANTHEON_GIT_URL
lingkungan PANTHEON_GIT_URL
. Ini adalah URL repositori Git untuk situs Pantheon yang telah kami gunakan.
Kami hanya memasukkan URL repositori SSH, tanpa git clone
dan nama situs pada mesin di akhir.
Fuh. Ini selesai, sekarang kita bisa menyelesaikan .gitlab-ci.yml
.
Buat tugas penempatan
Apa yang awalnya akan kita lakukan dengan GitLab CI sangat mirip dengan apa yang kita lakukan dengan repositori Git sebelumnya. Tapi kali ini, tambahkan repositori Pantheon sebagai sumber Git jarak jauh kedua, dan kemudian kirim kode dari GitLab ke Pantheon.
Untuk melakukan ini, konfigurasikan tahap deploy
dan deploy:dev
tugas deploy:dev
, karena kami akan menyebarkan ke lingkungan pengembangan di Pantheon. Akibatnya, file .gitlab-ci.yml
akan terlihat seperti ini:
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
Variabel SSH_PRIVATE_KEY, PANTHEON_SITE
dan PANTHEON_GIT_URL
seharusnya terlihat familier - kami menyiapkan variabel lingkungan ini sebelumnya. Dengan variabel-variabel ini, kita dapat menggunakan nilai dalam file .gitlab-ci.yml
berkali-kali, dan kita hanya perlu memperbaruinya di satu tempat.
Terakhir, tambahkan, komit, dan .gitlab-ci.yml
ke GitLab.
Periksa Menyebarkan
Jika kami melakukan semuanya dengan benar, tugas deploy:dev
akan berhasil di GitLab CI / CD dan mengirimkan .gitlab-ci.yml
ke Pantheon. Ayo lihat.



Kami mengirim cabang permintaan penggabungan ke Pantheon
Di sini kita akan menggunakan fitur Pantheon favorit saya - multidev , di mana Anda dapat membuat lingkungan Pantheon tambahan untuk cabang Git berdasarkan permintaan.
Akses ke multidev terbatas , jadi bagian ini opsional . Tetapi jika Anda memiliki akses, Anda dapat secara serius meningkatkan produktivitas dengan menyiapkan pembuatan otomatis lingkungan multidev di Pantheon dari permintaan gabungan GitLab.
Pertama, buat cabang Git baru secara lokal menggunakan git checkout -b multidev-support
. Sekarang, sekali lagi, sesuatu akan berubah di .gitlab-ci.yml
.
Saya ingin menunjukkan nomor permintaan gabungan dalam nama lingkungan Pantheon. Misalnya, permintaan gabungan pertama adalah mr-1
, yang kedua adalah mr-2
, dll.
Permintaan penggabungan berubah, jadi kita perlu mengidentifikasi secara dinamis nama cabang Pantheon. Di GitLab, ini sederhana - Anda perlu menggunakan variabel lingkungan yang telah ditentukan .
Kami dapat mengambil $CI_MERGE_REQUEST_IID
untuk menunjukkan nomor permintaan penggabungan. Mari kita terapkan semua ini bersama dengan variabel lingkungan global yang telah kita tentukan sebelumnya, dan tambahkan tugas penyebaran baru: multidev di akhir .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
Ini akan mirip dengan deploy:dev
kami deploy:dev
tugas deploy:dev
, hanya cabang yang dikirim ke Pantheon, dan bukan untuk master
.
Kami menambahkan dan melakukan .gitlab-ci.yml
diperbarui, dan sekarang kami akan mengirim cabang baru ke GitLab dengan git push -u origin multidev-support
.
Sekarang buat permintaan menggabungkan baru dari cabang multidev-support
dengan mengklik Buat permintaan menggabungkan .

Setelah membuat permintaan penggabungan, kami melihat bagaimana CI / CD deploy:multidev
.

Lihat - cabang baru telah dikirim ke Pantheon. Tetapi jika kita pergi ke bagian multidev di dasbor situs Pantheon, kita tidak akan melihat lingkungan baru di sana.

Lihatlah bagian Cabang Git.

Hasilnya, cabang mr-1
mencapai Pantheon. Buat lingkungan dari cabang mr-1
.

Kami menciptakan lingkungan multidev, dan sekarang kembali ke GitLab dan lihat bagian Operations> Environments . Kita akan melihat entri untuk dev
dan mr-1
.
Ini karena kami menambahkan entri environment
bernama name
dan url
ke tugas CI / CD. Jika kita mengklik ikon lingkungan terbuka, kita akan pergi ke URL lingkungan multidev Pantheon.
Otomatis pembuatan multidev
Pada prinsipnya, Anda bisa berhenti di sini dan hanya ingat untuk membuat lingkungan multidev untuk setiap permintaan penggabungan, tetapi proses ini bisa otomatis.
Pantheon memiliki alat baris perintah Terminus di mana Anda dapat bekerja dengan platform secara otomatis. Di Terminus, Anda dapat membuat lingkungan multidev dari baris perintah - ideal untuk GitLab CI .
Kami membutuhkan permintaan gabungan baru untuk mengujinya. Buat cabang baru menggunakan git checkout -b auto-multidev-creation
.
Untuk menggunakan Terminus dalam tugas-tugas GitLab CI / CD, Anda memerlukan token mesin untuk otentikasi dalam Terminus dan gambar kontainer dengan Terminus.
Buat token mesin Pantheon , simpan di tempat yang aman, dan tambahkan sebagai variabel lingkungan global di GitLab dengan nama PANTHEON_MACHINE_TOKEN
.
Jika Anda lupa cara menambahkan variabel lingkungan GitLab, kembali ke tempat kami mendefinisikan PANTHEON_SITE
.
Buat Dockerfile dengan Terminus
Jika Anda tidak menggunakan Docker atau tidak suka Dockerfile
, ambil my registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
gambar terbaru dan lewati bagian ini.
GitLab memiliki registry kontainer di mana Anda dapat membangun dan meng-host Dockerfile untuk proyek kami. Mari kita membuat Dockerfile dengan Terminus untuk bekerja dengan Pantheon.
Terminus adalah alat baris perintah dalam PHP, jadi mari kita mulai dengan gambar PHP. Saya menginstal Terminus melalui Composer, jadi saya akan mengambil gambar Docker Composer resmi sebagai basisnya. Buat Dockerfile
di direktori repositori lokal dengan konten 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"
Ikuti instruksi untuk merakit dan mengirim gambar dari bagian Bangun dan dorong gambar dalam dokumentasi registrasi kontainer untuk mengumpulkan gambar dari Dockerfile
dan mengirimkannya ke GitLab.
Buka bagian Registry di proyek GitLab. Jika semuanya berjalan sesuai rencana, akan ada citra kita. Rekam tautan ke tag gambar - kami membutuhkannya untuk file .gitlab-ci.yml
.

Bagian script
dalam deploy:multidev
mulai tumbuh, jadi mari kita pindahkan ke file terpisah. Buat file 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
Script terletak di direktori pribadi dan tidak menyediakan akses web di Pantheon . Kami memiliki skrip untuk logika multidev kami. Sekarang mari kita perbarui deploy:multidev
file .gitlab-ci.yml
untuk mendapatkan ini:
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
Kami perlu memastikan bahwa tugas kami dilakukan dalam gambar khusus yang dibuat, jadi kami menambahkan image
definisi dengan URL registri di .gitlab-ci.yml
. Hasilnya, kami mendapat .gitlab-ci.yml
berikut:
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
Tambahkan, komit, dan kirim private/multidev-deploy.sh
dan .gitlab-ci.yml
. Sekarang kembali ke GitLab dan tunggu tugas CI / CD selesai. Bersabarlah: multidev dapat memakan waktu beberapa menit.
Lalu kita pergi menonton daftar multidev di Pantheon. Astaga! Lingkungan multidev mr-2
sudah ada di sini.

Kesimpulan
Tim saya mendapatkan lebih banyak kesenangan ketika kami mulai membuka permintaan penggabungan dan membuat lingkungan secara otomatis.
Dengan alat GitLab dan Pantheon yang kuat, Anda dapat menghubungkan GitLab ke Pantheon secara otomatis.
Setelah kami menggunakan GitLab CI / CD, alur kerja kami adalah tempat untuk tumbuh. Berikut adalah beberapa ide untuk memulai:
Tulis pendapat Anda tentang GitLab, Pantheon, dan otomatisasi.
PS Tahukah Anda bahwa Terminus, alat baris perintah Pantheon, dapat diperluas melalui plugin ?
Kami di Pantheon bekerja keras pada versi 2 plugin kami untuk alat bantu pembangunan Terminus yang diaktifkan GitLab. Jika Anda tidak ingin mengotak-atik pengaturan untuk setiap proyek, coba plugin ini dan bantu kami menguji beta v2. Untuk Terminus build:project:create
perintah, Anda hanya perlu token Pantheon dan token GitLab. Dia akan menggunakan satu contoh proyek dengan Komposer dan pengujian otomatis, membuat proyek baru di GitLab, situs Pantheon baru, dan menghubungkannya menggunakan variabel lingkungan dan kunci SSH.
Tentang penulis
Andrew Taylor menciptakan alat pengembang di Pantheon .