Category Archives: 自动化运维

jenkins agent 部署

如果jenkins 主节点不能直接连接待部署项目的服务器A,但是A可以访问互联网,主节点也暴露在互联网上,可以通过在A所在的网络的选一台B主机安装agent ,通过这个agent来构建和发布。

相关配置注意点:

  • agent启动方式选择 “通过java Web启动代理”;
  • agent 配置标签,用法选择“只允许运行绑定到这台机器的Job”
  • 工具位置配置 agent中nodejs 安装的路径
  • agent 需要安装 git ,nodejs, agent需要 git, maven,node.js, java(以上都可以在全局工具配置自动安全), rsync(部署同步包到目的主机,双方都要装)
  • nodejs目录设置777权限,保证agent可以下载相关的编译依赖包 chmod -R 777 [node目录]
    自动部署,这部省略
  • 配置 JAVA_HOME 配置 ,全局默认路径/usr/lib/jvm/default-java (我的master),所以agent,安装了open-jdk要有这个目录,并且link到对应的jkd程序目录
  • agent网络,要允许访问,git-88, jenkins master 8087-8088 ,nexus 88(maven包和npm包)

在master上新建节点完成上面的操作后,返回节点列表,此时的点击显示未连接状态。点解刚创建的节点名称“test”,如下图

点击如图2的agent.jar 下载后传到agent所在服务器,然后在agent节点运行给出的命令启动agent服务。

启动后等待一会,就可以看到节点列表显示已经连接状态。

python 自动化运维–fabric库

1、windows拷贝文件到linux部署脚本(python)


# encoding='utf-8'

from fabric import Connection
import sys 

from fabric import Connection
import sys
packageName = sys.argv[1].replace('(','').replace(')','')
sourceDir = "C:\\tmp\\"
destDir = "/usr/local/src/"

with  Connection(host="122.226.107.154", port=2024, user="root", connect_kwargs={"password":"xxxx"}) as c:
    c.put(sourceDir + sys.argv[1], destDir + packageName)
    c.run('rm -rf /usr/local/src/dist')
    c.run('rm -rf /usr/local/app/szzj-portal-pc/*')
    c.run('unzip -o /usr/local/src/%s -d /usr/local/src/' %(packageName))
    c.run('/usr/bin/mv -f /usr/local/src/dist/* /usr/local/app/szzj-portal-pc/')

fabric 官网已经更新到2.6版,阿里镜像下载也已经是2.5的版本,但是网络上搜索到的案例大部分是按照1.X版本编写的。今天查看了下官网的文档,一些用法记录下。

2、基本上只要使用Connection这个api :

fabric.connection.Connection

这个类是从 Invoke 的Context 继承过来的,另外它还封装了Paramiko SSHClient 。可用参数如下:
Connection(hostuser=Noneport=Noneconfig=Nonegateway=Noneforward_agent=Noneconnect_timeout=Noneconnect_kwargs=Noneinline_ssh_env=None)

这里主要说明下connect_kwargs这个参数,它的值是字典(dict),比如密码,密钥key只能设置在这里。这个字典会直接传递给paramiko.client.SSHClient.connect解析,完整的可用字段如下:connect(hostnameport=22username=Nonepassword=Nonepkey=Nonekey_filename=Nonetimeout=Noneallow_agent=Truelook_for_keys=Truecompress=Falsesock=Nonegss_auth=Falsegss_kex=Falsegss_deleg_creds=Truegss_host=Nonebanner_timeout=Noneauth_timeout=Nonegss_trust_dns=Truepassphrase=Nonedisabled_algorithms=None)

3、另外是多主机的操作api

  1. fabric.group.Group(*hosts**kwargs) /**抽象类,无法直接使用,只能选用下面两个
  2. fabric.group.SerialGroup(*hosts**kwargs)
  3. fabric.group.ThreadingGroup(*hosts**kwargs)

因为本机测试不支持put (2.5版本)。group.py也看了,确实没有put ,不好用。
还是选择了for 循环IP列表调用Connection 来实现多主机操作。

其它

1、参数传递 :

python 的参数传递到 shell 脚本 c.run('/root/test.sh %s' %(sys.argv[1]))
实现上类是print函数传参。