我正在从我的 github 工作流程(操作)发出一个 curl 发布请求,以获取自托管运行器的注册令牌,但我收到以下响应:
{
"message": "Resource not accessible by integration",
"documentation_url": "https://docs.github.com/rest/reference/actions#create-a-registration-token-for-a-repository"
}
Run Code Online (Sandbox Code Playgroud)
下面是我的 github 工作流程的精简版本:
name: get-token
"on":
push: { branches: ["token"] }
jobs:
print-token:
name: print-token
environment: dev
# needs: pre-pkr
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Get registration token
id: getRegToken
run: |
curl -X POST -H \"Accept: application/vnd.github.v3+json\" -H 'Authorization: token ${{ secrets.GITHUB_TOKEN }}' https://api.github.com/repos/myprofile/myrepo/actions/runners/registration-token
Run Code Online (Sandbox Code Playgroud)
最终我想将此令牌传递给我使用 packer build 命令创建的 ami(下一步)。我也尝试使用加壳器的 shell 配置程序执行上述curl 请求,但响应相同。无法弄清楚我是否必须允许 github ui 的某些权限?或者还有什么办法可以做到这一点?提前致谢。
我想复制正在运行的EC2实例的磁盘映像(抓住AMI)并将其导入虚拟盒或最终使用Vagrant运行.我看到打包器(http://www.packer.io/)允许你创建AMI和相应的Vagrant盒子一起工作,但是我目前运行的实例已经运行了两年以上并且很难复制.
我想这个问题在devops社区很常见,但是我的在线研究还没有找到解决方案.有没有可以让你完成这项任务的工具?
包装工和码头工人有何不同?提供/维护哪一个更容易/最快?为什么?拥有docker文件的优缺点是什么?
我正在使用带有ansible配置器的打包器来构建一个ami,并使用这个ami作为源来设置基础设施 - 与本文有点类似:http://www.paulstack.co.uk/blog/2016/01/ 02 /建筑物-AN-elasticsearch群集式-AWS与-封隔器和terraform
当命令packer build pack.json
成功完成时,我以这种格式获得输出ami id:
eu-central-1: ami-12345678
Run Code Online (Sandbox Code Playgroud)
在我的terraform变量中,variables.tf
我需要指定源ami id,region等.这里的问题是我不想手动或多次指定它们.对于区域(我事先知道),因为我可以在两种情况下使用环境变量,所以很容易,但是输出ami呢?是否有内置的方式来链接这些产品或一些不那么hacky方法来做到这一点?
编辑: Hacky方法适用于任何可能感兴趣的人.在这个解决方案中,我是grep
来自packer输出的aws region&ami,并在perl中使用正则表达式将结果写入terraform.tfvars
文件:
vars=$(pwd)"/terraform.tfvars"
packer build pack.json | \
tee /dev/tty | \
grep -E -o '\w{2}-\w+-\w{1}: ami-\w+' | \
perl -ne '@parts = split /[:,\s]+/, $_; print "aws_amis." . $parts[0] ." = \"" . $parts[1] . "\"\n"' > ${vars}
Run Code Online (Sandbox Code Playgroud) 我正在尝试按照这些说明使用Packer.io构建基本的AWS镜像.但这对我不起作用.
这是我的模板文件:
{
"variables": {
"aws_access_key": "",
"aws_secret_key": ""
},
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "us-east-1",
"source_ami": "ami-146e2a7c",
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "packer-example {{timestamp}}",
# The following 2 lines don't appear in the tutorial.
# But I had to add them because it said this source AMI
# must be launched inside a VPC.
"vpc_id": "vpc-98765432",
"subnet_id": "subnet-12345678"
}]
}
Run Code Online (Sandbox Code Playgroud)
您会注意到我必须通过在底部添加两条线(对于VPC和子网)来偏离指令.这是因为我不断收到以下错误:
==> amazon-ebs: Error launching source instance: The specified instance type …
Run Code Online (Sandbox Code Playgroud) 我想建立一个没有docker iself的Docker镜像.我看过Packer,但它要求在构建器主机上安装Docker.
我查看了Docker Registry API文档,但这些信息似乎并不存在.
我想这个图像只是一个tarball,但我希望看到格式的完整规范,即需要什么样的格式,并且需要任何元数据文件.我可以尝试从注册表中下载图像并查看其中的内容,但是没有关于如何获取图像本身的信息.
我的项目的想法是实现一个脚本,从我编译的atefacts创建一个图像,并将其上传到注册表.我想将OpenEmbedded用于此目的,基本上这将是对Bitbake的扩展.
我的打包器构建失败,显示以下消息:
sudo: sorry, you must have a tty to run sudo.
Run Code Online (Sandbox Code Playgroud)
我的主机是带有vagrant和virtualbox的Windows 8,我的客人是centos7.在研究它是我的理解,不要求suty的tty是消息的原因.但我有以下内容ks.cfg
:
sed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers
Run Code Online (Sandbox Code Playgroud)
可能问题是我需要在Windows vagrant ssh端设置一些东西,以便创建一个伪造的tty?
这是我第一次去打包机.
我正在使用我下载的打包器构建.
packer.json如下:
{
"variables": {
"version": "{{env `VERSION`}}"
},
"provisioners": [
{
"type": "shell",
"execute_command": "sudo {{.Vars}} sh {{.Path}}",
"scripts": [
"scripts/vagrant.sh",
"scripts/vmtools.sh",
"scripts/cleanup.sh",
"scripts/zerodisk.sh"
]
}
],
"post-processors": [
{
"type": "vagrant",
"output": "INSANEWORKS-CentOS-7.0-x86_64-{{user `version`}}-{{.Provider}}.box"
}
],
"builders": [
{
"type": "virtualbox-iso",
"iso_url": "http://ftp.iij.ad.jp/pub/linux/centos/7/isos/x86_64/CentOS-7-x86_64-NetInstall-1503.iso",
"iso_checksum": "498bb78789ddc7973fe14358822eb1b48521bbaca91c17bd132c7f8c903d79b3",
"iso_checksum_type": "sha256",
"ssh_username": "vagrant",
"ssh_password": "vagrant",
"ssh_wait_timeout": "45m",
"ssh_disable_agent": …
Run Code Online (Sandbox Code Playgroud) 我正在使用AWS Cloudformation为我的Web应用程序设置网络基础结构的许多元素(VPC,安全组,子网,自动调节组等).我希望整个过程自动化.我想点击一个按钮,然后能够启动整个事情.
我已经成功创建了一个Cloudformation模板,用于设置所有这些网络基础架构.但是,EC2实例目前在没有任何所需软件的情况下启动.现在我想弄清楚如何最好地在他们身上获得该软件.
为此,我正在使用Packer.io创建AMI .但有些人反而催促我使用Cloud-Init.我应该使用什么启发式方法来决定将哪些内容融入AMI和/或通过Cloud-Init配置什么?
例如,我想预先配置EC2实例以允许me(saqib
)在没有自己笔记本电脑密码的情况下登录.因此EC2必须有用户.该用户必须具有主目录.并且在该主目录中必须存在.ssh/known_hosts
包含加密代码的文件.我应该将这些目录烘焙到AMI吗?或者我应该使用cloud-init来设置它们?我该如何决定这个和其他类似的案例呢?
packer amazon-web-services cloud-init aws-cloudformation amazon-ami
我有一个shell provisioner
包装机与用户连接到一个盒子vagrant
{
"environment_vars": [
"HOME_DIR=/home/vagrant"
],
"expect_disconnect": true,
"scripts": [
"scripts/foo.sh"
],
"type": "shell"
}
Run Code Online (Sandbox Code Playgroud)
脚本的内容是:
whoami
sudo su
whoami
Run Code Online (Sandbox Code Playgroud)
并且输出奇怪地仍然存在:
whoami
sudo su
whoami
Run Code Online (Sandbox Code Playgroud)
为什么我不能切换到root用户?如何以 root 身份执行语句?请注意,我不想引用所有语句sudo "statement |foo"
,而是像演示的那样全局切换用户sudo su
我正处于需要在启动时为EC2实例提供一些软件包的情况。存在两个(企业/公司)约束:
主要由于第二个约束,我想知道在哪里放置配置的最佳位置。这就是我想出的
在Terraform中提供
正如它指出的那样,我只是在terraform中提供必要的实例。如果我将这些资源打包到模块中,则配置不会“泄漏”。缺点
在Packer中置备
这是基于这样的假设,即Packer允许您在AMI之上进行配置,以便可以“扩展” AMI。另外,此方法仅在AWS中使用,因此不必使用其他构建器。Packer中的资源调配使Terraform代码更加简单,并且Terraform代码的应用将变得更快,因为它只是您启动的AMI。
对我来说,这两种方法都有自己的位置。但是我真正想知道的是,什么时候选择Packer Provisioning而不是Terraform Provisioning?
packer ×10
amazon-ec2 ×2
docker ×2
terraform ×2
vagrant ×2
virtualbox ×2
amazon-ami ×1
bash ×1
cloud-init ×1
dockerfile ×1
ec2-ami ×1
git ×1
openembedded ×1
provisioning ×1
root ×1
shell ×1
sudo ×1
yocto ×1