de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 samanime
samanime
Question

String YAML multiline untuk GitLab CI (.gitlab-ci.yml)

Saya mencoba menulis file gitlab-ci.yml yang menggunakan string multi-baris untuk perintah. Namun, sepertinya string tersebut tidak diurai. Saya sudah mencoba kedua - | dan - > dengan hasil yang sama.

stages:
  - mystage

Build:
  stage: mystage
  script:
    - |
        echo -e "
            echo 'hi';
            echo 'bye';
        "

Ketika mencoba menjalankannya, hanya muncul echo -e ' sebagai skrip yang akan dijalankan, dan bukan seluruh string multiline. Ini menyebabkan masalah bagi saya.

Apa sintaks yang benar untuk menulis sesuatu seperti ini?

56 2017-03-02T15:57:04+00:00 5
 Anthon
Anthon
Pertanyaan edit 2 Maret 2017 в 7:01
Pemrograman
yaml
gitlab-ci
gitlab-ci-runner
 PotatoFarmer
PotatoFarmer
9 Maret 2017 в 8:47
2017-03-09T20:47:24+00:00
Lebih
Sumber
Sunting
#32916486

Saya datang ke sini dengan menduga sebelumnya bahwa ini akan menjadi masalah, tetapi perintah "multi-line" berikut ini untuk keterbacaan bekerja untuk saya:

Gitlab Runner: Shell Runner versi 1.11.0 / Versi Gitlab: 8.17.2

myjob:
stage: deploy
script:
  # Single line command
  - az component update --add sql

  # Multi-line command
  - az sql server create -n ${variable} -g ${variable} -l ${variable}
    --administrator-login ${variable} --administrator-login-password ${variable}
 PotatoFarmer
PotatoFarmer
Jawaban edit 22 Agustus 2019 в 7:14
77
0
Benny K
Benny K
24 November 2017 в 5:00
2017-11-24T17:00:05+00:00
Lebih
Sumber
Sunting
#32916487

Anda dapat menggunakan skrip/perintah multiline melalui fitur yaml literal_block dan anchors. Contoh:

.build: &build |
    echo -e "\n$hl🛠 Building $green$build_path/$build_assets_dir/*.js $nl\n"
    echo -e "javascript-obfuscator $build_path/$build_assets_dir/*.js"
[...]

build:master: 
  stage: build
  script:
    - *rsync
    - *build
[...]
22
0
Solution / Answer
 Anthon
Anthon
2 Maret 2017 в 6:59
2017-03-02T18:59:40+00:00
Lebih
Sumber
Sunting
#32916485

TL;DR; Anda ingin menggunakan skalar YAML multi-baris (untuk keterbacaan) yang dimuat sebagai string baris tunggal yang dapat dikeluarkan sebagai perintah oleh Gitlab-CI. Untuk melakukannya, gunakan skalar polos (tanpa tanda kutip) di YAML yang tersebar di beberapa baris:

script:
- echo -e 
   "echo 'hi';
    echo 'bye';"

Perlu diketahui bahwa ada beberapa batasan yang diberlakukan oleh YAML pada skalar tersebut. Apa yang perlu Anda ketahui adalah bahwa setiap baris berikut diindentasi setidaknya satu posisi lebih dari echo -e (yang diindentasi dua posisi relatif terhadap node koleksinya, yang tidak diindentasi sama sekali), dan bahwa setiap baris baru digantikan oleh spasi saat dimuat (jadi Anda perlu sedikit berhati-hati di mana harus meletakkan baris baru).


Ada beberapa kesalahpahaman dalam postingan Anda, yang menyebabkan Anda mengajukan pertanyaan yang salah.

Tidak ada yang namanya string YAML multi-baris. YAML memiliki skalar dan beberapa dari skalar ini dapat dimuat oleh program sebagai string, sementara beberapa yang lain akan dimuat sebagai bilangan bulat, float, dll.

Anda jelas tertarik pada node skalar yang dimuat sebagai string, karena string tersebut kemudian dapat diinterpretasikan sebagai command-line. Tetapi Anda tidak ingin memiliki baris perintah multi-baris (yaitu dengan baris baru yang disematkan), karena skrip multi-baris tidak didukung di Gitlab CI (seperti yang ditunjukkan @Jordan).

Untuk keterbacaan, Anda ingin menggunakan kemampuan standar YAML untuk memuat skalar multi-baris sebagai string baris tunggal.

