Menggunakan kredensial yang disimpan Jenkins di Pipeline sebagai yml untuk git push

Saya sedang menulis Pipeline di Jenkins di mana saya perlu mendorong perubahan kembali ke BitBucket menggunakan skrip. Saya telah menggunakan kredensial yang disimpan untuk mendapatkan kode dari BitBucket tetapi tidak dapat mengirimkannya kembali ke server. Ini skrip saya:

  - stage: Pull Code and Merge master in UAT
  steps:
    script:
      - "git credentialsId: '0b69d4a0-623b-4ba6-8e2c-8419ced4a31a', url: 'repo url'"
      - sh 'git status'
      - sh 'git checkout release/uat'
      - sh 'git merge -m "merging changes from main to UAT" origin/master'
      - "git push credentialsId: '0b69d4a0-623b-4ba6-8e2c-8419ced4a31a',url: 'repo url"  
      - sh 'git status'

git Push menyebabkan kesalahan. Saya tidak tahu cara melakukan Push menggunakan kredensial yang disimpan

Saya menggunakan ini plugin untuk menjalankan pipeline sebagai yaml.

Inilah kesalahan yang terjadi:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 14: expecting '}', found ':' @ line 14, column 33.
         git push credentialsId: '0b69d4a0-623b-4ba6-8e2c-8419ced4a31a',url: 'http://10.0.110.4:7990/scm/ceye/ceye-admin.git
                               ^

1 error

at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:150)
at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:120)
at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:132)
at org.codehaus.groovy.control.SourceUnit.addError(SourceUnit.java:350)
at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:144)
at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:110)
at org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:234)
at org.codehaus.groovy.control.CompilationUnit$1.call(CompilationUnit.java:168)
at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:943)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:605)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:142)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:127)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:571)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:523)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:337)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)

Selesai: KEGAGALAN


person Jamshaid    schedule 12.02.2021    source sumber
comment
Saya tidak tahu BitBucket, tapi punya masalah serupa dengan Gitlab. Dalam kasus saya, cabang master dilindungi. Artinya hanya 'Pengelola' yang diperbolehkan melakukan perubahan pada cabang master. Mungkin hal seperti ini juga menjadi masalah anda. Periksa tautan ini: stackoverflow.com/questions/38864405/   -  person frank    schedule 12.02.2021
comment
@frank saya adalah admin repo. Ada masalah dalam sintaksis git push. Jika Anda bisa melihatnya   -  person Jamshaid    schedule 12.02.2021


Jawaban (1)


Perintah git dari Jenkins pada dasarnya hanyalah pembungkus git clone/pull, tidak memiliki opsi push. Kesalahan sintaksis disebabkan karena Jenkins mengharapkan nama parameter tetapi mendapat push.

Agar ini berfungsi, Anda bisa menggunakan kunci ssh atau menyandikan nama pengguna dan kata sandi di url, seperti:

sh "git push https://${username}:${password}@github.com/...repo.../.com

Jika kata sandinya bukan penyimpan URL (berisi & dll), Anda harus menghindarinya terlebih dahulu.

person smelm    schedule 12.02.2021
comment
bagaimana cara menambahkan ${username} dan kata sandi sebagai variabel? - person Jamshaid; 12.02.2021
comment
dapatkah Anda menggunakan lingkungan withCredentials di pengaturan yaml Anda? - person smelm; 12.02.2021
comment
Ya. Saya bisa menggunakannya - person Jamshaid; 12.02.2021
comment
withCredentials menghasilkan dua variabel tersebut untuk Anda (diberikan credentialId), Anda dapat menentukan bagaimana variabel harus dipanggil atau menggunakan beberapa default - person smelm; 12.02.2021
comment
lihat di sini untuk informasi lebih lanjut: jenkins.io/doc/pipeline/steps/credentials -mengikat - person smelm; 12.02.2021