Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Building blog system using static site generator and Azure DevOps
Search
meganii
January 19, 2019
Technology
0
790
Building blog system using static site generator and Azure DevOps
Azure DevOps Tokyo, Japan 2nd impact のLT発表資料です。
meganii
January 19, 2019
Tweet
Share
Other Decks in Technology
See All in Technology
家族アルバム みてねにおけるGrafana活用術 / Grafana Meetup Japan Vol.1 LT
isaoshimizu
1
770
KubeCon EU 2024 Recap “Kubernetes Policy Time Machine: Where to Next?”
ryysud
0
220
リテール金融(キャッシュレス・ネット銀行・ネット証券)の競争環境と経済圏
8maki
0
1.2k
EMとして2023年度に頑張ったこと / What we did well in FY2023 as a EM
pauli
1
170
生成AIの変革の時代に、直近1年で直面した課題とその解決策
ktc_wada
0
310
Janus
bkuhlmann
1
490
VSCodeの拡張機能を作っている話
ebarakazuhiro
1
530
DMM.com アルファ室採用案内資料
hsugita
1
160
一生覚えておきたい「システム開発=コミュニケーション」〜初めての実務案件振り返りLT〜
maimyyym
1
160
Building a RAG-poweredAI chat appwith Python and VS Code
pamelafox
0
100
Databricks における 『MLOps』
databricksjapan
2
170
オーナーシップを持つ領域を明確にする
konifar
13
3.2k
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
43
6.8k
YesSQL, Process and Tooling at Scale
rocio
164
13k
Writing Fast Ruby
sferik
621
60k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Become a Pro
speakerdeck
PRO
11
4.5k
Design by the Numbers
sachag
274
18k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.6k
How to name files
jennybc
65
93k
Optimising Largest Contentful Paint
csswizardry
8
2.4k
A Philosophy of Restraint
colly
197
16k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Transcript
(LT) Azure DevOpsͱStatic Site GeneratorΛ ར༻ͯ͠ϒϩάڥΛߏஙͯ͠Έͨ Azure DevOps Tokyo,
Japan 2nd impact 2019/01/19 @meganii
@meganii Ί͕ʹ͍ • Twitter: meganii • Blog: https://www.meganii.com/ • ͓ࣄ:
ࣾSE(Azureؔ࿈) About me Azure DevOpsΛࣄͰ͍͍ͨͨΊษڧத
ຊ͍͑ͨ͜ͱ (1)Static Site GeneratorͰͷϒϩάߏங͍͍ͧʂ (2)Azure DevOpsͰͷϒϩάڥߏஙͳ͔ͳ͔Α͍ͧʂ (3)Azure DevOpsͷใ͕ͳ͔ͳ͔ݟ͚ͭΒΕͳͯ͘ࠔͬͯΔ ॿ͚͍ͯͩ͘͞ʂ
1. Static Site GeneratorͰͷ ϒϩάߏங
ߦ͖͔͚ͨͬͨΕͲɺߦ͚ͳ͔ͬͨɾɾɾ
ݹ͖ྑ͖࣌ 3) Yahoo! δΦγςΟʔζ 1)ϝϞா 2) FFFTP ͬͯͯ͜͜ͷ੩తαΠτ HTMLλάଧͪ FTPసૹ
Web
ࠓʁ • CMSͱͯ͠ɺWordPress͕ଟ͍ʁ • ϝϯς͕େมʢDatabase, Security, Performance….ʣ • WordPressʁ •
ಈతαΠτ͔Βݹ͖ྑ͖੩తαΠτͷ༳Γ͠
Tools Sandbox Static Site Generator CI/CD , Hosting Service ฏΛੜ͖ൈ͍ͨࢲͨͪ
ΑΓΑ͍ʮ༡ͼಓ۩ʯͱʮ༡ͼʯΛखʹೖΕͨ
Static Site Generator • ੩తͳαΠτΛੜ͢Δπʔϧ • Jekyll, Octopress, Middleman(Ruby) •
Hexo(JavaScript) • Hugo(Golang) • Gatsby(JavaScript(React.js))
Hugo • The world’s fastest framework for building websites. •
GolangͷStatic Site GeneratorͰ͋ΓϏϧυ͕ര https://gohugo.io/
Gatsby • Gatsby.js is a static PWA (Progressive Web App)
generator. React.js, GraphQLͳͲϞμϯͳϑϩϯτΤϯυͷٕज़Λར༻ͨ͠Static Site GeneratorͷҰ෦ • GraphQLͷΠϯλʔϑΣʔεͰಁաతʹσʔλιʔε(Markdown fileɺ JSONɺDatabase)Λѻ͏͜ͱ͕Ͱ͖Δ • Կߟ͑ͳͯ͘αΠτ͕രʹͳΔ Preload, Gatsby Link(ը໘ସͳ͠Ͱͷը໘ભҠ) https://www.gatsbyjs.org/
Static Site GeneratorΛར༻͢ΔϝϦοτ • HTML + CSS + JavaScriptͰߏ͞Ε͍ͯΔͨΊܰྔ •
DatabaseΛߟ͑ͳͯ͘ࡁΉ • WordPressͷΑ͏ʹηΩϡϦςΟύονద༻ͷ͜ͱΛߟ͑ͳ ͯ͘Α͍
Static Site GeneratorΛ༻͍ͨ ੩తαΠτӡ༻্ͷ՝ • ຖճϩʔΧϧͰϏϧυͯ͠ɺखಈσϓϩΠ໘ • ϥϯΩϯάͷΑ͏ͳಈతͳίϯςϯπ͕ඞཁ • ࣗಈͰΔͨΊʹʁ
CI/CDαʔϏεͱHostingͷར༻ • Ͳ͜ͰϏϧυ͢Δ͔ • Ͳ͜ʹϗετ͢Δ͔
ϒϩάڥʹٻΊΔ͜ͱ • جຊແྉͰ͑Δ͜ͱ (ຖ݄͏͓ۚɾɾɾ) • ࿈ܞ͕؆୯Ͱ͋Δ͜ͱ (ར༻͢ΔαʔϏεͳΔ͘গͳ͘) • Public ʹ͠ͳͯ͘ར༻Ͱ͖Δ͜ͱ
(SourcePrivateͰӡ༻͍ͨ͠)
Comparison Provider Source Management CI/CD Hosting Remarks Mix Private Repository
(Bitbucket, GitLab) CI Service (Circle CI) Hosing Service (GitHub Pages, Google Firebase) όϥόϥͷͨΊਏ͍ GitHub GitHub (GitHub Actions) beta GitHub Pages ·ͩCI/CD͕ GA͍ͯ͠ͳ͍ GitLab GitLab GitLab CI GitLab Pages શ෦ೖΓ͕ͩɺ CI͕͍ҹ Netlify - (GitHub, Bitbucket) Netlify Netlify ຊ͔ΒͷΞΫηε͕ ͍ҹ Microsoft Azure Repos Azure Pipelines GitHub Pages Awesome!!!!
2. Azure DevOpsͰͷ ϒϩάڥߏங
Azure Repos Azure Functions CI/CD GitHub Pages Azure Pipelines Source
Hosting git push Local WorkFlow Git pushҎ֎ͰίϯςϯπΛߋ৽͢Δ߹ Queue build Markdown
Trigger • git push࣌ • εέδϡʔϥʢྫ͑ຖߋ৽ʣ ˞ Azure DevOpsʹϩάΠϯͯ͠ͳ͍ͱ࣮ߦ͞Εͳ͍ʁ •
Azure Pipelines্Ͱखಈ࣮ߦ • Azure FunctionsͷURL࣮ߦ
Azure Pipelines
YAML for Hugo (1)Installing Hugo binary (2)Build (3)Git commit trigger:
- master pool: vmImage: 'Ubuntu-16.04' variables: GOBIN: '$(GOPATH)/bin' # Go binaries path GOROOT: '/usr/local/go1.11' # Go installation path GOPATH: '$(system.defaultWorkingDirectory)/gopath' # Go workspace path modulePath: '$(GOPATH)/src/github.com/$(build.repository.name)' # Path to the module's code steps: - script: | mkdir -p '$(GOBIN)' mkdir -p '$(GOPATH)/pkg' mkdir -p '$(modulePath)' shopt -s extglob echo '##vso[task.prependpath]$(GOBIN)' echo '##vso[task.prependpath]$(GOROOT)/bin' displayName: 'Set up the Go workspace' - script: | mkdir ~/tmp cd ~/tmp wget 'https://github.com/gohugoio/hugo/releases/download/v0.53/hugo_0.53_Linux-64bit.tar.gz' tar zxvf hugo_0.53_Linux-64bit.tar.gz mv hugo $(GOBIN) displayName: 'Set up Hugo' - script: | hugo version displayName: 'Check Hugo version' - script: | hugo displayName: 'Build content by hugo' - script: | git clone https://meganii:$(GITHUB_PARSONAL_ACCESS_TOKEN)@github.com/meganii/www.meganii.com cp -rp public/* www.meganii.com cd www.meganii.com git config --local user.name $(GIT_USER) git config --local user.email $(GIT_EMAIL) git add --all git commit -m "[skip ci] build from azure" git push -f origin master displayName: 'Deploy to GitHub Pages' งғؾͰॻ͍͍ͯΔͷͰɺ ਖ਼͍͠ॻ͖ํืूதɾɾɾ
Azure Functions const azdev = require('azure-devops-node-api'); const orgUrl = `https://dev.azure.com/${process.env.AZURE_DEVOPS_PROJECT_NAME}`;
const token = process.env.AZURE_DEVOPS_API_KEY; const projectName = 'github-pages'; module.exports = async function (context, req) { context.log('JavaScript HTTP trigger function processed a request.'); let authHandler = await azdev.getPersonalAccessTokenHandler(token); let connection = await new azdev.WebApi(orgUrl, authHandler); let vstsBuild = await connection.getBuildApi(); const builds = await vstsBuild.getBuilds(projectName); const build = await vstsBuild.getBuild(builds[0].id, projectName); const res = await vstsBuild.queueBuild(build, projectName); context.res = { // status: 200, /* Defaults to 200 */ body: res.status }; }; ͬͱ؆୯ͳํ๏͕͋Εڭ͍͑ͯͩ͘͞
None
ࠓޙΓ͍ͨ͜ͱ • Docker containerΛར༻ͨ͠Build. CacheͬͯͲ͏ͬͯΔʁ • CD (Release)ͷར༻ • Gatsby.jsͰScrapboxΛσʔλιʔεʹ͍ͨ͠
• ॻ͘ͱ͖Scrapboxɻදࣔ੩తαΠτ
Thank you @meganii