es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excluir una carpeta con .artifactignore.

Estoy construyendo un pipeline donde mi directorio de puesta en escena se ve así:

txt
.
└── a
├── b
│ ├── c <– excluir todo lo que está debajo de esto
│ │ └── d
│ │ ├── big_file_1
│ │ └── big_file_2
│ ├── file_1
│ └── file_2
├── file_3
└── file_4

Lo que quiero es excluir todo lo que está debajo de c en mi artefacto. Los archivos debajo de c pueden estar anidados profundamente y el número de niveles es impredecible. Aprendí que .artifactignore, aunque se anuncia que funciona como .gitignore, no es así. Si quiero excluir c, todo lo que tenía que hacer en .gitignore es:

txt
**/c

Intenté eso, más innumerables otros patrones en .artfifactignore pero no puedo hacer que funcione. Aquí hay un pipeline YAML si quieres replicar el problema:

steps:
  - bash: |
      mkdir -p a/b/c/d
      touch a/b/c/d/big_file_1
      touch a/b/c/d/big_file_2

      touch a/b/file_1
      touch a/b/file_2
      touch a/file_3
      touch a/file_4

      echo > .artifactignore <<EOF
      **/c
      **/c/*
      **/c/**
      **/c/**/*
      a/b/c/**
      **/big*
      EOF

      tree
    workingDirectory: $(Build.StagingDirectory)

- publish: $(Build.StagingDirectory)
  name: drop
  displayName: Publicar

¡Ninguno de los patrones funcionó! ¿Cómo se supone que debo excluir el directorio c con .artifactignore?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como has descubierto, .artifactignore no funciona exactamente como .gitignore, y algunos de los patrones que funcionan para .gitignore pueden no funcionar para .artifactignore. Para excluir el directorio c de tu artefacto, puedes probar el siguiente patrón en tu archivo .artifactignore:

    **/c/**
    

    Este patrón debería excluir todos los archivos y subdirectorios bajo el directorio c, sin importar qué tan profundamente estén anidados. También puedes eliminar los otros patrones en tu archivo .artifactignore que no funcionaron, ya que no serán necesarios.

    Aquí tienes cómo se vería tu pipeline YAML actualizado:

    steps:
      - bash: |
          mkdir -p a/b/c/d
          touch a/b/c/d/big_file_1
          touch a/b/c/d/big_file_2
    
          touch a/b/file_1
          touch a/b/file_2
          touch a/file_3
          touch a/file_4
    
          echo > .artifactignore <<eof
          **/c/**
          eof
    
          tree
        workingdirectory: $(build.stagingdirectory)
    
      - publish: $(build.stagingdirectory)
        name: drop
        displayname: publish
    

    con este patrón en tu archivo .artifactignore, el directorio c debería ser excluido de tu artefacto. /c/=”” eof=”” tree=”” workingdirectory:=”” $(build.stagingdirectory)=”” -=”” publish:=”” $(build.stagingdirectory)=”” name:=”” drop=”” displayname:=”” publish=”” “`=”” con=”” este=”” patrón=”” en=”” tu=”” archivo=”” .artifactignore,=”” el=”” directorio=”” c=”” debería=”” ser=”” excluido=”” de=”” tu=””></eof
    /c/
    eof

      tree
    workingdirectory: $(build.stagingdirectory)
    
    • publish: $(build.stagingdirectory)
      name: drop
      displayname: publish
      “`

    con este patrón en tu archivo .artifactignore, el directorio c debería ser excluido de tu artefacto.>

Comments are closed.