我使用的是docker部署jenkins,使用172.16.1.245作为部署服务器。

1.问题

在SSH Publishers里执行的环境变量,不是ssh server主机设置的环境变量,这样会导致某些通过SSH Publishers执行的程序因为环境变量不同而执行错误。

2.实际案例

例如我们在172.16.1.245机器设置环境变量LD_LIBRARY_PATH

2.1设置LD_LIBRARY_PATH

2.1.1先设置/etc/profile

vi /etc/profile

使设置生效

source /etc/profile

2.1.2再设置root/.bash_profile

vi ~/.bash_profile

~代表当前用户目录,例如root用户~等同于root,所以上面命令等同于

vi root/.bash_profile

使设置生效

source ~/.bash_profile

2.1.3检查设置是否生效

echo $LD_LIBRARY_PATH

经过检查LD_LIBRARY_PATH环境变量与设置的一致

2.2通过jenkins的SSH Publishers查看环境变量LD_LIBRARY_PATH

2.2.1新建job,选择“创建一个自由风格的软件项目”

2.2.2在“构建”里选择“Send files or execute commands over SSH”

2.2.3在SSH Publishers填入一下内容

就是打印环境变量LD_LIBRARY_PATH

2.2.4立即构建,查看控制台输出

应该输出“./:./”,可是什么都没有输出,说明环境变量有问题。

2.3原因

查了很多博客,大概意思就是,通过ssh执行远程主机命令,使用的是本地服务器的环境变量;使用ssh登录远程主机使用的是远程服务器的环境变量。

即,使用SSH Publishers执行exec使用的是ssh执行远程主机命令,使用的是jenkins部署服务器的环境变量(我使用的是docker部署的,即为容器的环境变量)。

https://www.cnblogs.com/zhenyuyaodidiao/p/9287497.html

2.4解决问题

我需要使用远程服务器(172.16.1.245),而不是docker的环境变量。

使用 source使环境变量生效

source /etc/profile
source ~/.bash_profile
echo $LD_LIBRARY_PATH

可以看到,环境变量LD_LIBRARY_PATH是远程服务器(172.16.1.245)环境变量,设置成功。

3.总结

我出现的问题是使用jenkins部署程序出现异常,使用xshell远程连接后运行程序,程序运行正常。检查过jenkins的SSH Publishers里执行命名的用户,服务器是否为172.16.1.245,都没有问题,最后检查到jenkins输出的环境变量PATH与172.16.1.245的PATH不一样,最后找到问题的原因。

如果环境变量涉及多个文件,需要让设置的所有文件生效。例如:PATH

jenkins之SSH Publishers环境变量的更多相关文章

  1. Jenkins持续部署-Windows环境持续部署探究1

    目录 Jenkins持续部署-Windows环境持续部署探究1 目录 前言 目的 方案流程 技术实现 PowerShell FTP上传插件 环境变量插件 脚本执行 远程调用 升级服务 启动服务 总结 ...

  2. 解析docker中的环境变量使用和常见问题解决

    docker容器中的环境变量 docker可以为容器配置环境变量.配置的途径有两种: 在制作镜像时,通过ENV命令为镜像增加环境变量.在容器启动时使用该环境变量. 在容器启动时候,通过参数配置环境变量 ...

  3. 个人环境搭建——搭建jenkins持续构建集成环境

    ---恢复内容开始--- 搭建jenkins持续构建集成环境  要搭建jenkins持续构建集成环境,首先要安装tomcat和JDK:   第一部分,基本说明:   敏捷(Agile) 在软件工程领域 ...

  4. 全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)

    注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作 ...

  5. SSH登录远程主机执行脚本找不到环境变量

    这是因为在Linux上,bash会有四种模式,根据不同的case,Linux会加载不同模式的bash.一般如果你自己直接登录主机,能看到环境变量,但是使用ssh 远程登录执行脚本就找不到环境变量,那么 ...

  6. 解决SSH远程执行命令找不到环境变量的问题

    通过SSH执行远程主机的命令或脚本时,经常会出现找不到自定义环境变量的问题.但是,如果通过SSH登录远程主机,然后再执行相同的命令或脚本,那么此时执行又是成功的.两种相似的方法,得到的结果却截然不同, ...

  7. ssh连接远程主机执行脚本的环境变量问题

    近日在使用ssh命令ssh user@remote ~/myscript.sh登陆到远程机器remote上执行脚本时,遇到一个奇怪的问题: ~/myscript.sh: line n: app: co ...

  8. Jenkins可用环境变量列表以及环境变量的使用(Shell/Command/Maven/Ant)

    一.可用环境变量列表(以下来自google翻译): BRANCH_NAME 对于多分支项目,这将被设置为正在构建的分支的名称,例如,如果您希望从而master不是从特征分支部署到生产. CHANGE_ ...

  9. Jenkins可用环境变量以及使用方法

    Jenkins可用环境变量以及使用方法

随机推荐

  1. C# 连接SQLServer数据库自动生成model类代码

    Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading ...

  2. 禁止迅雷极速版被强制升级为迅雷x

    PS:迅雷极速版( ThunderSpeed1.0.34.360 )下载地址: https://pan.baidu.com/s/1wuBOpNbim5jBru03AfSAVg 按照下面的这个路径去找. ...

  3. FreeRTOS任务状态信息查询

    uxTaskPriorityGet():查询某个任务的优先级 vTaskPrioritySet():改变某个任务的任务优先级 uxTaskGetSystemState():获取系统中任务状态 vTas ...

  4. Django:Python3.6.2+Django2.0配置MySQL 转载

    Django默认使用的数据库是python自带的SQLlite3,但SQLlite并不适用于大型的项目,因此我将数据库换成了MySQL,下面介绍下Django如何配置数据库... 我使用的版本是:Py ...

  5. consul-服务发现、服务隔离、服务配置

    一.服务发现 服务发现组件记录了(大规模)分布式系统中所有服务的信息,其它服务可以据此找到这些服务.DNS 就是一个简单的例子.当然,复杂系统的服务发现组件要提供更多的功能,例如,服务元数据存储.健康 ...

  6. 使用IDEA将springboot框架导入的两种方法

    第一种新建Maven,导入springboot所依赖的jar包   1.新建一个maven项目,下一步命名,保存文件地址,点击完成         2.进去springboot下载(点击进入),复制p ...

  7. [ipsec][strongswan] 使用VTI配置基于路由的ipsec

    之前写的一个:[dev][ipsec] 基于路由的VPrivateN 一 我们默认用strongswan的时候基于策略的. 也就是policy. 基于策略的ipsec中, policy承担了两部分功能 ...

  8. C++Primer第五版 练习8.6答案详解

    重写7.1.1节书店程序(第299页),从文件中读取一个交易记录.将文件名作为一个参数传递给main. 本题所需源文件如下: Sales_data.h文件: #pragma once #include ...

  9. 《你说对就队》第九次团队作业:Beta冲刺与验收准备

    <你说对就队>第九次团队作业:Beta冲刺与验收准备 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 <你说对就队> ...

  10. final修饰的变量引用不能变还是对象不可变

    两种情况:如果是基本数据类型,被final修饰的变量一旦初始化就不能改变:如果是引用数据类型的变量,初始化之后不能指向另外一个对象. 基本数据类型: package cn.yqg.day2; publ ...