DevOps

针对从事自动化测试,持续交付,服务集成和监控以及构建SDLC基础架构的软件工程师的问答

1
如何在Ansible中确定性地和可重复地分配增加的端口号?
我是Ansible的新手,但我必须维护一组剧本,这些剧本与在给定环境中要设置的服务相对应。需要为它们分配端口,证书等。这将导致许多文件具有基本上总是相同名称的列表以及对它们的分配。 在许多情况下,我认为我可以轻松地将service_name用作变量,但是当映射到IP,端口或其他数字标识符时,我还没有找到一种方法来确定性地为它们分配可重复的不同编号,并且最好保留即使添加新服务也是如此。我考虑过使用SQLite数据库存储服务并从其ID中生成值,但是我不知道如何将其与Ansible集成。 我认为分配越来越多的端口号并不是什么新鲜事。这是很多系统管理员每天要做的事情,因此必须有某种方法可以做到这一点。 编辑:我们直接添加端口号等,group_vars/all.yml如下所示: ports: service1:1024 service2:1025 service3:1026 由于我们创建了其他监狱(BSD),并且清单将取决于要执行的角色,因此清单是自动生成的。
12 ansible  ports 

3
有没有办法在Ansible中并行运行with_items循环?
我正在运行Ansible 2.2,但可以帮助升级。 我看到了这个消息,并感到非常兴奋,但是在这个(或任何版本)的Ansible文档中似乎都没有。 我要解决的问题是我需要在Centos机器上管理1000个用户。 串行运行此任务需要花费相当长的时间。更令人讨厌的是,所有内容都显示为已更改,因为用户模块上的“ expires”命令始终将其标记为已更改。 这看起来也很有希望,但是在with_items循环中运行每个命令花费的时间相同,并且运行速度没有更快(我从不费心等待足够长的时间才能到达结尾)。 现在,跳过任务的速度很快(比Ansible 2.0快很多),如果我不知道如何并行进行这项工作,我想我会回过头来弄清楚如何跳过毫无意义的任务,如果有的话否则失败,我将编写自己的模块。但是似乎我应该可以在Ansible中更快地完成所有这些工作。 这是我要并行运行的, host_authorizations是用户名和其他数据的列表。 - name: Create/modify OS user accounts user: name={{ item.username }} group=sshusers shell=/bin/bash home="/home/selinux-modules/{{ item.username }}" state=present expires={{item.expiredate|default(omit)}} with_items: "{{ host_authorizations }}" tags: full_maintenance
12 ansible 


4
在Google Cloud Load Balancer上打开端口
似乎默认情况下,Google Cloud负载均衡器会不必要地公开多个端口。我还没有找到一种仅公开80/443的方法,每次我制作其负载均衡器之一时,在nmap中会看到以下端口: PORT STATE SERVICE 25/tcp open smtp 80/tcp open http 110/tcp open pop3 143/tcp open imap 443/tcp open https 465/tcp open smtps 587/tcp open submission 993/tcp open imaps 995/tcp open pop3s 1720/tcp open H.323/Q.931 8080/tcp open http-proxy 有办法封锁25、465、587、993和995吗? 请注意,这个问题是关于GCP负载均衡器的,而不是防火墙。

2
使用Jenkins的sudo不好吗?
我使用“ 通过SSH发布”插件将我的应用程序部署Jenkins到不同的环境。一些部署作业会进行环境准备,诸如停止并重新启动应用程序服务器系统服务之类的事情。其中一些命令要求sudo。 我只是好奇在远程发布和执行Jenkins作业中要求sudo是否会是一种不良的安全做法。我们是否应该更改目标主机上的安全策略以允许执行所需功能而无需sudo?
11 jenkins  security 

