Record your life!
DashboardMy Blogs
一些新知识
Blog
cicd
By sakopqiu2025-12-02 03:27

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在命令行传入
Edit