{"id":23033952,"url":"https://github.com/freenowtech/androidci","last_synced_at":"2026-04-29T18:31:04.177Z","repository":{"id":98690786,"uuid":"136848659","full_name":"freenowtech/AndroidCI","owner":"freenowtech","description":null,"archived":false,"fork":false,"pushed_at":"2019-04-24T20:06:20.000Z","size":1654,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-15T17:40:04.716Z","etag":null,"topics":["android","ci","continuous-integration","docker","mobile"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/freenowtech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-10T22:10:58.000Z","updated_at":"2021-09-30T07:52:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"6c372f1e-6122-461d-9c09-5d522d8ca21c","html_url":"https://github.com/freenowtech/AndroidCI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/freenowtech/AndroidCI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freenowtech%2FAndroidCI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freenowtech%2FAndroidCI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freenowtech%2FAndroidCI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freenowtech%2FAndroidCI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/freenowtech","download_url":"https://codeload.github.com/freenowtech/AndroidCI/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freenowtech%2FAndroidCI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32439064,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T18:12:22.909Z","status":"ssl_error","status_checked_at":"2026-04-29T18:11:33.322Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","ci","continuous-integration","docker","mobile"],"created_at":"2024-12-15T16:28:14.063Z","updated_at":"2026-04-29T18:31:04.157Z","avatar_url":"https://github.com/freenowtech.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# AndroidCI\n\n## CI Architecture\n\n\u003cimg src=\"https://github.com/mytaxi/AndroidCI/blob/master/screenshots/jenkins_architecture.png?raw=true\"\u003e\n\n## Setup Environment\n\n### Docker\n\n* Download [Docker Community Edition](https://store.docker.com/search?offering=community\u0026type=edition)\n\n### Jenkins\n\n* Pull the latest [Jenkins Docker image](https://hub.docker.com/_/jenkins/)\n\n  ```console\n  docker pull jenkins:2.60.3-alpine\n  ```\n\n* Run Jenkins\n\n   Run Jenkins container with a mounted `jenkins_home` volume, all plugins and settings will be persisted.\n   \n   ```console\n   docker run -p 8080:8080 -p 50000:50000 -v $(pwd)/jenkins_home:/var/jenkins_home jenkins:2.60.3-alpine\n   ```\n\n* Get the initial admin password\n\n   ```console\n   docker exec -it `docker ps -aq -f \"ancestor=jenkins:2.60.3-alpine\" -f \"status=running\"` bash -c 'cat /var/jenkins_home/secrets/initialAdminPassword'\n   ```\n\n* Install Plugins (no need if you use persistent volume)\n\n   * [Docker Plugin](https://plugins.jenkins.io/docker-plugin)\n   * [Android Lint](https://plugins.jenkins.io/android-lint)\n\n* Configure Docker Plugin\n\n   Setup guide (from the official plugin web page) is [here](https://wiki.jenkins.io/display/JENKINS/Docker+Plugin).\n\n   **Jenkins** -\u003e **Manage Jenkins** -\u003e **Configure System** -\u003e **Cloud** -\u003e **Add a new cloud** -\u003e **Docker**\n   \n   \u003cimg src=\"https://github.com/mytaxi/AndroidCI/blob/master/screenshots/jenkins_config_cloud_docker.png?raw=true\"\u003e\n   \n   Regarding the **Docker Host URI**, it should be `tcp://\u003cYOUR_DOCKER_HOST_IP_ADDRESS\u003e:2376`\n   \n   For the sake of workshop, we will use the Docker host on the same machine where the Jenkins container is running.  Thus you can use the IP address of your host machine.  Or simply use a DNS name `host.docker.internal` if you're using the latest version of *docker-for-mac* or *docker-for-windows* ([not yet implemented for Linux](https://github.com/docker/for-linux/issues/264)).\n   \n   And then you'll have to listen to the port:\n   \n   ```bash\n   # on macOS\n   brew install socat\n   socat TCP-LISTEN:2376,reuseaddr,fork UNIX-CONNECT:/var/run/docker.sock\n   \n   # on Linux (Debian / Ubuntu)\n   # changing DOCKER_OPTS is optional\n   # Use DOCKER_OPTS to modify the daemon startup options\n   # echo -e '\\nDOCKER_OPTS=\"-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock\"\\n' | sudo tee --append /etc/default/docker \u003e /dev/null\n   # find the location of systemd unit file\n   systemctl status docker\n   #=\u003e docker.service - Docker Application Container Engine\n   #=\u003e Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)\n   sudo sed -i.bak 's?ExecStart.*?ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock?g' /lib/systemd/system/docker.service\n   sudo systemctl daemon-reload\n   sudo systemctl restart docker.service\n   # check if the port is listened or not\n   sudo netstat -tulpn | grep LISTEN\n   ```\n   \n   Finally, you can click **Docker Agent templates...** -\u003e **Add Docker Template**\n   \n   \u003cimg src=\"https://github.com/mytaxi/AndroidCI/blob/master/screenshots/jenkins_config_docker_agent_template.png?raw=true\"\u003e\n\n* SSH authentication\n\n   Create a new bash session to the Jenkins container\n   \n   ```console\n   docker exec -it $(docker ps -aq -f \"ancestor=jenkins:2.60.3-alpine\" -f \"status=running\") bash\n   ```\n   \n   Generate a new SSH key\n   \n   ```console\n   yes y | ssh-keygen -t rsa -N \"\" -b 4096 -C \"your_email@example.com\"\n   ```\n   \n   The keys will be generated here by default:\n   \n   ```console\n   /var/jenkins_home/.ssh/id_rsa.pub\n   /var/jenkins_home/.ssh/id_rsa\n   ```\n   \n   Copy the content of your `id_rsa.pub` file and put into the mounted `authorized_keys` file.\n   \n   Add and set a new SSH credential in Jenkins.  Go to Jenkins -\u003e Credentials - System (\u003cYOUR_JENKINS_URL\u003e/credentials/store/system/)\n   \n   \u003cimg src=\"https://github.com/mytaxi/AndroidCI/blob/master/screenshots/jenkins_config_credentials.png?raw=true\"\u003e\n\n### Android SDK\n\n[Project and source code](https://github.com/thyrlian/AndroidSDK)\n\n[Docker Image](https://hub.docker.com/r/thyrlian/android-sdk/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreenowtech%2Fandroidci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffreenowtech%2Fandroidci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffreenowtech%2Fandroidci/lists"}