4
基础架构即代码和TDD
作为代码的基础架构告诉我们使用自动化构建的工具。大。像工具ansible,厨师,木偶,盐栈以及其他推动我们写作基础设施长相怎么样,而解决分歧。 在Salt Stack中,这些位称为状态。如果状态与现实不符,该工具将为我们解决。换句话说-我们正在为基础架构编写测试,如果测试失败,该工具将自行修复。至少那是主意。 XP教我们如何使用TDD,问题是它是否适用于基础架构?工具表明确实如此。 我可以想象几种非常有用的测试类型。 我们编写与部署的服务捆绑在一起的冒烟测试,以确保端到端的部署服务正常运行。这将是一个API调用或/和systemctl检查,以确保我们刚刚部署的内容能够正常工作。由于诸如ansible之类的工具具有确保服务正在运行的状态,因此许多功能都可以在相同的状态下涵盖。 有一个项目Molecule允许针对docker或另一个临时虚拟化引擎运行单独的角色(如Ansible所说的那样)。这迫使角色分离,并允许在处理角色时将其与剧本隔离地执行。测试通常允许模拟该角色应该使用的变量。但是,其他示例似乎是ansible引擎的副本(声明文件属于用户...)。 ThoughtWorks的高科技雷达,现在推崇一样的工具INSPEC,serverspec或戈斯用于验证服务器是否满足规范。但是我们正在编写规范,不是吗? 如果我们以状态/角色描述基础架构,那么进一步测试基础架构是否有意义?我想这可能会在较大的组织(由一个团队提供规范并遵循其他规范)中变得更加必要,或者如果有大量角色,也许您想运行其中一部分并从测试中获得快速收益?我很努力地想知道,如果您对相同的问题有一个角色/状态,为什么还要编写测试。

