Github action
name: Hello world workflow
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
jobs:
hello:
runs-on: ubuntu-latest
steps:
- name: Say Hello
run: echo "Hello, world12345!"
shell: bash
- uses: actions/checkout@v3
- name: List files
run: ls -la
shell: bash
- name: Hello world action step
id: hello
uses: ./
with:
who-to-greet: Mona the Octocat
# Use the output from the `hello` step
- name: Get the output time
run: echo "The time was ${{ steps.hello.outputs.time }}"
- name: Hello world action step with error yeah
id: hello2
uses: ./
with:
who-to-greet: aa
goodby:
runs-on: ubuntu-latest
steps:
- name: Say Goodbye
run: echo "Goodbye, world!"
shell: bash
Packer
- 不错的教程
- 可以在AWS,GCP,AZure,DockerHub等多个平台去构建镜像的工具。比如AWS上可以基于一个基础AMI构建,他会新起一个镜像(amazon-esb模式),或者基于当前正在运行的EC2实例(amazon-instance)构建一个新的AMI镜像。
- pakcer三个核心概念,Builder(即第一条),Provisioner(修改镜像,比如通过执行shell命令,通过file把本地文件cp到镜像中), 以及post-processor,比如manifest(把镜像细节导出到一个json),vagrant(构建vagrant能打开的镜像)
- 注意不同AMI镜像的用户(User)不一样,比如Ubuntu镜像的用户就是ubuntu,执行shell或者file类型的provisioner时,默认的用户就是Ubuntu。假设说,AMI启动后如果目录是root权限的,普通的ubuntu用户是没法访问的,这个时候可以先用file provisioner把文件copy到一个公共目录(比如/tmp),然后用shell执行sudo move即可
- 可以在packer的json文件里定义变量,引用环境变量等
- 对于AWS来说,既可以把app_key和secret写在json文件里,也可以定义在环境变量里(比如.zshrc),也可以放在~/.aws/credentials文件里
Terraform
- Terraform output可以把一些aws对象的细节打印出来,
terraform apply的最后,或者terraform output 。在tf文件里改动output后,不一定执行apply命令,这样对线上太危险,可以执行refresh命令
- Terraform 可以把变量定义在terraform.tfvar文件,也可以在源文件里指定default,也可以通过--var在命令行传入