Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix sed:-e表达式#1,字符20:unterminated`s';詹金斯管道中的命令_Unix_Jenkins_Sed_Ansible_Jenkins Pipeline - Fatal编程技术网

Unix sed:-e表达式#1,字符20:unterminated`s';詹金斯管道中的命令

Unix sed:-e表达式#1,字符20:unterminated`s';詹金斯管道中的命令,unix,jenkins,sed,ansible,jenkins-pipeline,Unix,Jenkins,Sed,Ansible,Jenkins Pipeline,我把我的docker图片上传到nexus。我需要把最新的图片放到Ansible剧本上 下面是我的代码和ansible文件 def dockerTag(){ env.Docker_tag = sh (script: "git rev-parse --short HEAD | tr -d '\n'", returnStdout: true) } pipeline{ agent any stages{ stage('Git checko

我把我的docker图片上传到nexus。我需要把最新的图片放到Ansible剧本上

下面是我的代码和ansible文件

def dockerTag(){
    env.Docker_tag = sh (script: "git rev-parse --short HEAD | tr -d '\n'", returnStdout: true)
}

pipeline{
    agent any

    stages{
        stage('Git checkout'){
            steps { 
                git 'https://github.com/xxxxx/'
            }
        }    
        
        stage('Maven Build'){
         steps {
 withCredentials([usernamePassword(credentialsId: 'mvn-credentials', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
 sh "/opt/maven/bin/mvn -s /opt/maven/conf/settings.xml package  -Dproject.username=${USERNAME} -Dproject.password=${PASSWORD}"
      }
    }
 }
    
stage('Build Docker Image'){
  steps{
      dockerTag()
  sh "docker build . -t 10.220.110.10:8083/halosys:${dockerTag()}"
  }
}    

stage('Push Docker Image to Nexus'){
  steps{
    withCredentials([string(credentialsId: 'pwd', variable: 'nexus3')]) {
    sh "docker login -u admin -p ${nexus3} 10.220.110.10:8083"
    sh "docker push 10.220.110.10:8083/halosys:${dockerTag()}"
      } 
    }
 }    

   
   stage('Running Ansible playbook'){
     steps{
         dockerTag()
         
         sh '''
            echo $Docker_tag
            sed -i "s/docker_tag/$Docker_tag/g" nexus-image-pull.yml
           ''' 
     
     }  
       
   }
   
   

   }
}

当我试图从Nexus获取最新图像并将值替换为yml文件时。我遇到了类似

sed -i 's/docker_tag/01255bc
/g' nexus-image-pull.yml
sed: -e expression #1, char 20: unterminated `s' command

请帮助解决此问题

您可能引入了反勾号而不是撇号:这一行中有两个不同的标记(未终止的's'),这表明这可能是一个简单的解决方法

sed-ir's/docker_tag/01255bc/g'nexus-image-pull.yml sed:-e 表达式#1,char 20:unterminated's'命令


你能这样试试吗:
sed-e's!码头工人标签“$Docker\u标签”\'!g\'

这里我使用的是
sed
\
中,code>作为分隔符用于转义
'

在bash中,该命令类似于:
sed-e的!码头工人标签“$Docker_tag”!g'
但是由于您使用的是:sh'',其中已经使用了
'
,因此我们必须在sed中转义
'


更新: 当你写到:sed-I's/docker_tag/01255bc/g'nexus-image-pull.yml sed:-e expression#1,char 20:unterminated's'command关于01255bc和/之间的空格

在管道的控制台日志中,它必须如下所示:

sed -i 's/docker_tag/01255bc 
/g' nexus-image-pull.yml 
sed: -e expression #1, char 20: unterminated `s' command
因此,我尝试运行您的管道,我认为您面临的问题是由于git提交id末尾的换行字符
\n

但是,我根据我为其他东西创建的工作脚本修改了脚本,它正在为我运行。我的脚本版本:

def dockerTag(){
    env.Docker_tag = sh (script: "git rev-parse --short HEAD | tr -d '\n'", returnStdout: true)
}

pipeline{
    agent any

stages {

 stage('Running Ansible playbook'){
     steps{
         dockerTag()
         
         sh '''
           echo $Docker_tag
   
          sed -i "s/docker_tag/$Docker_tag/g" nexus-image-pull.yml
          '''
         
     }  
       
   }
 }
}

我已经像sh''sed-ie'一样更新了你的代码!码头工人标签“$Docker\u标签”\'!g\'''nexus image-pull.yml'我仍然得到了与sed相同的错误:-e expression#1,char 20:unterminated`s'命令尝试运行
cat nexus-image-pull.yml | sed-e“s/docker_tag/$docker_tag/g”
,看看它是否运行。这将只输出修改后的文件,不会改变原始文件,甚至
cat nexus-image-pull.yml | sed-e“s/docker_tag/$docker_tag/g”
给我同样的错误我刚刚更新了答案并在那里共享了一个工作脚本。也许可以尝试一下?您不需要到处调用dockerTag(),只需在git代码签出阶段调用它一次,然后在其他地方使用$Docker_标记即可。
def dockerTag(){
    env.Docker_tag = sh (script: "git rev-parse --short HEAD | tr -d '\n'", returnStdout: true)
}

pipeline{
    agent any

stages {

 stage('Running Ansible playbook'){
     steps{
         dockerTag()
         
         sh '''
           echo $Docker_tag
   
          sed -i "s/docker_tag/$Docker_tag/g" nexus-image-pull.yml
          '''
         
     }  
       
   }
 }
}