Upgrade to Pro — share decks privately, control downloads, hide ads and more …

淺談開發與DevOps

LINE Developers Taiwan
October 17, 2023
250

 淺談開發與DevOps

Speaker: Eric Huang
Event: APCS camp 企業參訪

LINE Developers Taiwan

October 17, 2023
Tweet

Transcript

  1. 淺談開發與
    DevOps

    View full-size slide

  2. 01
    02
    03
    04
    確保開發環境跟部署環境
    ⾃⾝經驗分享
    開發
    確保部署的自動化及穩定性
    DevOps
    開發經驗問題
    05 Q&A
    CONTENT

    View full-size slide

  3. 01
    開發經驗問題

    View full-size slide

  4. 問題
    1. 有開發程式並給別⼈使⽤經驗嗎?
    2. 這些程式如何部署的?
    3. 有沒有團隊開發過?

    View full-size slide

  5. 02
    ⾃⾝經驗分享

    View full-size slide

  6. Eric Huang
    SRE
    2020 年份 : 台積電
    2021 年份 : ⽟⼭銀⾏
    2022 年份 : LINE

    View full-size slide

  7. 經驗分享
    • 在交⼤資⼯系計中曾擔任過助教
    • 有過些許的open source開發經驗

    View full-size slide

  8. 有沒有遇過...
    1. 怎麼在我電腦跑起來沒問題,到了部署環境卻出事...
    ○ 確保開發環境跟部署環境
    2. 明明我的電腦可以順利跑,到了你的電腦卻有問題...
    ○ 確保團隊的開發環境一致性

    View full-size slide

  9. 確保開發環境跟部署環境
    • ⼤家都配Mac開發就沒這困擾
    • 絕⼤部分的app都是被部署到Linux系統上,何不⼀開始就在Linux上開發?
    • 在OS上跑Linux的VM開發
    • 在OS跑開發專⽤的container (e.g., Docker)

    View full-size slide

  10. container簡介
    • container可以視為⼀種輕量級的app,運⾏在OS之上
    • 主流的container runtime (負責掌管container的manager,例如:Docker及
    containerd)都⽀援MacOS, Linux及Windows
    • container底層是⽤Linux kernel的技術實現,做到環境隔離以及資源限制
    • container可以預先安裝開發需要使⽤的的library, CLI等,也可以獨立運⾏app

    被⼤量使⽤在開發以及部署當中,為cloud native的基礎

    View full-size slide

  11. Dockerfile 範例
    FROM python:3.11-buster
    WORKDIR /app
    COPY requirements.txt ./
    RUN pip install --no-cache-dir -r requirements.txt --user
    COPY . /app
    CMD [ "python", "app.py" ]

    View full-size slide

  12. container好處多多,但不是萬能
    • container只能解決app內部環境問題
    • 如果需要跟外部溝通(DB, API等),就要確保container runtime的本機上的設定也⼀樣。
    實際案例:
    • container的DNS resolve
    如果host上的DNS name server不⼀樣就會有問題

    View full-size slide

  13. 有沒有遇過...
    1. 很喜歡開發,但到了要部署程式⼀切都要⾃⼰來,深怕少⼀些步驟
    ○ 確保部署(CD)的自動化及穩定性
    2. 部署之前想要跑⼀些測試,如果ok再進版,但每次都忘記跑
    ○ 自動整合(CI)的設計與實作

    View full-size slide

  14. 確保部署的⾃動化及穩定性
    ● 本地端build好程式,搬到機器上再設定環境跑起來
    ● 寫腳本登機器部署程式,例如Ansible
    ● 利⽤Gitlab及GitHub的CI/CD⼯具在runner上協助部署

    View full-size slide

  15. 便宜有效的CI/CD⼯具
    • GitHub及Gitlab提供價格實惠,甚⾄免費的⽅式,讓開發者可以⾃由定義流程,決
    定CI/CD各個階段該做的事
    • 通常⽤YAML定義⼯作流程,可以做到lint, test, build及deploy等⾃動化流程
    • CI/CD的runner可以是cloud,也可以是self-hosted runner

    View full-size slide

  16. pipeline範例
    steps:
    - name: Checkout
    uses: actions/checkout@v3
    - name: Login to Harbor registry
    uses: docker/login-action@v2
    with:
    registry: ${{ env.DOCKER_REGISTRY }}
    username: ${{ secrets.HARBOR_ACCOUNT }}
    password: ${{ secrets.HARBOR_PASSWORD }}

    View full-size slide

  17. pipeline範例(cont’d)
    - name: Docker meta
    id: meta
    uses: docker/metadata-action@v4
    with:
    images: ${{ env.DOCKER_IMAGE_REPO }}
    - name: Build the Docker image
    uses: docker/build-push-action@v4
    with:
    context: .
    file: Dockerfile
    push: true
    tags: |
    ${{ env.DOCKER_IMAGE_REPO }}/slackio-bot:${{ github.ref_name }}

    View full-size slide