Clone external git repository in release plan - azure-devops

We version our deployment configuration/scripts separately to our application, but haven't moved them across to VSTS. I know that Build Plans can pull in external git repositories, but the option doesn't appear to be there for linked artifacts in Release Plans. There also doesn't appear to be a "Clone Git Repository" task.
Any thoughts on what my choices might be?

There should have two options to achieve your requirement:
Create a Build Definition and use external git repositories in it, then link the Build Definition in Release Definition:
Although there is no "Clone Git Repository" task, you can use a Command Line task to call git clone command:

Related

how do i automatically pull code from master to fork in azure repos using azure devOps pipeline

I was trying to pull the code from master to fork repository automatically through the azure pipeline. If any one know about this?
If you fork azure repo and want to automatically sync the Fork repo using VSTS Git, please follow below steps.
Supposed the url of original repo is https://dev.azure.com/{organization}/{project}/_git/test, and the url of forked repo is https://dev.azure.com/{organization}/{project}/_git/test_fork.
If you click "Clone" button in test repository, you will see below panel.
Clicking "Generate Git Credentials" button will show the following panel.
So we can use command git remote add upstream https://username:password#dev.azure.com/{organization}/{project}/_git/test to specify it as the upstream of test_fork repo in script.
Now creating a build pipeline using Microsoft-hosted Windows agents, setting the test_fork as the source.
Adding the Command Line task with below script.
git remote add upstream https://username:password#dev.azure.com/{organization}/{project}/_git/test
git fetch upstream
git rebase upstream/master
git push -f origin HEAD:master
Queuing a new build and it will succeed to sync the test_fork repo using VSTS Git.
You can also configure schedules for this pipeline. Now everything is done.
If you use GitHub repo, please refer to this thread for guidance.

git clone hangs within Azure DevOps build task

For some reason performing a git clone command within a Azure DevOps build pipeline always hangs. This includes git submodule update --init --recursive because I think in the background it simply calls git clone on the submodule's repo URL.
The parent repository and the submodules exist in "Azure Repos Git".
So the first phase in the build task is "Get sources" and within this phase i'm able to add command line tasks and call git tag, git branch, git commit, etc. But for some reason it hangs if I try to call git clone.
Seems like it doesn't want to communicate with any other repository other than the repository specified in the "Get sources" phase properties.
Is this a limitation?
Anyone know how I can get git clone to work in an Azure DevOps build task?
There are no errors, it simply hangs on any call to git clone.
My permissions look right:
It was right in front of my face. Under the Get sources properties, way at the bottom:
Here's documentation.

GitHub pipeline/CI to generate files and push them back to the repository

I maintain a public repository on GitHub where changes are only made to a single YAML file. I'm looking for a solution to process that file on every push and generate files based on it. Essentially, a pipeline or CI should parse the file and create many different markdown files. These files (or more specifically, the changes to these files) should then be pushed back to the repository.
Requirements:
Manual changes to the YAML file and automatic changes to the markdown files should both be pushed to the master branch.
The version history should be kept (e.g. forced push might not work).
There is an arbitrary number of files that are generated.
There are Travis providers for GitHub Pages and GitHub Releases. But both have limitations that make them unsuitable for my requirements.
Using what tool/CI/pipeline can I achieve that on GitHub? I would prefer a service over a self-hosted CI.
Assuming that you already have the program/script to parse the YAML file and to generate the Markdown files, I can give you some insights on how I would do this from Jenkins CI. While I draw my experience from running my own instance, there are also hosted options such as CloudBees that you can explore.
Create a new Jenkins Freestyle project.
Under the Source Code Management section, configure your GitHub project coordinates.
Under Build Triggers section, activate the 'Build when a change is pushed to GitHub' option. That would launch the CI job at the moment you push a new version of the YAML file into the repository.
Under the build section, add an Execute shell build step.
In the shell step, launch the program or script that processes the YAML file/generates the .md files. End the script by adding the git add ., git commit -m "message", git pull and git push commands (assumes git is in the path).
Enable the new job to make it active in Jenkins.
You can do this now with the free GitHub Actions option for the repositories.
You need to put this step into your YAML file.
- name: Commit back to GitHub
run: |
git config --global user.name "github-actiuons[bot]"
git config --global user.email "41898282+github-actions[bot]#users.noreply.github.com"
git add -A
git commit -m "Updating some file"
git push
There are some items in the marketplace, but they didn't work for me.
The email of the bot is based on this thread:
https://github.community/t/github-actions-bot-email-address/17204
Update the commit message.
Be careful with the folder paths if you decide to push a specific file in a folder.

Git : How to coordinate work on multiple repositories

Scenario: I'm mostly working with Eclipse to develop plugins. We have our repo that represents our development activities. Now I sometimes need to make some changes to a number of Eclipse or other 3rd party plugins, which are themselves hosted on Git. Then I need to have those modified plugin projects available as part of my codebase.
What I would like to do is to integrate all the remote repositories into a coherent local version where I can pull updates from those other read-only repos, but the changes that we make can be seen in our own repo, just like any other local working directory.
It sounds like you want to use the git subtree command http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/
"The command to update the sub-project at a later date becomes:"
git fetch tpope-vim-surround master
git subtree pull --prefix .vim/bundle/tpope-vim-surround tpope-vim-surround master --squash
"When it’s time to contribute back to the upstream project we need to fork the project and add it as another remote:"
git subtree push --prefix=.vim/bundle/tpope-vim-surround/ durdn-vim-surround master

Integrating Github code to TFS - auto check-in

We are using one of the project from Github. We need to check-in code of this project in our TFS.
We need to automate this process. Else everyday we need to download the code and then check-in.
Is there some plugin or some tool to automate this?
If you are using a TFVC repository in TFS then you'll probably want to build some scripts and a process around Git-TF to help automate some of this work.
If you are using a Git repository in TFS then you can create set up two remotes in a local Git repository, i.e
git remote add upstream https://github.com/foo/bar.git
git remote add origin https://tfsserver/DefaultCollection/_git/bar
And then simply do a git pull upstream master followed by a git push origin master assuming that master is the branch that you want to keep in sync.
With either version control system, you probably want to keep a branch in version control in your TFS repository to match what is in your upstream GitHub project so that you can easily see change coming in the one place and then handle your merges inside your local repository.