Github 작업을 사용하여 트윗 보내기

9030 단어 automationnodegithub
최근에 저는 12년 이상 사용해 온 트위터 계정을 폐기했습니다. 오늘부터 더 이상 사용되지 않는 계정이 계속 실행 중입니다. 핸들을 업데이트하고 . 초창기에는 지금은 믿지 않고 그 짐을 지고 싶지 않은 많은 것들에 대해 트윗을 많이 했습니다. 다른 계정으로 이동한다는 의미는 팔로워 0명과 신용도 0명을 의미하는 새로 시작해야 한다는 의미입니다. 그래서 내 계정을 비활성화하기 전에 이전 계정의 팔로워에게 내 계정이 변경되었음을 알리는 알림을 보내고 싶었습니다.

시간 기반 작업을 실행하려면 사용 가능한 가장 일반적인 솔루션은 cron(또는 cron 작업)이지만 이러한 작업을 예약하고 실행할 서버가 필요합니다. 서버 설정은 하루에 한 번만 트윗을 보내는 제 사용 사례에 비해 너무 많은 작업이었기 때문에 차선책으로 선택했습니다: Github Actions . Github Actions는 주로 다양한 Github 이벤트 또는 cron 일정을 기반으로 실행할 작업을 설정하는 CI/CD에 사용됩니다. 제한된 사용을 위해 매일 정확히 하나의 트윗을 보내도록 작업을 예약할 수 있으며 무료 사용 제한 내에 있기 때문에 비용이 들지 않습니다.

나는 실행할 때 내가 계정을 비활성화할 계획인 10월 25일까지의 일 수를 계산하는 메시지가 포함된 트윗을 보내는 Node.js 스크립트를 작성했습니다.

const Twit = require('twit');
const {
  CONSUMER_KEY,
  CONSUMER_SECRET,
  ACCESS_TOKEN,
  ACCESS_TOKEN_SECRET,
} = process.env;

const T = new Twit({
  consumer_key: CONSUMER_KEY,
  consumer_secret: CONSUMER_SECRET,
  access_token: ACCESS_TOKEN,
  access_token_secret: ACCESS_TOKEN_SECRET,
});

const daysToDeletion = 25 - new Date().getDate();

const message = `👋 Hey there folks!.
This is an automated message 🤖 to remind you that this account has been renamed to @_skippednote and will be deactivated in the next ${daysToDeletion} days.
I've moved to @skippednote, you can come follow me there ♥️`;

(async function main() {
  try {
    await T.post('statuses/update', { status: message });
    console.log('Successfully posted the tweet!');
  } catch (e) {
    console.log('Failed to post the tweet!');
    console.log(e.message);
  }
})();


저는 Twitter v1.1 API와 함께 사용하고 약속 및 콜백 기반 메서드를 모두 지원하는 Twit 노드 모듈을 사용하고 있습니다. 여기서 흥미로운 점은 환경 변수가 정의되는 방법과 위치입니다. 그러면 보안 위험이 되기 때문에 파일에 넣지 않습니다. 다른 CI/CD 시스템과 마찬가지로 Github Actions를 사용하면 리포지토리 설정을 통해 비밀(환경 변수)을 추가할 수 있습니다.



Github 작업을 설정하려면 리포지토리 루트에 .github 디렉토리를 생성해야 하며 그 안에 다양한 Github 작업을 기반으로 실행될 작업이 포함된 workflows 디렉토리를 생성합니다. .github/workflows 디렉토리 아래의 파일 이름은 yaml 파일인 한 중요하지 않습니다. 우리의 경우 작업이 일정에 따라 실행되기를 원하므로 이름을 .github/workflows/cronjob.yml 로 지정했습니다.

name: Twitter message

on:
  schedule:
    - cron: '15 6 * * *'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node_version: '12'
      - name: Install Node modules
        run: npm i
      - name: Tweet message
        run: node tweet.js
        env:
          CONSUMER_KEY: ${{ secrets.CONSUMER_KEY }}
          CONSUMER_SECRET: ${{ secrets.CONSUMER_SECRET }}
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }}


Github 작업 페이지에 name 속성이 표시되어 작업을 쉽게 찾을 수 있습니다. 우리는 이것을 Twitter 메시지라고 불렀기 때문에 왼쪽 사이드바의 아래 스크린샷에서 같은 이름의 워크플로가 있음을 볼 수 있습니다.


on 키를 누르면 cron 일정에 따라 작업을 실행할 수 있습니다. 우리는 매일 오전 6시 15분에 한 번 Github 작업을 실행하기까지 합니다. Github Actions는 UTC 시간대를 사용하도록 구성되어 있다는 점에 유의해야 합니다.

파일의 job 섹션에서 최신 Ubuntu 릴리스를 사용하도록 환경을 설정한 다음 사전 구성 작업을 사용하여 다음을 수행합니다.
  • 저장소 체크아웃
  • Node.js 버전 12 설정
  • 이전에 만든 스크립트를 실행하여 트윗을 보냅니다.
  • 여기에서는 설정 페이지에서 정의한 비밀을 env를 사용하여 작업에 노출하고 있습니다.




  • 빌드가 실행되면 생성된 메시지와 함께 트윗이 전송됩니다.

    좋은 웹페이지 즐겨찾기