5最佳实践für GoLang-CI/CD

Entwicklern, die in etablierten Sprachen wie Java, JavaScript oder Python programmieren, ist die optimale Art and Weise持续集成和持续交付工作流(CI/CD) mitArtifactoryAufzubauen, ziemlich vertraut。以他的名字命名,他的名字,他的名字Abhängigkeiten für他的名字Container-Lösungen wie Dockerbieten eine klare路线图。
阿贝尔·威·施沃斯特斯,在GoLang程序中,CI/CD在GoLang程序中,Effizienz zu betreiben?
在围棋中,我是他的天才,是他的天才,是他的创新。麻省理工学院der nativen Unterstützung von Artifactory für GoLangist der Weg zu einwandfreier CI/CD viel klarer。
Mit den neuesten Innovationen in Go, wie der nativen Unterstützung von Artifactory, ist der Weg zu einwandfreier CI/CD viel klarer。Klick um zu Tweeten最佳实践
Wir bei JFrog信德groe fan von GoLang und verwenden es als Sprache für mehrere unserer renommiertesten Lösungen。和我们一起创作,一起宣传,一起制作Herzstück unserer CI/CD einsetzen。Hier sinind einige der Praktiken, die wir empfehlen können:
1.Go-Module verwenden
安德斯的viele etablierte程序,sprachen haben die ersten版本,von GoLang keinen gemeinsamen机械für die Verwaltung von versionerten Abhängigkeiten bereitgestellt。Stattdessen hatte das Go-Team andere Entwickler aufgefordert, Zusatz-Tools für die Versionierung von Go-Paketen zu entwickeln。
Das änderte sich mit der Veröffentlichung von Go 1.11 im 2018年8月,da ab diesem ZeitpunktGo-Moduleunterstutzt了。Go-Module sind Sammlungen von zusammengehörigen Go-Paketen, die als eine Einheit versioniert werden, und bilden nun die native Lösung zur Verwaltung von Abhängigkeiten für GoLang。死亡ermöglicht es Entwicklern,代码gemeinsam zu nutzen, ohne ihn wiederholt herunterzuladen。
Ein go - moduler野生durch einego.mod-关于确定项目的数据,关于模数的Modulabhängigkeiten angibt。Die Modulabhängigkeit wid durch Modulname undVersionsnummerangegeben。
Wenn Sie Go-Module noch nicht übernommen haben, müssen Sie die folgenden Schritte ausführen:
- Verwenden您
mod init嗯einego.mod-Datei zu erzeugen, wenn frühere Paketmanager verwendet wurden。 - Verwenden您
整理衣柜,市场部经理verwendet wurden。Mit diesem Befehl wideine ausgefüllte去。mod-Datei erzeugt。 - Wenn es sich um Version v2 und höher handelt, dann ist die Änderung des Modulnamens erforderlich, um das entsprechende后缀hinzuzufügen, Aktualisierungen des Importpfads, die Verwendung von modulorientierten statischen Analysetools und schließlich die Aktualisierung von Codegenerator-Dateien wie zum Beispiel
.proto-日期,嗯,这是一个很重要的问题。
Hier ist zum Beispiel einego.mod-Datei für ein öffentlich verfügbaresgo - module für einen strukturierten Logger:
模块github.com/sirupsen/logrus require (github.com/davecgh/go-spew v1.1.1 //间接github.com/konsorten/go-windows-terminal-sequences v1.0.1 github.com/pmezard/go-difflib v1.0.0 //间接github.com/stretchr/objx v0.1.1 //间接github.com/stretchr/testify v1.2.2 golang.org/x/sys v0.0.0-20190422165155-953cdadca894)
Beachten Sie, dass die Versionsnummern derSemver-Konventionentsprechen müssen (z. B. v1.2.1 anstelle von 20190812 oder 1.2.1) gemäß go-Befehl。Sie sollten es vermeiden, Pseudo-Versionen wie die oben gezeigt (v0.0.0-yyyymmddhhmmss-abcdefabcdef) zu verwenden - obwohl Pseudo-Versionen mit Commit-Hash eingeführt wurden, um Go-Module-Support für nicht markierte Projekte zu ermöglichen, sollten Sie nur als fall- mechanismus verwendet werden。Wenn die Abhängigkeiten, die Sie benötigen, Release-Tags haben, verwenden Sie diese Tags in Ihren require-Anweisungen。
In Ihrem eigenen Code können Sie dieses go - module zusammen mit anderen Abhängigkeiten importieren:
import ("fmt" "io/ioutil" "net/http" "os" // Öffentliches go - module für das日志"github.com/sirupsen/logrus")
Dann können Sie die Modulfunktionen in Ihrem GoLang-Code referenzieren:
// Text zum日志发送日志。Printf (" Hello日志!”)
2.Verwenden Sie GOPROXY,嗯die Unveränderlichkeit und Verfügbarkeit sicherzustellen
Sobald Sie Ihre GoLang-Abhängigkeiten als versionierte Module pflegen, können Sie als unveränderliche Instanzen behalten, indem Sie eine GOPROXY einrichten。Auf diese Weise können Sie immer garantieren, was eine bestimmte版本eines模块enthält, sodass Ihre构建immer wiederholbar信德。
Werden Sie Go-Module verwenden, die öffentlich verfügbare开源- pakete sind?Solche, die Sie erstellen und mit der OSS-Community teilen?Module, die Sie nur für Ihr private vorhalten?Hier finden Sie Möglichkeiten, wie Sie schrittwise vorgehen oder all all auf eminmal machen können和sicherstellen, dass diese unveränderten版本模块immer für Ihre构建verfügbar信德。
GOLANG。ORG
Das Go-Team bei谷歌unterhält einen Satz von GOPROXY-Diensten für öffentlich verfügbare模块。Ab Go 1.13 bird der Modulspiegelproxy.golang.orgautomatisch als Standard-GOPROXY festgelegt, wenn Go installiert oder aktualisiert wd。diesel Dienst wuch durch einen Indexdienst zum Auffinden neuer模块unterstützt (index.golang.org) sowie durch eine global go。sum-Datenbank zur Authentifizierung von Modulinhalten (sum.golang.org).
死go.dev-网站widebenfalls vom - team gepflegt and ist der Hub für Go- benutzer, der centralisite und kuratierte resource cenen ausdem gesamten Go-Ökosystem bereitstellt。Auf柴油机网站können Siepkg.go.devunter Tausenden von Open-Source-Go-Paketen über eine bedienungsfreundliche Benutzeroberfläche suchen。

Artifactory Go-Registries
这是我们的秘密,这是我们的秘密,müssen这是我们的秘密,这是我们的秘密beschränken。Mit Artifactory können Sie sowohl lokale als auch exoneGo-Registrieseinrichten,苏打öffentliche和私人模块gleichermaßen für Ihre建筑verfügbar信德。
Sie können den go - spiegeldienals Proxy für eine externe Go-Registrierung in Artifactory verwenden, um Ihrem Build-System einen lokalen Cache zur Verfügung zu stellen。diesel beschleunigt Ihre Builds und trägt zum Schutz vor Ausfällen der Netzwerkverbindung bei。Das Einrichten ist einfach。

Sie können auch eine oder mehere lokale Go-Registrierungen für Module konfigurieren, die Sie innerhalb Ihrer Organisation privat pflegen müssen。
Wenn Sie lokale and external registry in einemvirtuellen库kombinieren, können Ihre Builds Go-Modulabhängigkeiten auflösen, die sowohl von einer öffentlichen Quelle stammen als auch von Modulen, die Sie private erstellen und pflegen。
Mehr darüber, weisie Ihre GOPROXY for Artifactory-Repositories konfigurieren, erfahren Sie in diesem Blogbeitrag über dieAuswahl Ihrer GOPROXY for Go-Module.
3.Artifactory-Repository-Layouts verwenden
Wo werden, wenn Sie Ihre App erstellen (mit去建立), die erzeugten binären手工制品?Ihr Build-Prozess kann diese Zwischenergebnisse an repository in einem Binärdatei-Repository-Manager wie Artifactory übergeben。
Für diese dazwischenliegenden Go-Artefakte werden Sie die generischen仓库von Artifactory verwenden。Eine intelligente Strukturierung柴油机库kann Ihnen dabei helfen, den Fluss Ihrer Binärdateien durch Entwicklung,测试和生产mit分离库für jede柴油机Phasen zu kontrollieren。嗯你大不祖unterstützen, verwenden Sie diebenutzerdefinierte Repository-Layout-Funktionvon Artifactory mit diesen generischen仓库。
Erstellen Sie ein benutzerdefiniertes布局,das ähnlich wie das folgende aussieht:
[机构]/[名称< + >]。/(模块)-[拱< + >]。[baseRev]。[ext]
您要是das benutzerdefinierte Layout konfigurieren, sollten Sie die Artefakt-Pfadauflösung testen, um zu bestätigen, wie Artifactory die Modulinformationen aus dem Pfad under Verwendung der layout defintionen aufbaut。

4.最终的bauen und heraufstufen
Wenn Sie Ihre Repositories für Ihre Go-Builds richtig eingerichet haben, können Sie damit beginen, diese efficient durch Ihre Pipeline-Stufen zu bewegen。
Viele Software-Entwicklungsverfahren erfordern bei jedem登台-Übergang von Entwicklung,测试和生产einen vollständig oder teilweise neuen构建。Aber da die Entwickler den gemeinsam genutzten Code immer wieder ändern, brt jder neue Build neue Ungewissheiten mit sich;Sie können nicht sicher sein,是darin enthalten ist。Selbst mit sicherheitsorkehrungen zur Sicherstellung deterministischer Builds kann es erforderlich sein, die gleichen Qualitätsprüfungen in jder Phase zu wiederholen。
Erstellen Sie stattdessen Ihre Go-basierten微服务终端befördern Sie Sie dann auf die nächste Stufe, sobald Beförderungskriterien wie测试订单扫描erfüllt信德。Wenn Sie planen, Ihren o- microservice zu containerisieren, gilt das gleiche Prinzip: Jedes Docker-Image einmal zu erstellen und es über eine Reihe von Staging-Repositories heraufzustufen。Auf diese Weise können Sie garantieren, dass das,是getestet wurde, genau das ist,是für die production freigegeben wid。

5.Vermeiden Sie monolithische管道
安斯特尔·艾茵之根,单石陈管道für Ihre App ist es besser, mehere zu haben, wobei jeede eine andere Schicht erstellt, testet, prüft und heraufstuft。达达尔奇können Sie Ihren CI/CD-Prozess flexible gestalten, wobei unterschiedliche Teams für jede Schicht verantwortlich sind。Außerdem wid ein ein“快速失败”-系统gefördert, das hilft, Fehler frühzeitig zu erkennen。
Beispielsweise kann die Bereitstellung einer containerisierten Anwendung aus fünf pipeline bestehen, was in der Regel der Fall ist:
- Erstellen Sie die Go-Anwendung mit der JFrog CLI.Diese Pipeline zieht den Quellcode, erstellt die Anwendung mit Artifactory- repositories für Abhängigkeiten und Ausgabe-Binärdateien, testet und stuft von einem Dev-Repository zu einem stage - repository in Artifactory herauf。
- Docker-Framework, Docker-Framework。德国国家机械设备和升级设备können德国机械设备的动态标签。Wenn zum Beispiel in dynamisches Tag wie
高山:3.10基本的docker -框架verwendet ward, werden alle Patch-Updates bejeder Erstellung des docker -框架einbezogen。模具管材,快速模具,试验和加工。 - Rufen Sie die heraufstustuten Artefakte ab, die von von von vorherigen pipeline erzeugt wurden, and the same Sie eine containererte App, zu der ebenfalls die Phasen Erstellung, Test, Scan and Heraufstufen gehören。
- Erstellen Sie ein Helm-Chart管道产品,管道产品,管道产品,管道产品,管道产品,管道产品。
- Stellen Sie die containeriserte Go-App mithilife des helm - diagram in Kubernetes bereit。
Artifactory fungiert als“Quelle der Wahrheit”für Ihre Go-Builds und bietet eine GOPROXY für öffentliche和私人模块sowie die Speicherung kompilierter Binärdateien。Die Verwendung der JFrog CLI zur Erstellung Ihrer Go-App hilft dem Build-Prozess, mit Artifactory zu interagieren和Die Build-Informationen zu erfassen, Die Ihre Builds vollständig nachvollziehbar machen。Hier ist ein Beispiel-Snippet:
//配置Artifactory jfrog rt c //配置项目的存储库jfrog rt go-config //使用go构建项目,并从Artifactory解析项目依赖项。jfrog rt go build——build-name=my-build——build-number=1 //发布我们构建的包到Artifactory。jfrog rt gp go v1.0.0——build-name=my-build——build-number=1 //收集环境变量并将它们添加到构建信息中。jfrog rt bce my-build 1 //发布构建信息到Artifactory。Jfrog rt bp my-build 1
嗯mehr darüber你在哪里,你在哪里Beispiel-Demo-Dateien für GoLang CI/CD, die wir auf der GopherCon verwenden werden。
去吧,艾因法赫
魏思森,können einfache最佳实践在Verwaltung Ihrer golan - anwendungen den Weg zu有效CI/CD leichter。Artifactory kanann als der wesentliche经理Ihrer software - artefak - lieferkette eine zentrale Rolle dabei spielen, diese Methoden in Ihre Software-Entwicklungspipeline einzuführen。
还有问吗?Wir beantworten sie gerne auf Gophercon。陶琛你在哪里,嗯,最好的Möglichkeiten zu erkunden, wie Sie Ihre Go-Anwendungen schnell und höchster Qualität veröffentlichen können。Sie können aber auch diekostenlose Testversion von Artifactorynutzen,嗯die Möglichkeiten在der Praxis umzusetzen!