[github] self-hosted runner

self-hosted runner 실행을 위해서 github 도움말에는 다음과 같이 안내하고 있다.

mkdir actions-runner && cd actions-runner

curl -o actions-runner-linux-x64-2.285.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.285.1/actions-runner-linux-x64-2.285.1.tar.gz

echo "5fd98e1009ed13783d17cc73f13ea9a55f21b45ced915ed610d00668b165d3b2  actions-runner-linux-x64-2.285.1.tar.gz" | shasum -a 256 -c

tar xzf ./actions-runner-linux-x64-2.285.1.tar.gz

./config.sh --url https://github.com/dasomoli/repository --token TOKENTOKENTOKENTOKEN

./run.sh

여기서 config.sh 에 넘기는 토큰은 REST API를 사용하는 다음 명령어로 얻을 수 있다.

curl \
  -u USER_NAME:YOUR_PERSONAL_ACCESS_TOKEN -X POST \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/USER_NAME/REPO_NAME/actions/runners/registration-token

다음과 같이 jq를 이용해서 .token 값을 가져와서 쉘 변수 내에 설정하는 것도 가능하다.

RUNNER_TOKEN="$(curl -XPOST -fsSL \
        -H "Authorization: token YOUR_PERSONAL_ACCESS_TOKEN" \
        -H "Accept: application/vnd.github.v3+json" \
        "https://api.github.com/repos/USER_NAME/REPO_NAME/actions/runners/registration-token" \
        | jq -r '.token')"

config.shbin/installdependencies.sh 를 실행하고, 나중에 Runner.Listner를 실행한다. 이 때 넘기는 인자는 bin/Runner.Listener configure 뒤에 인자로 넘어간다. config.sh의 다음 줄에서 확인할 수 있다.

 77 if [[ "$1" == "remove" ]]; then
 78     ./bin/Runner.Listener "$@"
 79 else
 80     ./bin/Runner.Listener configure "$@"
 81 fi

systemd를 사용하는 리눅스 시스템의 경우 서비스로 설치해서 사용하려면 다음과 같이 하면 된다고 한다.

sudo ./svc.sh install

sudo ./svc.sh start

[QuickBuild] RESTful API로 빌드 요청

QuickBuild를 이용할 때, 굳이 사이트에 접속해서 빌드를 돌리지 않아도 RESTful API를 이용하면 빌드를 걸 수 있다.

http://wiki.pmease.com/display/QB61/Interact+with+Build+Requests#InteractwithBuildRequests-requestnewbuild 에 해당 내용이 정리되어 있다.

Basic authentication 시에 curl을 이용해서 요청하는 방법은 다음과 같다.

$ curl -X POST -u dasomoli:password -d@request.xml http://<Server>:8810/rest/build_requests

위의 예제에서 사용한 request.xml 은 다음의 형식을 가진다. <varlables> 안에 채울 내용은 해당 configuration에서 실행한 빌드의 variables(http://<Server>:8810/build/<Build id>/variables) 페이지에서 확인 가능하다.

<com.pmease.quickbuild.BuildRequest>
  <!-- This element tells QuickBuild in what configuration to trigger build. -->
  <configurationId>10</configurationId>

  <!-- This element tells whether or not to respect build condition of the configuration. 
       If this is set to true, and if the build condition evaluates to false, build will 
       not be triggered. -->
  <respectBuildCondition>false</respectBuildCondition>

  <!-- This element is optional and is used to specify variables for build triggering. If 
       specified, it will override the variable with the same name defined in configuration
       basic setting. -->
  <variables>
    <entry>
      <string>var_name1</string>
      <string>var_value1</string>
    </entry>
    <entry>
      <string>var_name2</string>
      <string>var_value2</string>
    </entry>
  </variables>

  <!-- This element is optional and is used to tell QuickBuild to request a build promotion. -->
  <promotionSource>

    <!-- This element is optional and is used to tell QuickBuild that the source build resides on another 
         QuickBuild server. -->
    <server>
      <url>http://another-qb-server:8810</url>
      <userName>admin</userName>
      <password>admin</password>
    </server>

    <!-- Identifier of the source build to promote from -->
    <buildId>697</buildId>

    <!-- This element is optional and used to specify files to promote -->
    <deliveries>
      <com.pmease.quickbuild.FileDelivery>
        <srcPath>artifacts/dir1</srcPath>
        <filePatterns>**/*.jar</filePatterns>
      </com.pmease.quickbuild.FileDelivery>
      <com.pmease.quickbuild.FileDelivery>
        <srcPath>artifacts/dir2</srcPath>
        <filePatterns>**/*.war</filePatterns>
      </com.pmease.quickbuild.FileDelivery>
    </deliveries>
  </promotionSource>

</com.pmease.quickbuild.BuildRequest>

Sample XML의 comment에서 확인할 수 있듯이 <promotionSource>내부는 생략 가능하다.