简体   繁体   English

在 YML 管道中使用 shell 脚本更改 Jenkins 中的目录

[英]Change directory in Jenkins using shell script in YML pipeline

I have written a YML Pipeline in Jenkins.我在 Jenkins 中编写了一个 YML 管道。 I cloned code using ssh from BitBucket.我使用 BitBucket 中的 ssh 克隆了代码。 The code directory is inside the jenkins_pipeline directory.代码目录位于 jenkins_pipeline 目录中。 I have to run a few sh commands using the YML script.我必须使用 YML 脚本运行一些sh命令。 I want to change the directory at the start of the script to the code directory so that I no longer need to change it in every sh command.我想将脚本开头的目录更改为代码目录,以便不再需要在每个sh命令中更改它。 I am not getting a way to do this.我没有办法做到这一点。 Here is my YML script.这是我的 YML 脚本。 I have tried using this method but it always says script.sh file not found which is there in the directory.我试过使用这种方法,但它总是说找不到目录中的 script.sh 文件。
YML script YML 脚本

    pipeline:
  environment:
  agent:
    any:
  stages:
    - stage: Pull Code and Merge master in UAT
      steps:
        script:
          - sh 'git clone ssh://url-to-repo'            
          - sh 'source script.sh'     #it gives the error
          - sh 'pwd'
          - sh 'git checkout release/uat'
          - sh "git pull "
          - sh 'git status'
          - sh 'git merge -m "merging changes from main to UAT" origin/master'
          - sh 'git push'
    - stage: Content Replace
      steps:
        script:
          - withEnv: "['FIND_SER_NAME=dev','REPLACE_SER_NAME=uat']"
            script:
              - "contentReplace(configs: [fileContentReplaceConfig(configs: [fileContentReplaceItemConfig(matchCount: 0, replace: env.REPLACE_SER_NAME, search: env.FIND_SER_NAME)], fileEncoding: 'UTF-8', filePath: '/var/jenkins_home/workspace/UAT_YamlPipeline_Ceye_Service/deploy.sh')])"   
    - stage: Publish Changes to uat branch
      steps:
        script:
          - sh 'git status'
          - sh 'git add --all'
          - sh 'git commit -m "[CYB-128]changed the IPs for UAT branch for build"'
          - sh "git push  --all"
 

this is my currently working script这是我目前的工作脚本

    pipeline:
  environment:
  agent:
    any:
  stages:
    - stage: Pull Code and Merge master in UAT
      steps:
        script:
          - sh ' cd ceye-service && git checkout release/uat'
          - sh " cd ceye-service && git pull "
          - sh ' cd ceye-service && git status'
          - sh ' cd ceye-service && git merge -m "merging changes from main to UAT" origin/master'
          - sh ' cd ceye-service && git push'
    - stage: Content Replace
      steps:
        script:
          - withEnv: "['FIND_SER_NAME=dev','REPLACE_SER_NAME=uat']"
            script:
              - "contentReplace(configs: [fileContentReplaceConfig(configs: [fileContentReplaceItemConfig(matchCount: 0, replace: env.REPLACE_SER_NAME, search: env.FIND_SER_NAME)], fileEncoding: 'UTF-8', filePath: '/var/jenkins_home/workspace/uat-ceye_service_code_change/ceye-service/deploy.sh')])"   
    - stage: Publish Changes to uat branch
      steps:
        script:
          - sh ' cd ceye-service && git status'
          - sh 'cd ceye-service && git add --all'
          - sh 'cd ceye-service && git commit -m "[CYB-128]changed the IPs for UAT branch for build"'
          - sh "cd ceye-service && git push --all"
 

I don't want to us cd in every command.我不想在每个命令中都cd Is there a way I could switch directory in start and it stay until the script ends?有没有办法可以在开始时切换目录并一直保持到脚本结束? Thanks a lot非常感谢

Markup, as comment doesn't have proper indentation: can you try this?标记,因为注释没有适当的缩进:你能试试这个吗?

pipeline:
  environment:
  agent:
    any:
  stages:
    - stage: Pull Code and Merge master in UAT
      steps:
        script:
          - dir: "'ceye-service'"
            script:
              - sh 'git checkout release/uat'
              - sh "git pull"
              - sh 'git status'
              - sh 'git merge -m "merging changes from main to UAT" origin/master'
              - sh 'git push'

Documentation https://plugins.jenkins.io/pipeline-as-yaml/ specific the part of Special Steps With Code Blocks describes this.文档https://plugins.jenkins.io/pipeline-as-yaml/特定于Special Steps With Code Blocks的部分对此进行了描述。

Some steps has their own code blocks.有些步骤有自己的代码块。 For example: 'withAnt, withEnv, withCredentials, dir' or any other custom step definition which has it's own code block.例如:“withAnt、withEnv、withCredentials、dir”或任何其他具有自己代码块的自定义步骤定义。 This kind of steps also can be defined as YAML.这种步骤也可以定义为 YAML。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM