How to run GitLab CI pipeline on App Platform

I want to run a CI/CD pipeline from GitLab to my app on the DO App Platform. There is nothing in the docs, and the only post I’ve seen about SSH and the App Platform suggests it’s not possible. Do I need to run the app from a Droplet? Or is there a work-around?

Show comments

Submit an answer

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Sign In or Sign Up to Answer

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Thanks, @bobbyiliev. I set up the App according to the DO instructions. On running the linter syntax is valid, GitLab CI configuration is valid, and .gitlab-ci.yml passes the pipeline. The CI failure seems to occur before build_and_deploy. I am using rollup, and the app builds and runs properly on my local machine. I’m working on debugging now, but it’s just as likely I botched the App Spec in DO. Here is the .gitlab-ci.yml:

image: node:latest

    - node_modules/

  - lint
  - test
  - build_and_deploy

  # Check for ssh-agent + rsync and install if not present
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y  )'
  - 'which rsync || ( apt-get update -y && apt-get install rsync -y )'
  - eval $(ssh-agent -s)
  - npm install

  stage: lint
    - npm run lint

  stage: test
    - npm run test

  stage: build_and_deploy
  environment: production
    # Inject the remote's private key
    - echo "$DIGITAL_OCEAN_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    # Append keyscan output into known hosts
    - ssh-keyscan $DIGITAL_OCEAN_SERVER_IP >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    - npm run build
    # Non interactive ssh gracefully reloads server
    # shouldn't need to do this with our django server.
    - ssh $DIGITAL_OCEAN_SERVER_USER@$DIGITAL_OCEAN_SERVER_IP '. /etc/profile; service nginx restart'
    # Trigger deployments only from master branch
    - master


Indeed SSH access is not available to the App platform.

What I usually do is to use a repository on GitLab and auto-deploy + build directly on the App platform:

  • Run any CI checks in GitLab on each merge request
  • Only if the checks pass, I would merge the changes to my main branch
  • Merging any changes to the main branch, would then trigger an auto-deployment to the App platform.

If this is not what you have in mind, can you share more information regarding your pipeline and what exactly are you looking to achieve?

Personally, I would use a Droplet for any specific CI checks.