说明:
- Jenkins 主机能通过 ssh 访问部署主机;
- Jenkins 需要安装
publish over ssh
, 版本不同可能名称大同小异;
Jenkins 配置
系统管理 -> 系统配置 -> 找到 publish over ssh
配置
- Name: 主机名称作为标识
- Hostname: 主机 IP 地址
- Username: 登录用户
- 选择高级: 勾选使用密码认证, 端口等信息, 根据需求
- Use password authentication, or use a different key
- 点击测试连接, 看到 success 字样就表示成功连接, 失败需排查网络, 端口, 用户密码等。
使用 pipeline 传输文件
- 目录结构:
? 表示待传入文件路径
# jenkins_host
jenkins@jenkins:~ tree client/nginx-conf
client/nginx-conf
└── nginx.conf
# deployment_host
deployment@deployment:~ tree nginx
nginx
├── history
│ ├── confmap
│ └── client.yaml
└── ?
- 理清目录结构:
主机 | 配置文件路径 |
---|---|
jenkins_host | client/nginx-conf/nginx.conf |
deployment_host | nginx/ |
说明: jenkins 主机需将配置文件上传到部署主机上该目录
- pipeline 代码
...
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'deployment',
transfers: [
sshTransfer(
cleanRemote: false,
excludes: '',
execCommand: """
set -x
echo "代码逻辑块..."
""",
execTimeout: 0,
flatten: false,
makeEmptyDirs: false,
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: "/k8s_update_yaml/nginx",
remoteDirectorySDF: false,
removePrefix: "client/nginx-conf",
sourceFiles: "client/nginx-conf/nginx.conf"
)
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: true
)
]
)
}
...
重点一: source files 要基于任务的目录进行。不支持绝对路径。如果配置不对,则找不到文件。
重点二: Remote directory 要基于你远程服务器的目录配置。你远程服务器配置的基准是/home/ubuntu/nginx 。则最终的文件目录是 /home/ubuntu/nginx + Remote directory的配置参数。不支持绝对路径。
参数说明:
属性 | 作用 |
---|---|
configName | Jenkins 配置远程对应的主机信息 |
execCommand | 代码逻辑块 |
execTimeout | 执行超时时间,0表示无限 |
remoteDirectory | 目标文件夹, 如果存在,此文件夹将位于全局配置中的该文件夹之下, 如果不存在,将创建该文件夹 |
removePrefix | 删除前缀, 不应在远程服务器上创建的文件路径的第一部分 |
sourceFiles | 源文件地址, 只能相对路径 |
verbose | 回显执行输出 |
注意 remoteDirectory:
填写目标目录时要是用/xxx
开头
否则将会疯狂创建文件夹, 和预期不一样
如有理解有误还望指正: Julian_cn@126.com
小伙计: 2021-01-19 21:39 上海