jenkins远程触发

背景:

脚本触发远程jenkins上的任务,无法实现jenkins slave模式;

因为构建过程中有文件参数,所以Parameterized Remote Trigger 插件也不适用,尝试了几种方式都无法实现。

最终查到有人通过模拟浏览器数据提交实现相同功能,命令如下:

通过curl提交post请求:

curl -u 'test:test' -XPOST 'http://12.12.13.13:6443/jenkins/job/test-post-triger/build/' \
--form attachedfile=@./123.txt \  #文件参数
--form json='{"parameter": [{"name":"abc", "file":"attachedfile"}]}'   #参数化构建过中的参数

只查到这样一条命令,尝试过程中遇到不少问题,好不容易调通了,结果远端jenkins的防火墙把.jar结尾的文件给过滤了,导致触发一直失败。

最终成功,但对“attachedfile”这个关键字不太理解,不太清楚是固定格式还是可以自定义,于是在浏览器里提交构建后抓了一下浏览器提交的data,如下:

文字内容如下:

{"parameter": [{"name": "package", "file": "file0"}, {"name": "hosts", "value": "192.168.1.141:192.168.1.82"}], "statusCode": "303", "redirectTo": ".", "Jenkins-Crumb": ["931f889ad5c5ef028fbb9005f5dbb3b67d293c3fcc1f895113fb25d8431fc8cb", "931f889ad5c5ef028fbb9005f5dbb3b67d293c3fcc1f895113fb25d8431fc8cb"]}

从上面的内容可以看出来,这个“attachedfile”为自定义变量,目的在于把文件内容传递到"parameter"参数结构中。

Jenkins触发远程服务器执行 Python 脚本,通常可以通过以下几种方式实现: ### 1. 使用 SSH 插件执行远程脚本 Jenkins 提供了多种插件来支持远程服务器操作,例如 **SSH Pipeline Steps** 插件或 **SSH plugin**。这些插件允许 Jenkins 通过 SSH 连接到远程服务器并执行命令。 #### 配置步骤: 1. 安装插件: - 登录 Jenkins 管理界面。 - 前往 **Manage Jenkins > Manage Plugins**。 - 在 **Available** 标签下搜索 **SSH Pipeline Steps** 并安装。 2. 配置 SSH 服务器连接信息: - 前往 **Manage Jenkins > Configure System**。 - 找到 **SSH remote hosts** 部分。 - 添加远程服务器的主机名/IP地址、端口、用户名和认证方式(如密码或 SSH 私钥)。 3. 编写 Jenkins Pipeline 脚本: ```groovy pipeline { agent any stages { stage('Run Python Script Remotely') { steps { sshScript script: ''' cd /path/to/script python3 your_script.py ''', host: 'remote-server-name' } } } } ``` ### 2. 使用 Paramiko 在 Python 脚本中执行远程命令 如果希望通过 Jenkins 触发本地 Python 脚本,再由 Python 脚本连接远程服务器执行命令,可以使用 `paramiko` 库。 #### 示例代码: ```python import paramiko def run_remote_script(): host = "remote_host_ip" username = "your_username" password = "your_password" script_path = "/path/to/remote_script.py" ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh.connect(host, username=username, password=password) stdin, stdout, stderr = ssh.exec_command(f"python3 {script_path}") print("Output:", stdout.read().decode()) print("Error:", stderr.read().decode()) finally: ssh.close() if __name__ == "__main__": run_remote_script() ``` #### Jenkins 配置: - 创建一个自由风格项目。 - 在 **Build** 部分添加 **Execute Python script** 步骤,运行上述脚本。 ### 3. 使用 Jenkins Pipeline 触发远程服务器的脚本 如果远程服务器上已经部署了可执行的 Python 脚本,可以通过 Jenkins Pipeline 调用远程服务器上的脚本路径。 #### 示例 Pipeline 脚本: ```groovy pipeline { agent any stages { stage('Run Remote Python Script') { steps { sh 'ssh user@remote_host "python3 /path/to/remote_script.py"' } } } } ``` ### 4. Jenkins + GitLab Webhook 触发远程执行 如果项目与 GitLab 集成,可以通过 GitLab 的 Webhook 触发 Jenkins 任务,再由 Jenkins 触发远程服务器执行 Python 脚本。 #### Jenkins 配置: 1. 安装 **GitLab Plugin**。 2. 在 Jenkins 项目中配置 GitLab webhook URL。 3. 在 Pipeline 中使用 SSH 插件或 `paramiko` 脚本触发远程服务器执行。 ### 5. 使用 Ansible 触发远程任务 Ansible 是一种自动化配置管理工具,可以与 Jenkins 集成以触发远程服务器执行任务。 #### Jenkins Pipeline 示例: ```groovy pipeline { agent any stages { stage('Run Python Script via Ansible') { steps { ansiblePlaybook( playbook: 'run_python_script.yml', inventory: 'inventory.ini', extras: '-e "target=remote_host"' ) } } } } ``` 其中 `run_python_script.yml` 内容如下: ```yaml - name: Run Python script on remote host hosts: "{{ target }}" tasks: - name: Execute Python script command: python3 /path/to/remote_script.py ``` ### 总结 - 如果远程服务器环境较为简单,推荐使用 **SSH 插件** 直接执行命令。 - 如果需要更复杂的逻辑或集成,可以使用 **Python 脚本 + Paramiko** 或 **Ansible**。 - 对于 GitLab 集成项目,可以通过 **GitLab Webhook + Jenkins Pipeline** 实现自动化触发。 通过上述方法,Jenkins 可以灵活地触发远程服务器执行 Python 脚本,适用于自动化测试、部署和运维等多种场景[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值