Jika Anda tidak peduli dengan keterbacaan, Anda dapat menggunakan:

- echo -e "\n    echo 'hi';\n    echo 'bye';\n"

dan karena skalar Anda tidak dikutip (yaitu dimulai dengan echo) Anda tidak perlu melakukan sesuatu yang khusus di YAML untuk backslashes atau tanda kutip.

Hasil dari skripnya sama (cetak baris kosong, cetak echo 'hi'; pada baris yang menjorok empat spasi, cetak echo 'bye'; pada baris yang menjorok empat spasi).

Jika Anda ingin menggunakan input multi-baris untuk keterbacaan, yang dimuat sebagai satu baris, pada dasarnya ada dua pilihan: gunakan skalar bidang multi-baris atau gunakan skalar terlipat di YAML Anda.

skalar polos multi-baris

Polos berarti skalar tidak dikuotasi, dan seperti halnya dengan multi-baris di YAML, multi-baris berarti baris-baris berikut perlu diindentasi dengan tepat, dalam hal ini lebih jauh dari baris awal

script:
- echo -e 
   "echo 'hi';
    echo 'bye';"

garis baru diganti dengan spasi jadi jangan'tidak dilakukan:

script:
- echo -e 
   "echo 'hi';
    echo '
   bye';"

karena Anda akan mendapatkan spasi yang terlihat sebelum bye.

Ada beberapa batasan seperti bahwa Anda tidak dapat memiliki titik dua yang diikuti oleh spasi di dalam skalar tersebut (yang akan membuatnya terlihat seperti pasangan nilai-kunci).

Tidak perlu untuk melepaskan backslash dalam skalar biasa, karena Anda tidak dapat melepaskan karakter apa pun dalam skalar biasa, tetapi tentu saja Anda dapat menyertakan backslash, yang akan berakhir dalam string yang dimuat dari YAML dan dapat memiliki arti untuk perintah yang dieksekusi dari string itu.

skalar yang dilipat

Skalar terlipat mirip dengan skalar biasa di mana semua baris baru (tunggal) diganti dengan spasi selama pemuatan:

script:
- >
  echo -e 
  "echo 'hi';
  echo 'bye';"

Anda perlu mengindentasi informasi perintah yang sebenarnya setidaknya sebanyak indikator skalar terlipat (>).

Berlawanan dengan skalar biasa, hal-hal seperti : tidak memiliki arti khusus. Jadi jika skalar biasa gagal dengan melemparkan kesalahan YAML, skalar terlipat serupa kemungkinan besar tidak akan'tidak.

 Anthon
Anthon
Jawaban edit 22 April 2019 в 10:40
19
0
 mal
mal
25 Maret 2019 в 11:49
2019-03-25T23:49:23+00:00
Lebih
Sumber
Sunting
#32916488

Konfigurasi wp membuat perintah sangat rewel... dari .gitlab-ci...

build:
  stage: build
  script:
    - echo "Building the app"
    - |
        wp config create --dbname=$vardb --dbhost=$varhost --dbuser=$varusr --dbpass=$varpas --extra-php <<PHP
            define( 'WP_DEBUG', false );
            define( 'FS_METHOD', 'direct' );
            define( 'WP_POST_REVISIONS', 5 );
            define( 'AUTOSAVE_INTERVAL', 600 );
        PHP
    - scp ./wp-config.php continued...
  allow_failure: true
Valeriu
Valeriu 51193
Jawaban edit 21 September 2021 в 6:13
8
0
Maksim Kostromin
Maksim Kostromin
21 Mei 2019 в 9:10
2019-05-21T21:10:34+00:00
Lebih
Sumber
Sunting
#32916489

Ini bekerja untuk saya di Travis CI

before_install:
  - set -e
  - |
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
    <settings xmlns=\"http://maven.apache.org/SETTINGS/1.0.0\"
              xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
              xsi:schemaLocation=\"http://maven.apache.org/SETTINGS/1.0.0
                                   http://maven.apache.org/xsd/settings-1.0.0.xsd\">
      <servers>
        <server>
          <id>github</id>
          <username>${GITHUB_USERNAME}</username>
          <password>${GITHUB_PASSWORD}</password>
        </server>
      </servers>
    </settings>
    " >  ${HOME}/.m2/settings.xml

Berikut dua env variabel (${GITHUB_USERNAME} dan ${GITHUB_PASSWORD}) juga akan diinterpolasi

1
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 14 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
ID
JA
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi