Stash/unstash and Shared lib

I am a jenkins user and exploring GITLAB and want to find out how certain things will work in case migration is planned.

Jenkins uses concepts of shared librairis where commonly used pipeline functionality is coded in groovy and can be called in any pipeline without re-writing the same like:
def gitpush(args="“tag”) {
sh “git push ${args}”
}

@Library(‘Utility’) _ /this is the name of repo you configured in jenkins as shared library having all groovy classes and functions/
pipeline {
agent any
stages {
stage (‘TEST’) {
steps {
gitPush(“origin master”)
}
}
}
}

  1. Similarly if there is a need to use a different agent for a specific stage in pipeline, we can stash the entire workspace of previous stage and unstash in the next stage where buildhappens in a new Agent and all the file produced by previous stage are available.
    IS there a similar STASH/UNSTASH available in GITLAB

  2. What kind of plugin and community support we have in Gitlab