Linux中國

在 Fedora CoreOS 上運行 GitHub Actions

GitHub Actions 是一項為快速建立持續集成和交付(CI/CD)工作流程而提供的服務。這些工作流程在被稱為「 運行器 runner 」的主機上運行。GitHub 提供的 託管運行器 的操作系統的選擇是有限的(Windows Server、Ubuntu、MacOS)。

另一個選擇是使用 自託管 的運行器,這讓倉庫管理員對運行器有更多控制。自託管的運行程序是專門為某個存儲庫或組織服務的。下面的文章介紹了使用 Fedora CoreOS 配置自託管運行程序的步驟。

入門

Fedora CoreOS 是一個精簡的操作系統,旨在便於大規模的部署和維護。該操作系統會自動更新,並默認提供運行容器所需的工具。由於這些原因,Fedora CoreOS 是運行 CI/CD 工作流程的一個極佳選擇。

配置和配備 Fedora CoreOS 機器的第一步是生成一個 Ignition 文件。Butane 允許你使用更友好的格式(YAML)生成 Ignition 文件。

配置一個 Fedora CoreOS 運行器

要在 Fedora CoreOS 上執行 GitHub Actions,託管主機需要用於註冊和運行該運行器的二進位文件和腳本。從 Actions 運行器項目 下載二進位文件和腳本,並部署在 /usr/local/sbin/actions-runner 下。

version: "1.3.0"
variant: fcos
storage:
  directories:
    - path: /usr/local/sbin/actions-runner
      mode: 0755
      user:
        name: core
      group:
        name: core
  files:
    - path: /usr/local/sbin/actions-runner/actions-runner-linux.tar.gz
      overwrite: true
      contents:
        source: https://github.com/actions/runner/releases/download/v2.278.0/actions-runner-linux-x64-2.278.0.tar.gz
      mode: 0755
      user:
        name: core
      group:
        name: core

註冊和刪除令牌

為一個項目配置運行器需要一個「 令牌 token 」。這可以防止在沒有正確許可權的情況下從項目中註冊或刪除自託管的運行器。GitHub 提供的令牌有一個小時的過期時間。如果運行器在這個時間之後重新啟動,它將需要一個新的註冊令牌。

該令牌可能出問題,特別是在 Fedora CoreOS 自動更新時。更新過程希望託管主機在收到新數據後至少每隔幾周重啟一次。

幸運的是,可以使用 GitHub REST API 來獲取這些令牌,並在託管主機每次重啟時自動配置運行器。下面的 manage-runner.sh 腳本使用 API 來獲取令牌,刪除任何已經配置好的運行器,並用新的令牌註冊運行器。

#!/bin/bash
# Handles the Github Action runner configuration.
# Remove and Registration token expires after 1 hour, if we want our runner
# to work after a reboot (auto update) we need to refresh the tokens.

# First remove the runner with a fresh remove token
REMOVE_TOKEN=$(curl -u ${GITHUB_USER}:${GITHUB_TOKEN} -X POST -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/${GITHUB_USER}/${GITHUB_REPO}/actions/runners/remove-token | jq -r '.token')
/usr/local/sbin/actions-runner/config.sh remove --token ${REMOVE_TOKEN}

# Then register the runner with a fresh registration token
REGISTRATION_TOKEN=$(curl -u ${GITHUB_USER}:${GITHUB_TOKEN} -X POST -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/${GITHUB_USER}/${GITHUB_REPO}/actions/runners/registration-token | jq -r '.token')
/usr/local/sbin/actions-runner/config.sh --url https://github.com/cverna/fcos-actions-runner --token ${REGISTRATION_TOKEN} --labels fcos --unattended

上面的腳本使用了一些環境變數,包含 GitHub 用戶名和用於驗證 REST API 請求的 個人訪問令牌 Personal Access Token 。個人訪問令牌需要存儲庫許可權,以便成功檢索運行器的註冊和移除令牌。該令牌是安全敏感信息,所以最好將其存儲在一個具有更嚴格許可權的不同文件中。在這個例子中,這個文件是 actions-runner

GITHUB_USER=<user>
GITHUB_REPO=<repo>
GITHUB_TOKEN=<personal_access_token>

以下是創建這兩個文件 manage-runner.shactions-runner 的 Butane 片段。

- path: /usr/local/sbin/actions-runner/manage-runner.sh
      contents:
        local: manage-runner.sh
      mode: 0755
      user:
        name: core
      group:
        name: core
    - path: /etc/actions-runner
      contents:
        local: actions-runner
      mode: 0700
      user:
        name: core
      group:
        name: core

在 Fedora CoreOS 上運行 Actions

最後,創建用於配置和啟動運行器的 systemd 服務。在 Butane 配置文件中定義這些服務。

systemd:
  units:
    - name: github-runner-configure.service
      enabled: true
      contents: |
        [Unit]
        Description=Configure the github action runner for a repository
        After=network-online.target boot-complete.target
        Requires=boot-complete.target
        [Service]
        EnvironmentFile=/etc/actions-runner
        Type=oneshot
        RemainAfterExit=yes
        User=core
        WorkingDirectory=/usr/local/sbin/actions-runner
        ExecStartPre=tar xvf actions-runner-linux.tar.gz --no-same-owner
        ExecStart=/usr/local/sbin/actions-runner/manage-runner.sh
        [Install]
        WantedBy=multi-user.target
    - name: github-runner.service
      enabled: true
      contents: |
        [Unit]
        Description=Run the github action runner
        After=github-runner-configure.service
        [Service]
        WorkingDirectory=/usr/local/sbin/actions-runner
        User=core
        ExecStart=/usr/local/sbin/actions-runner/run.sh
        [Install]
        WantedBy=multi-user.target

這將創建兩個服務:github-runner-configure.service(在主機啟動完成後運行一次)和 github-runner.service(運行 Actions 運行器二進位文件並等待新的 CI/CD 作業)。

現在 Butane 配置已經完成,從中生成一個 Ignition 文件並配備一個 Fedora CoreOS Actions 運行器。

$ podman run -i --rm -v $PWD:/code:z --workdir /code quay.io/coreos/butane:release --pretty --strict --files-dir /code config.yaml -o config.ignition

一旦 Ignition 文件生成,它就可以用來在 支持 Fedora CoreOS 的平台上配備一個運行器。

配置一個 Action 來使用一個自託管的運行器

下面的測試 Action 工作流程將測試 FCOS 的自託管的運行器。在你的 git 存儲庫中創建以下文件 .github/workflows/main.yml

# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run.
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: fcos

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Runs a single command using the runners shell
      - name: Run a one-line script
        run: podman run --rm fedora-minimal:34 echo Hello World !

請注意,runs-on 的配置被設置為使用標籤為 fcos 的運行器。

本文介紹的代碼可以在 這裡 中找到。

via: https://fedoramagazine.org/run-github-actions-on-fedora-coreos/

作者:Clément Verna 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國