Skip to content

Instantly share code, notes, and snippets.

@mpetuska
Last active September 30, 2020 14:54
Show Gist options
  • Save mpetuska/d6f4382e8df012a38a603b47335232ad to your computer and use it in GitHub Desktop.
Save mpetuska/d6f4382e8df012a38a603b47335232ad to your computer and use it in GitHub Desktop.
# azure-pipelines-backend.yml
pool:
vmImage: 'ubuntu-latest'
trigger:
- master
pr:
- master
name: $(Rev:r)
variables:
- group: JFrog-access
stages:
- stage: Build
jobs:
- job: Build
steps:
- bash: |
export JFROG_BASE64=$(printf '%s' '$(JFROG_USER):$(JFROG_TOKEN)' | base64 | tr -d '\n')
echo '@mycompany:registry=https://mycompany.jfrog.io/artifactory/api/npm/npm-dev-local/' >> ~/.npmrc
echo '//mycompany.jfrog.io/artifactory/api/npm/npm-dev-local/:always-auth=true' >> ~/.npmrc
echo '//mycompany.jfrog.io/artifactory/api/npm/npm-dev-local/:email=${{parameters.jfrogUser}}' >> ~/.npmrc
echo "//mycompany.jfrog.io/artifactory/api/npm/npm-dev-local/:_auth=$JFROG_BASE64" >> ~/.npmrc
displayName: Jfrog NPM Auth Setup
- bash: yarn install
displayName: Install
- bash: yarn run test
displayName: Test
env:
CI: true
- task: PublishTestResults@2
inputs:
#testResultsFormat: 'JUnit' # Options: JUnit, NUnit, VSTest, xUnit, cTest
testResultsFiles: '**/junit.xml'
mergeTestResults: true
failTaskOnFailedTests: true
testRunTitle: Jest-Junit Results
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'cobertura'
summaryFileLocation: $(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml
pathToSources: $(System.DefaultWorkingDirectory)/src
- task: SonarQubePrepare@4
displayName: 'Prepare analysis on SonarQube'
inputs:
workingDirectory:
SonarQube: SonarQubeServiceConnection
scannerMode: CLI
configMode: file
extraProperties: |
sonar.projectKey=$(Build.Repository.Name)
sonar.projectBaseDir=$(Build.SourcesDirectory)
project.settings=$(Build.SourcesDirectory)/sonar-project.properties
- task: SonarQubeAnalyze@4
displayName: Run Code Analysis
- task: SonarQubePublish@4
displayName: Publish Quality Gate Result
- bash: yarn run build
displayName: Bundle
env:
CI: true
- publish: ./build
artifact: NodeBundle
displayName: Publish NodeBundle
- stage: Publish${{parameters.suffix}}
condition: |
and(
succeeded(),
or(
eq(variables['Build.SourceBranchName'], 'master'),
eq(variables['Build.Reason'], 'Manual')
)
)
jobs:
- job: Docker
steps:
- task: DownloadPipelineArtifact@2
inputs:
artifact: NodeBundle
path: $(Build.SourcesDirectory)/build
- bash: |
branch_lowercases=$(echo $(Build.SourceBranch) | tr '[:upper:]' '[:lower:]' | tr -d - | tr -d _)
branch_ref=$branch_lowercases
prefix="refs/heads/"
removed_prefix=${branch_ref#"$prefix"}
echo "lower cases $branch_lowercases"
echo "##vso[task.setvariable variable=branch;isOutput=true]$removed_prefix"
displayName: 'Remove prefix'
name: removed_prefix
- bash: |
echo "repository name: $(Build.Repository.Name)"
repository_name=$(echo $(Build.Repository.Name) | tr '[:upper:]' '[:lower:]')
repo_name=$repository_name
prefix="mycompany/"
fixed_repo_name=${repo_name#"$prefix"}
echo "fixed repository name: $fixed_repo_name"
echo "##vso[task.setvariable variable=repo;isOutput=true]$fixed_repo_name"
echo "##vso[task.setvariable variable=dockerGroup]"
displayName: 'Fix repository name'
name: fixed_repo_name
- ${{ if ne(parameters.dockerGroup, '') }}:
- bash: echo "##vso[task.setvariable variable=dockerGroup]$(dockerGroup)/"
displayName: Prepare Docker Group
- bash: echo "##vso[task.setVariable variable=${{ parameters.repoVariable }}]mycompany-docker-dev.jfrog.io/$(dockerGroup)$(fixed_repo_name.repo)/$(removed_prefix.branch)"
displayName: Push Image Repository Variable [${{ parameters.repoVariable }}]
- bash: echo "##vso[task.setVariable variable=dockerImageTag]$(dockerImageRepository):$(build.buildNumber)"
displayName: Push Image Tag Variable [dockerImageTag]
- bash: docker build -t $(dockerImageTag) $(DOCKER_BUILD_ARGS) .
displayName: Docker Build
- bash: |
mkdir -p $(System.DefaultWorkingDirectory)/DockerBundle
printf '%s' "$(dockerImageRepository)" > $(System.DefaultWorkingDirectory)/DockerBundle/repository
printf '%s' "$(Build.BuildNumber)" > $(System.DefaultWorkingDirectory)/DockerBundle/tag
displayName: Prepare DockerBundle
- publish: $(System.DefaultWorkingDirectory)/DockerBundle
artifact: DockerBundle
displayName: Publish DockerBundle
- bash: docker login mycompany-docker-dev.jfrog.io --username $(JFROG_USER) --password $(JFROG_TOKEN)
displayName: Login to JFrog
- bash: docker push $(dockerImageTag)
displayName: Push Image to JFrog
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment