Sign inSign up

wyvern8/github-task-manager

By wyvern8

•Updated over 8 years ago

!!!!!!!!!!! MOVED TO https://hub.docker.com/r/zotoio/github-task-manager/ - this will be deleted.

Image
1

10K+

wyvern8/github-task-manager repository overview

⁠github-task-manager

npm version Build Status Code Climate Test Coverage Greenkeeper badge Commitizen friendly semantic-release Docker Build Status

receive github hook, notify agent, receive task results, notify github (Unofficial)

⁠Aims

Create an asynchronous CI agnostic mechanism for running custom test stage gates for github pull requests.

  • allow team leads to configure task sequences without leaving github
  • allow developers to see output from tasks without leaving github
  • trigger multiple jobs in parallel and indicate pending status on pr checks
  • then add results for each back to pull request check/comments as they complete
  • make extensible for other github event handling
  • stateless and deployable to Kubernetes at scale

⁠Design

  • Deploy two functions to lambda via serverless framework ('gtmGithubHook', 'gtmGithubResults')
  • github PR open hook pointed at 'gtmGithubHook' lambda which adds event to a 'PendingQueue' SQS queue
  • agent(s) watch SQS for new test execution jobs
  • agent notifies 'ResultsQueue' SQS queue that a task has started (lambda updates github PR state)
  • agent triggers CI PR build, deploy and tests (plugin for each CI type)
  • agent formats and adds test results to 'ResultsQueue' SQS queue
  • agent notifies SNS topic which triggers 'gtmGithubResults' lambda
  • 'gtmGithubResults' lambda posts results to github pull request.

flow

⁠Install

Environment variabledescription
GTM_AWS_REGIONawsregion to create resources in
GTM_SQS_PENDING_QUEUEname of SQS queue for new event
GTM_SQS_RESULTS_QUEUEname of SQS queue for results
GTM_SNS_RESULTS_TOPICname of SNS topic for result ping
GTM_GITHUB_WEBHOOK_SECRETshared secret from github webook config
GTM_GITHUB_TOKENaccess token for accessing github
GTM_GITHUB_TOKEN_FUNCTIONAL_TESTSaccess token for individual test type. each task type can have a different token
GTM_GITHUB_HOSTapi hostname can be updated for github enterprise
GTM_GITHUB_DEBUGdebug mode for api calls
GTM_GITHUB_TIMEOUTgithub api timeout
GTM_GITHUB_PATH_PREFIXpath prefix for github enterprise
GTM_GITHUB_PROXYgithub api client proxy
GTM_TASK_CONFIG_FILENAMEfilename in repo to look for for task config - default is .githubTaskManager
GTM_AWS_ACCESS_KEY_IDaws key id - for agent only
GTM_AWS_SECRET_ACCESS_KEYaws secret - for agent only
AWS_PROXYURL of proxy to use for network requests. Optional
GTM_AGENT_PORTdefaults to 9091
GTM_AGENT_AWS_ACCESS_KEY_IDaccess key for agent
GTM_AGENT_AWS_SECRET_ACCESS_KEYsecret key for agent
GTM_JENKINS_USERlogin for jenkins executor
GTM_JENKINS_URLurl executor uses to talk to jenkins
GTM_JENKINS_CSRFis csrf enabled? true or false
GTM_TEAMCITY_USERteamcity executor user
GTM_TEAMCITY_PASSCODEteamcity executor passcode
GTM_TEAMCITY_URLteamcity api url
GTM_DOCKER_IMAGE_WHITELISTcomma separated list of regex of allows docker images eg. alpine:*,bash:latest
GTM_DOCKER_IMAGE_WHITELIST_FILEuse an optional docker whitelist file .dockerImageWhitelistExample
GTM_DOCKER_COMMANDS_ALLOWEDdefault is false, set to true to enable docker executor
GTM_DOCKER_ALLOW_PULLallow agent to pull from registry
GTM_DOCKER_DEFAULT_WORKER_IMAGEfor running ci tasks, default is zotoio/gtm-worker:latest
IAM_ENABLEDagent host uses IAM ?
LAUNCHDARKLY_API_TOKENtoken for launchdarkly sass executor
GTM_LOGSTASH_HOSToptional logstash host for elasticsearch analysis
GTM_LOGSTASH_PORToptional logstash port
GTM_SONAR_HOST_URLsonar host url to connect to
GTM_SONAR_LOGINsonar access token
GTM_SONAR_PROJECTNAME_PREFIXprefix if reporting to sonarqube
GTM_SONAR_ANALYSIS_MODEmode for sonar runner, default preview for PRs
GTM_SONAR_GITHUB_OAUTHgithub token for sonar to post comments and status
GTM_SONAR_SOURCESdefault source dir is src
GTM_SONAR_JAVA_BINARIESdefault is target
GTM_SONAR_MODULEScomma separated modules
GTM_SONAR_GITHUB_ENDPOINToptional enterprise github api url
GTM_TASK_CONFIG_DEFAULT_URLurl to default sample config used when repo is missing .githubTaskManager.json
GTM_TASK_CONFIG_DEFAULT_MESSAGE_PATHpath to markdown comment file added to PRs when repo is missing .githubTaskManager.json

⁠Configure and deploy

  • run: npm run sls-deploy - note that this will create aws re$ources..
  • capture the hook url output in console and add to github repo pull request conf
  • run: npm run sls-logs-hook or npm run sls-logs-results to tail the logs
  • create a .githubTaskManager.json in your repo per https://github.com/wyvern8/github-task-manager/wiki/Creating-a-Task-Configuration⁠
  • start an agent locally using npm run build && npm start agent (or use docker/k8s)
  • create a pull request and confirm the hook is being hit and agent processes event

⁠Docker and Kubernetes agents

You can run the latest image from docker hub: https://hub.docker.com/r/wyvern8/github-task-manager⁠

npm run docker-hub-run

..or run using the local checkout and tail logs:

npm run docker-local-bounce

..or if you have a k8s cluster and kubectl configured:

npm run k8s-apply
npm run k8s-delete

note that these k8s npm script inject vars from .env into the manifest

k8s

a starting point k8s manifest is in ./k8s/k8s-gtm-agent.yml

⁠Agent Configuration

⁠Running the Agent

The agent uses environment variables to configure itself as well as any executors running within it. The below environment variables are required for basic operation of the GTM Agent.

TODO: Provide Variables

⁠Agent Homepage

The GTM Agent provides an information page summarising the ongoing operation of the agent. The page is available on port 9091 by default.

⁠Plugins

Task executors for Jenkins, Teamcity, Travis, Http, Docker are in progress. Custom task executors can be added by adding this project as a dependency, and registering new Executors and EventHandlers. Please see https://github.com/wyvern8/gtm-agent⁠ for an example that you can fork and modify as required while still using this project as the core.

  • Executors contain the logic to run tasks against a given system type, and format the results.
  • EventHandlers are used to map Github events to specific functionality such as pull requests.

⁠Contributing

Fork this repository and work on your enhancements, then send a pull request. If you build custom plugins that may be useful to others in your forked gtm-agent, please let us know and may be able to assist wwith backporting to this project.

Use commitizen for conventional commit messages via git cz instead of git commit.
To setup if not already installed:

npm install -g commitizen
npm install -g cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

..or you can just use npm run commit which will use local commitizen install.

Tag summary

Content type

Image

Digest

Size

338.8 MB

Last updated

over 8 years ago

docker pull wyvern8/github-task-manager