Artifactory & GitLab CI持續集成實踐

  • 2020 年 2 月 19 日
  • 筆記

GitLab CI支持創建多個構建,並評估每次代碼提交是否通過測試和以及對您產品的影響。在構建過程中,會生成大量二進制文件,如果不能正確的大規模管理這些文件,就會導致二進制文件管理混亂。為了克服這個問題,Artifactory被無縫地集成到GitLab CI構建過程中,以便更好的發佈和管理這些二進制文件,並通過JFrog CLI, GitLab CI緩存、發佈您的依賴包、製品包和構建信息到Artifactory。

這篇文章描述了如何將 GitLab CI 與 Artifactory 集成在一起,不僅可以解析和部署二進制文件,還可以從 Artifactory 的 Build Integration 功能中獲取更多幫助。

將 Artifactory 與 GitLab CI 集成後,您可以存儲和查看以下信息:

· 構建信息和發佈的模塊

· 使用的依賴

· 環境變量

· 許可證摘要

· 鏈接到您的 Jira issue

· 構建之間的差異

一、 環境配置

· 安裝Gitlab Runner並配置Gitlab (此處不再贅述)

· 準備一個示例項目

https://gitlab.com/guoyunzong/maven-example.git

· Artifactory 中創建倉庫(2 local,1 remote,1 virtual):maven-dev-local、maven-pro-local、maven-remote、maven-virtual

· 在項目目錄下編寫配置文件 (maven.conf)

version: 1  type: maven  resolver:   snapshotRepo: maven-virtual   releaseRepo: maven-virtual   serverID: Default-Server  deployer:   snapshotRepo: maven-virtual   releaseRepo: maven-virtual   serverID: Default-Server  在項目目錄下編寫配置文件 (jira-cli.conf)  version: 1  issues:   serverID: Default-Server   trackerName: JIRA   regexp: (.+-[0-9]+)s-s(.+)   keyGroupIndex: 1   summaryGroupIndex: 2   trackerUrl: http://my-jira.com/issues   aggregate: true   aggregationStatus: RELEASED  · 在gitlab中配置artifactory的環境變量,Settings—CI/CD--Variables ,如:  ARTIFACTORY_URL  http://192.168.230.32:8081/artifactory  ARTIFACTORY_USER admin  ARTIFACTORY_PASS password  MAVEN_REPO_KEY  maven-virtual

二、編寫 Gitlab CI 腳本並執行構建

· 在項目目錄下編寫腳本(.gitlab-ci.yml)

image: docker:git  services:  - docker:dind  stages:  - build  build:   image: maven:3.5.4-jdk-8-alpine   stage: build   script:   # Install      - apk add git   # Set the M2_HOME environment variable      - export M2_HOME=/usr/share/maven   # Download JFrog CLI      - curl -fL https://getcli.jfrog.io | sh   # Configure Artifactory instance with JFrog CLI      - ./jfrog rt config --url=$ARTIFACTORY_URL --user=$ARTIFACTORY_USER --password=$ARTIFACTORY_PASS      - ./jfrog rt c show   # Mvn clean install      - ./jfrog rt mvn "clean install" maven.conf --build-name=gitlabci-maven-artifactory --build-number=$CI_JOB_ID   # Collect the environment variables      - ./jfrog rt bce gitlabci-maven-artifactory $CI_JOB_ID   # Add jira issue      - ./jfrog rt bag gitlabci-maven-artifactory $CI_JOB_ID --config jira-cli.conf   # Add sonar(optional)      - ./jfrog rt sp "maven-dev-local/org/jfrog/test/multi3/3.7-SNAPSHOT/*.war" "qulity.gate.sonarUrl=http://192.168.230.156:9000/dashboard/index/gitlabci-maven-artifactory"   # Add properties(optional)      - ./jfrog rt sp "maven-dev-local/org/jfrog/test/multi3/3.7-SNAPSHOT/*.war" "deploy.tool=ansible"      - ./jfrog rt sp "maven-dev-local/org/jfrog/test/multi3/3.7-SNAPSHOT/*.war" "ip=127.0.0.1"   # Pass the build information to Artifactory         - ./jfrog rt bp gitlabci-maven-artifactory $CI_JOB_ID   # Promote      - ./jfrog rt bpr gitlabci-maven-artifactory $CI_JOB_ID maven-pro-local   # Xray scan(optional)      - ./jfrog rt bs gitlabci-maven-artifactory $CI_JOB_ID --fail=false   # Download(optional)      - ./jfrog rt dl maven-dev-local/org/jfrog/test/multi3/3.7-SNAPSHOT/multi3-3.7-20191213.050538-8.war all-my-frogs/   when: manual  · 提交代碼,輸入git commit message,格式如下  HAP-1007 - This is a sample issue

· 執行構建(可配置手動或自動執行)

CI/CD–Pipelines

· Job中查看構建輸出

· artifactory中的issue信息(可點擊 HAP-1007 鏈接至 Jira 地址)