การใช้ Jenkins จัดเก็บข้อมูลรับรองใน Pipeline เป็น yml สำหรับ git push

ฉันกำลังเขียน Pipeline ใน Jenkins โดยที่ฉันต้องผลักดันการเปลี่ยนแปลงกลับไปที่ BitBucket โดยใช้สคริปต์ ฉันใช้ข้อมูลประจำตัวที่เก็บไว้เพื่อรับโค้ดจาก BitBucket แต่ไม่สามารถส่งกลับไปยังเซิร์ฟเวอร์ได้ นี่คือสคริปต์ของฉัน:

  - 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 ทำให้เกิดข้อผิดพลาด ฉันไม่รู้วิธีพุชโดยใช้ข้อมูลรับรองที่เก็บไว้

ฉันใช้ สิ่งนี้ ปลั๊กอินเพื่อเรียกใช้ไปป์ไลน์เป็น yaml

นี่คือข้อผิดพลาดที่เกิดขึ้น:

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)

เสร็จสิ้น: ความล้มเหลว


person Jamshaid    schedule 12.02.2021    source แหล่งที่มา
comment
ฉันไม่รู้จัก BitBucket แต่มีปัญหาคล้ายกันกับ Gitlab ในกรณีของฉัน สาขาหลักได้รับการคุ้มครอง ความหมายมีเพียง 'ผู้ดูแล' เท่านั้นที่ได้รับอนุญาตให้ทำการเปลี่ยนแปลงสาขาหลัก บางทีสิ่งนี้อาจเป็นปัญหาของคุณเช่นกัน ตรวจสอบลิงก์นี้: stackoverflow.com/questions/38864405/   -  person frank    schedule 12.02.2021
comment
@frank ฉันเป็นผู้ดูแลระบบของ repo มีปัญหาในไวยากรณ์ของ git push หากคุณสามารถดูได้   -  person Jamshaid    schedule 12.02.2021


คำตอบ (1)


โดยพื้นฐานแล้ว git คำสั่งของเจนกินส์เป็นเพียงตัวตัดคำของ git clone/pull แต่ไม่มีตัวเลือก push ข้อผิดพลาดทางไวยากรณ์เกิดขึ้นเนื่องจากเจนกินส์คาดหวังชื่อของพารามิเตอร์แต่ได้รับการพุช

เพื่อให้สามารถใช้งานได้ คุณสามารถใช้คีย์ ssh หรือเข้ารหัสชื่อผู้ใช้และรหัสผ่านใน url ได้ เช่น:

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

หากรหัสผ่านไม่ใช่การบันทึก URL (มี & ฯลฯ) คุณต้อง Escape ก่อน

person smelm    schedule 12.02.2021
comment
ฉันจะเพิ่ม ${username} และรหัสผ่านเป็นตัวแปรได้อย่างไร - person Jamshaid; 12.02.2021
comment
คุณสามารถใช้สภาพแวดล้อม withCredentials ในการตั้งค่า yaml ของคุณได้หรือไม่? - person smelm; 12.02.2021
comment
ใช่. ฉันสามารถใช้สิ่งนั้นได้ - person Jamshaid; 12.02.2021
comment
withCredentials สร้างตัวแปรสองตัวนั้นให้กับคุณ (ระบุ credentialsId) คุณสามารถระบุวิธีเรียกตัวแปรหรือใช้ค่าเริ่มต้นบางอย่าง - person smelm; 12.02.2021
comment
ดูข้อมูลเพิ่มเติมที่นี่: jenkins.io/doc/pipeline/steps/credentials -ผูกพัน - person smelm; 12.02.2021