我正在执行一个构建步骤,该步骤处理 Docker Swarm 模式群集中的常见部署任务。由于这是我们和其他人的共同问题,因此我们将此构建步骤共享为 BitBucket 管道:https://bitbucket.org/matchory/swarm-secret-pipe/ 管道需要使用 docker
命令来处理远程 Docker 安装。但是,这不起作用,因为管道运行时找不到 docker 可执行文件。
以下内容适用于我们的测试存储库管道:
options:
docker: true
main:
- step:
services:
- docker: true
docker container run \ --volume=/opt/atlassian/pipelines/agent/build:/opt/atlassian/pipelines/agent/build \ --volume=/opt/atlassian/pipelines/agent/ssh:/opt/atlassian/pipelines/agent/ssh:ro \ --volume=/usr/local/bin/docker:/usr/local/bin/docker:ro \ --volume=/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes:/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes \ --volume=/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes/matchory/swarm-secret-pipe:/opt/atlassian/pipelines/agent/build/.bitbucket/pipelines/generated/pipeline/pipes/matchory/swarm-secret-pipe \ --workdir=$(pwd) \ --label=org.bitbucket.pipelines.system=true \ radiergummi/swarm-secret-pipe:1.3.7@sha256:baf05b25b38f2a59b044e07f4ad07065de90257a000137a0e1eb71cbe1a438e5
管道是相当标准的,并且使用了最近的阿尔卑斯山图像;在这方面没有什么特别的。PATH
永远不会被覆盖。现在是有趣的部分:如果我在管道内执行ls /usr/local/bin/docker
,它会显示一个空目录:
ls /usr/local/bin
total 16K
drwxr-xr-x 1 root root 4.0K May 13 13:06 .
drwxr-xr-x 1 root root 4.0K Apr 4 16:06 ..
drwxr-xr-x 2 root root 4.0K Apr 29 09:30 docker
ls /usr/local/bin/docker
total 8K
drwxr-xr-x 2 root root 4.0K Apr 29 09:30 .
drwxr-xr-x 1 root root 4.0K May 13 13:06 ..
ls: /usr/local/bin/docker/docker: No such file or directory
据我所知,管道和Docker,/usr/local/bin/Docker
应该是Docker二进制文件。相反,由于某种原因,它似乎是一个空目录。这是怎么回事?
我还查看了其他官方管道。它们没有任何不同,但似乎可以很好地使用docker命令(例如Azure管道)。
在与BitBucket支持人员交谈后,我解决了这个问题。事实证明,如果docker上下文发生变化,任何docker命令都会直接发送到远程docker二进制文件,该文件(在我们的服务上)位于与BitBucket管道不同的路径
由于我们在使用管道之前更改了docker上下文,并且安装到管道中的docker实例仍然具有远程上下文集,但管道在另一个位置搜索docker二进制文件,因此会抛出<code>无此类文件或目录</code>错误。
TL;DR:在将控制传递到管道之前,始终还原默认docker主机/上下文,例如:
script:
- export DEFAULT_DOCKER_HOST=$DOCKER_HOST
- unset DOCKER_HOST
- docker context create remote --docker "host=ssh://${DEPLOY_SSH_USER}@${DEPLOY_SSH_HOST}"
- docker context use remote
# do your thing
- export DOCKER_HOST=$DEFAULT_DOCKER_HOST # <------ restore the default host
- pipe: matchory/swarm-secret-pipe:1.3.16
使装饰器包含具有name属性的管道元数据。 此值将用于在模板表达式中调用此管道。 它必须是有效的JavaScript标识符。 实现PipeTransform接口的transform方法。 此方法接受管道的值和任何类型的可变数量的参数,并返回一个变换的(“管道”)值。 import { Component } from '@angular/core'; selector: 'app-root',
错误: 棱角版本:
即。在货币管道上完成一些额外的格式化。为此,我想在自定义管道的组件代码中使用现有管道。
本文向大家介绍Angular 2 全球可用的自定义管道,包括了Angular 2 全球可用的自定义管道的使用技巧和注意事项,需要的朋友参考一下 示例 要使自定义管道在整个应用程序中可用,请在应用程序引导期间扩展PLATFORM_PIPES。 此处的教程:https://scotch.io/tutorials/create-a-globally-available-custom-pipe-in-an
我有一个简单的Jenkins管道,它创建了一个包含3个容器的pod——jnlp、dind和示例测试 如下所示- 还定义了几个阶段- 现在我的根文件夹中有了这个脚本“示例”,我想运行它,但不知怎么的,它找不到。 Dockerfile看起来像这样- pwd返回“/home/jenkins/agent/workspace/test pipeline”,而不是docker容器路径。 结果如下- 你知道怎么
3.3 自定义命令 命令语法 定义命令与定义映射的用法其实很相似: :command {lhs} {rhs} 只不过在使用自定义命令时,{lhs} 是直接输入到命令行中的,当你按下回车时,vim 就将 {lhs} 替换为 {rhs} 再执行。所以这在形式上与下面这个映射等效: : nnoremap :{lhs}<CR> :{rhs}<CR> 当然,由于 :command 所支持的参数与 :ma