3
Jenkins:使用Docker作为构建环境的权限问题
我在Ubuntu 16.04机器上安装了Jenkins。Jenkins本身不在容器中运行。我要做的只是yarn install使用节点图像进行调用。这是我的Jenkinsfile: pipeline { agent any stages { stage('install node modules...') { agent { docker 'node' } steps { sh 'cd /path/to/package.json; yarn install' } } } } 很简单吧? jenkins用户/组为112:116,节点容器的uid为1000,因此yarn进程(作为节点用户1000运行)无法执行其操作,例如mkdir /.config。 我试图旋转传入参数的节点容器-u 1000,在尝试创建持久目录时遇到了权限问题。 看起来像是另一种问题,我该如何解决? 詹金斯日志: 下面是构建开始和失败的地方。 [Pipeline] sh [Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script + docker inspect -f . node . …

1
詹金斯管道工作;正确引用slackSend步骤
这可能是100%用户错误,但是在slackSend步骤中,我无法获得管道作业来使用变量作为通道名称。 这同时使用了Slack插件和Build User Vars插件。我试图用来BUILD_USER_FIRST_NAME确定Slack退回到哪个渠道(即,开始构建的渠道应该是获取消息的渠道)。 这篇文章半路介绍了如何在管道作业中使用构建用户插件,但是替换变量让我大跌眼镜。 工作的相关部分如下所示; stage ('message') { wrap([$class: 'BuildUser']) { sh "printf '%s' ${BUILD_USER_FIRST_NAME} > name.txt" } archiveArtifacts artifacts: 'name.txt' name = readFile('name.txt') echo "name is $name" //works fine, I get Alex if ( "$output" != null ) { slackSend (channel: '@$name', color: '#36A64F', message: "Job succeeded") } …

2
我可以重命名RDS实例吗?
我继承了具有随机(无用)数据库实例名称的RDS MySQL实例集合。 我经常必须深入标签部分来找出它们属于哪个项目。 我可以在RDS中修改的设置之一是DB Instance Identifier。 如果更改此名称,除了更改名称还会发生什么?它会影响任何人的代码吗?还是无害的变化? 这些是我无法承受的实时系统。
11 amazon-rds 

3
如何在Vagrant多机设置中配置SSH密钥?
我的Vagrantfile中有4个VM-3个应用程序服务器和一个Ansible控制主机。 我只使用Vagrant来创建VM,因为我仍在创建/编辑Ansible脚本时,从Ansible控制主机手动配置它们。 我可以执行其他操作vagrant ssh ansible,vagrant ssh app1/2/3但是当我尝试ansible-playbook oracle.yml从Ansible控制主机执行操作时,SSH失败并显示 fatal: [192.168.60.10]: UNREACHABLE! => {"changed": false, "msg": "SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue", "unreachable": true} 我可以使用用户无业游民和密码无业游民成功地将Ansible VM切换到Oracle VM。 我的Vagrantfile的关键部分是: config.ssh.insert_key = …
11 ansible  vagrant 

7
开发人员为什么要关心Docker?
通常,开发人员关心满足业务需求。他/她可能具有特定堆栈或框架中的专业知识。但是他/她是否应该努力学习docker及其各种部署方法(swarm,kube,mesos等)? 简而言之,为什么开发人员应该关心docker? PS:本文的父级问题是向开发团队介绍docker的含义

2
在Jenkins Pipeline中运行Docker时正确的权限设置是什么?
我正在尝试建立一个新的jenkins管道,以测试对我们代码的新请求请求。我在ubuntu:14.04图像上使用docker 来模拟我们的生产环境。 这是一个最小的工作示例: #jenkinsfile stage('Checkout and provision'){ docker.image('ubuntu:14.04').withRun('-u root'){ checkout scm sh 'chmod -R 770 ./' sh './init-script.sh' } } 和 #init-script.sh sudo add-apt-repository ppa:ondrej/php sudo apt-get update -y sudo apt-get dist-upgrade -y sudo apt-get install \ apache2 \ php \ php-mysql \ php-xml \ libapache2-mod-auth-mysql \ libapache2-mod-php \ php5-curl …
11 jenkins  docker 

3
在公共CI和BitBucket等源代码控制存储库上使用Ansible Vault的最佳实践是什么?
介绍 在像Gitlab-ce这样的私有CI和源代码控制存储库上,可以将〜/ .vault_pass.txt复制到服务器,并由CI使用它使用Ansible解密文件。 问题 在公共CI和Bitbucket之类的源代码控制存储库上,无法将〜/ .vault_pass.txt复制到它自己的CI服务器上。 讨论区 在Bitbucket中可以定义加密的变量,但是当选中此文件时,唯一与VAULT相关的变量是: ANSIBLE_ASK_VAULT_PASS ANSIBLE_VAULT_PASSWORD_FILE 这些变量不是解决此问题的选项,因为ANSIBLE_ASK_VAULT_PASS设置时ansible-vault仍会提示: user@host $ Vault password: 当输入相同的密码时,它可以打开加密的文件,但是目的是在不需要文件或在提示中输入密码的情况下打开文件。 解决该问题的另一种尝试正在运行export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>,但是交互模式仍然存在。 另一个选择是export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt,但是随后需要将此文件推送到存储库,但是源代码控制存储库不应包含密码。

2
用于存储每个环境配置的工具
我需要在每个环境中将配置信息存储在工具中。 这是一个带有GUI的工具,用于添加/更新配置值(例如,连接字符串)。这应该具有默认值,并且能够根据不同的环境进行更改。 应该有一个API,可以在部署到特定环境以添加到应用程序期间检索这些配置值。 我搜索了一段时间,找不到适合此账单的任何工具。有什么建议吗? 注意:当前设置在TeamCity变量中,并且通过PowerShell脚本进行部署。

1
如何为服务限制警告设置AWS Trusted Advisor警报?
我一生只想让AWS在任何Trusted Advisor的服务限制变为WARN或ERROR状态时向我发送电子邮件。我检查了他们的指南,尝试与支持人员聊天,没有人能做到这一点,所以我在这里伸出援手。 用例 我们启动了许多EC2实例和CloudFormation堆栈,并且所有内容都使用了大量资源。不知何故,我们总是在验证冲刺过程中达到一个未知的极限,最终被阻塞了一个小时,而AWS则花费了宝贵的时间来突破极限。我想设置一种事件,以便在接近服务限制之一的情况下向devop发送电子邮件。我对它的检查频率不高,每周检查一次,但如果可以的话,最好每天检查一次。 尝试次数 我尝试设置CloudWatch Event,但是唯一可以得到的选择是刷新服务限制时给我们发送电子邮件-这是没有用的,因为那样的话,您已经在此处手动查看了,并且电子邮件中没有任何意义。 选件 支持人员告诉我,AWS内部对此功能没有默认功能,因此我正在寻找自定义事件选项,或者如果可能的话,我也会接受利用Jenkins2和AWS CLI的支持。如果Jenkins是解决之道,则无需发送电子邮件-如果可以更改答案,我可能会拖延我们的devops渠道。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.